MenuBuddy 5.0.1

dotnet add package MenuBuddy --version 5.0.1
                    
NuGet\Install-Package MenuBuddy -Version 5.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MenuBuddy" Version="5.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MenuBuddy" Version="5.0.1" />
                    
Directory.Packages.props
<PackageReference Include="MenuBuddy" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MenuBuddy --version 5.0.1
                    
#r "nuget: MenuBuddy, 5.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package MenuBuddy@5.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MenuBuddy&version=5.0.1
                    
Install as a Cake Addin
#tool nuget:?package=MenuBuddy&version=5.0.1
                    
Install as a Cake Tool

NuGet License: MIT

A complete MonoGame library for building menu systems and managing game state transitions. Based on the famous NetworkStateManagement samples from the golden age of XNA.

Features

  • Screen-based architecture - Stack-based screen management with automatic transitions
  • Multiple input modes - Support for controller, mouse, and touch input
  • Rich widget library - Labels, buttons, sliders, dropdowns, text input, checkboxes, and more
  • Flexible layouts - Absolute, relative, stack, scroll, padded, and tree layouts
  • Customizable styling - Global stylesheet for consistent appearance across your UI
  • Smooth transitions - Built-in fade, slide, and wipe transitions between screens
  • Multi-platform - Works on DesktopGL, iOS, Android, and Windows Universal

Installation

Install via NuGet:

dotnet add package MenuBuddy

Or visit: https://www.nuget.org/packages/MenuBuddy/

Quick Start

1. Create Your Game Class

Extend one of the provided game base classes depending on your input type:

using MenuBuddy;
using Microsoft.Xna.Framework;

// For desktop with controller support
public class MyGame : ControllerGame
{
    public MyGame()
    {
        VirtualResolution = new Point(1280, 720);
        ScreenResolution = new Point(1280, 720);
    }

    public override IScreen[] GetMainMenuScreenStack()
    {
        return new IScreen[] { new MainMenuScreen() };
    }
}

// For mobile/touch devices, use TouchGame instead:
// public class MyGame : TouchGame

// For mouse-based input:
// public class MyGame : MouseGame

2. Create a Menu Screen

using MenuBuddy;
using InputHelper;
using System.Threading.Tasks;

public class MainMenuScreen : MenuStackScreen
{
    public MainMenuScreen() : base("Main Menu")
    {
    }

    public override async Task LoadContent()
    {
        await base.LoadContent();

        // Add menu entries
        var startButton = new MenuEntry("Start Game", Content);
        startButton.OnClick += (sender, e) =>
        {
            ScreenManager.AddScreen(new GameplayScreen());
        };
        AddMenuEntry(startButton);

        var optionsButton = new MenuEntry("Options", Content);
        optionsButton.OnClick += (sender, e) =>
        {
            ScreenManager.AddScreen(new OptionsScreen());
        };
        AddMenuEntry(optionsButton);

        var exitButton = new MenuEntry("Exit", Content);
        exitButton.OnClick += (sender, e) =>
        {
            ScreenManager.Game.Exit();
        };
        AddMenuEntry(exitButton);
    }
}

3. Run Your Game

using var game = new MyGame();
game.Run();

Core Concepts

Screens

Screens are the fundamental building blocks of MenuBuddy. Each screen represents a distinct game state (main menu, options, gameplay, pause menu, etc.).

Screen Type Description
Screen Abstract base class for all screens
WidgetScreen Screen that can contain and manage widgets
MenuScreen Widget screen with keyboard/controller navigation
MenuStackScreen Menu screen with vertical stack layout
MessageBoxScreen Modal dialog with OK/Cancel options
OkScreen Simple alert dialog with OK button
LoadingScreen Shows progress while loading content
ErrorScreen Displays exception information

Screen Lifecycle

LoadContent() -> Update() -> Draw() -> UnloadContent()

Screens support transitions when being added or removed:

// Add a screen with transition
await ScreenManager.AddScreen(new OptionsScreen(), controllingPlayer);

// Remove screen with exit transition
screen.ExitScreen();

// Clear all screens
ScreenManager.ClearScreens();

Widgets

Widgets are interactive UI elements that can be added to screens.

Labels
// Simple label
var label = new Label("Hello World", Content);
AddItem(label);

// Label with font size
var titleLabel = new Label("Game Title", Content, FontSize.Large);
AddItem(titleLabel);
Buttons
// Stack layout button (content stacked vertically/horizontally)
var button = new StackLayoutButton();
button.AddItem(new Label("Click Me", Content));
button.OnClick += (sender, e) => HandleClick();
AddItem(button);

// Relative layout button (content positioned relatively)
var relButton = new RelativeLayoutButton();
relButton.Size = new Vector2(200, 50);
relButton.AddItem(new Label("Button", Content));
AddItem(relButton);
Sliders
var slider = new Slider()
{
    Min = 0,
    Max = 100,
    SliderPosition = 50,
    HandleSize = new Vector2(64, 64),
    Size = new Vector2(512, 128)
};

slider.OnDrag += (sender, e) =>
{
    var value = slider.SliderPosition;
    // Handle value change
};

AddItem(slider);
Text Input
var textEdit = new TextEdit("Default text", Content);
textEdit.Size = new Vector2(350, 128);
textEdit.Position = Resolution.ScreenArea.Center;
textEdit.HasOutline = true;
AddItem(textEdit);
var dropdown = new Dropdown<string>(this);
dropdown.Size = new Vector2(350, 128);
dropdown.Position = Resolution.ScreenArea.Center;

string[] options = { "Option 1", "Option 2", "Option 3" };
foreach (var option in options)
{
    var item = new DropdownItem<string>(option, dropdown)
    {
        Size = new Vector2(350, 64)
    };
    item.AddItem(new Label(option, Content, FontSize.Small));
    dropdown.AddDropdownItem(item);
}

dropdown.SelectedItem = "Option 1";
AddItem(dropdown);
Checkboxes
var checkbox = new Checkbox();
checkbox.IsChecked = true;
checkbox.OnClick += (sender, e) =>
{
    bool isChecked = checkbox.IsChecked;
};
AddItem(checkbox);

Layouts

Layouts control how widgets are positioned and arranged.

Stack Layout

Arranges items in a vertical or horizontal stack:

var stack = new StackLayout()
{
    Alignment = StackAlignment.Top,
    Horizontal = HorizontalAlignment.Center,
    Position = new Point(Resolution.ScreenArea.Center.X, 100)
};

stack.AddItem(new Label("Item 1", Content));
stack.AddItem(new Label("Item 2", Content));
stack.AddItem(new Label("Item 3", Content));

AddItem(stack);
Scroll Layout

Provides scrollable content area:

var scroll = new ScrollLayout()
{
    Position = Resolution.ScreenArea.Center,
    Size = new Vector2(400, 300)
};

// Add many items that exceed the visible area
for (int i = 0; i < 20; i++)
{
    scroll.AddItem(new Label($"Item {i}", Content));
}

AddItem(scroll);
Relative Layout

Position items relative to each other or the container:

var layout = new RelativeLayout();
layout.Size = new Vector2(500, 400);

var label = new Label("Centered", Content)
{
    Horizontal = HorizontalAlignment.Center,
    Vertical = VerticalAlignment.Center
};

layout.AddItem(label);
AddItem(layout);

Message Boxes

// Confirmation dialog
var confirm = new MessageBoxScreen("Are you sure?");
confirm.OnSelect += (sender, e) =>
{
    // User clicked OK
};
confirm.OnCancel += (sender, e) =>
{
    // User clicked Cancel
};
await ScreenManager.AddScreen(confirm, controllingPlayer);

// Simple alert
var alert = new OkScreen("Operation complete!", Content);
await ScreenManager.AddScreen(alert, controllingPlayer);

Loading Screens

Show a loading screen while content loads asynchronously:

// Load screens with loading indicator
LoadingScreen.Load(ScreenManager, new IScreen[] { new GameplayScreen() });

// With custom message
LoadingScreen.Load(ScreenManager, null, "Loading level...", new GameplayScreen());

Styling

Customize the appearance of your UI through the StyleSheet class:

protected override void InitStyles()
{
    base.InitStyles();

    // Fonts
    StyleSheet.LargeFontResource = @"Fonts\MyLargeFont";
    StyleSheet.MediumFontResource = @"Fonts\MyMediumFont";
    StyleSheet.SmallFontResource = @"Fonts\MySmallFont";

    StyleSheet.LargeFontSize = 72;
    StyleSheet.MediumFontSize = 48;
    StyleSheet.SmallFontSize = 24;

    // Colors
    StyleSheet.NeutralTextColor = Color.White;
    StyleSheet.HighlightedTextColor = Color.Yellow;
    StyleSheet.SelectedTextColor = Color.Gold;
    StyleSheet.NeutralBackgroundColor = new Color(0, 0, 50, 128);
    StyleSheet.HighlightedBackgroundColor = new Color(0, 0, 100, 180);

    // Sounds
    StyleSheet.HighlightedSoundResource = @"Sounds\MenuMove";
    StyleSheet.ClickedSoundResource = @"Sounds\MenuSelect";

    // Images
    StyleSheet.ButtonBackgroundImageResource = @"Images\ButtonBg";
    StyleSheet.CheckedImageResource = @"Images\Checked";
    StyleSheet.UncheckedImageResource = @"Images\Unchecked";

    // Options
    StyleSheet.HasOutline = true;
    StyleSheet.DefaultTransition = TransitionWipeType.SlideLeft;
}

Available Style Properties

Property Description
LargeFontResource Font for titles
MediumFontResource Font for widgets
SmallFontResource Font for message boxes
NeutralTextColor Default text color
HighlightedTextColor Text color when highlighted
SelectedTextColor Text color when selected
NeutralBackgroundColor Default background color
HighlightedBackgroundColor Background when highlighted
HighlightedSoundResource Sound when item highlighted
ClickedSoundResource Sound when item clicked
HasOutline Enable outline rendering
DefaultTransition Default screen transition type

Screen Transitions

MenuBuddy supports various transition effects:

// Configure transition times
screen.Transition.OnTime = 0.5f;  // Time to transition on
screen.Transition.OffTime = 0.5f; // Time to transition off

// Set transition type via StyleSheet
StyleSheet.DefaultTransition = TransitionWipeType.SlideLeft;

Available transition types:

  • TransitionWipeType.SlideLeft
  • TransitionWipeType.SlideRight
  • TransitionWipeType.PopTop
  • TransitionWipeType.PopBottom
  • TransitionWipeType.PopLeft
  • TransitionWipeType.PopRight

Screen Properties

Control how screens interact with each other:

public class MyScreen : WidgetScreen
{
    public MyScreen() : base("My Screen")
    {
        // This screen covers screens below it
        CoverOtherScreens = true;

        // This screen can be covered by screens above it
        CoveredByOtherScreens = true;

        // Modal screens block input to screens below
        Modal = true;
    }
}

Cancel Button

Add a standard cancel/back button to screens:

public override async Task LoadContent()
{
    await base.LoadContent();

    // Adds cancel button in corner (position configurable via StyleSheet)
    AddCancelButton();
}

Error Handling

Display errors gracefully:

try
{
    // Game logic
}
catch (Exception ex)
{
    ScreenManager.ErrorScreen(ex);
}

Platform-Specific Setup

Use conditional compilation for platform-specific behavior:

#if __IOS__ || ANDROID || WINDOWS_UAP
public class Game1 : TouchGame
#else
public class Game1 : ControllerGame
#endif
{
    public Game1()
    {
#if DESKTOP
        IsMouseVisible = true;
#endif
    }
}

Dependencies

MenuBuddy depends on several companion libraries (automatically installed via NuGet):

Sample Project

For a complete working example with all widgets and features demonstrated, see the MenuBuddySample project.

The sample includes examples of:

  • Main menu with navigation
  • Options screens
  • Scroll layouts
  • Dropdowns
  • Sliders
  • Text input
  • Tree layouts
  • Context menus
  • Drag and drop
  • Loading screens
  • Message boxes

API Reference

Game Base Classes

Class Input Type Use Case
ControllerGame Gamepad Console/desktop with controller
MouseGame Mouse Desktop applications
TouchGame Touch Mobile devices

Key Interfaces

Interface Description
IScreen Base screen contract
IScreenManager Screen management operations
IWidget Base widget behavior
ILayout Container layout behavior

Common Methods

// ScreenManager
await ScreenManager.AddScreen(screen, player);
ScreenManager.ClearScreens();
ScreenManager.ErrorScreen(exception);

// Screen
screen.ExitScreen();
screen.AddItem(widget);
screen.RemoveItem(widget);

// Widget
widget.Position = new Point(x, y);
widget.Size = new Vector2(width, height);
widget.Horizontal = HorizontalAlignment.Center;
widget.Vertical = VerticalAlignment.Center;

License

MIT License - see LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests on GitHub.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (11)

Showing the top 5 NuGet packages that depend on MenuBuddy:

Package Downloads
FlashCards

MonoGame library for making little flashcard games

InsertCoinBuddy

A very simple MonoGame library that sits and listens for coin drops (keyboard press, etc.) and tracks number of credits.

HighScoreBuddy

HighScoreBuddy is a MonoGame library for saving and loading of local high score tables.

LifeBarBuddy

MonoGame library for rendering meters like life and energy bars

AudioBuddy

MonoGame library for audio management

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
5.0.1 104 1/27/2026
5.0.0 502 10/10/2025
4.0.5 1,558 10/31/2023
4.0.4 1,259 10/24/2023
4.0.3 1,449 9/8/2023
4.0.1 1,363 9/8/2023
4.0.0 1,375 9/8/2023
2.0.93 2,089 2/15/2022
2.0.92 1,982 9/9/2021
2.0.91 1,914 8/6/2021
2.0.90 1,904 7/23/2021
2.0.89 1,991 7/16/2021
2.0.88 1,976 5/14/2021
2.0.87 1,848 5/13/2021
2.0.86 1,922 5/13/2021
2.0.85 1,989 5/11/2021
2.0.84 2,009 2/17/2021
2.0.83 2,107 1/13/2021
2.0.82 2,118 10/1/2020
2.0.81 2,122 8/25/2020
2.0.80 2,149 8/24/2020
2.0.79 2,216 8/22/2020
2.0.78 2,265 7/29/2020
2.0.77 2,122 7/29/2020
2.0.76 2,249 7/1/2020
2.0.75 2,262 7/1/2020
2.0.74 2,232 6/11/2020
2.0.73 2,128 6/10/2020
2.0.72 2,214 5/18/2020
2.0.71 2,165 5/4/2020
2.0.70 2,124 5/1/2020
2.0.69 2,158 4/29/2020
2.0.68 2,180 4/26/2020
2.0.66 2,169 4/26/2020
2.0.65 2,107 4/25/2020
2.0.64 2,099 4/25/2020
2.0.63 2,144 4/24/2020
2.0.62 2,273 2/17/2020
2.0.61 2,151 2/11/2020
2.0.59 2,204 2/3/2020
2.0.58 2,238 1/28/2020
2.0.57 2,361 1/11/2020
2.0.56 2,181 1/7/2020
2.0.54 2,245 1/6/2020
2.0.53 2,180 1/6/2020
2.0.52 2,197 1/4/2020
2.0.51 2,274 1/2/2020
2.0.50 2,180 1/2/2020
2.0.49 2,355 12/30/2019
2.0.48 2,243 11/11/2019
2.0.47 2,225 10/9/2019
2.0.46 2,286 8/26/2019
2.0.45 2,243 8/25/2019
2.0.44 2,217 8/17/2019
2.0.43 2,213 7/25/2019
2.0.42 2,237 7/25/2019
2.0.41 2,266 7/25/2019
2.0.40 2,272 7/25/2019
2.0.39 2,236 7/23/2019
2.0.38 2,214 7/19/2019
2.0.37 2,195 7/18/2019
2.0.35 2,226 7/15/2019
2.0.34 2,267 7/9/2019
2.0.33 2,280 7/8/2019
2.0.32 2,232 7/8/2019
2.0.31 2,202 7/8/2019
2.0.30 2,209 6/28/2019
2.0.29 2,289 5/31/2019
2.0.28 2,301 5/31/2019
2.0.27 2,270 5/27/2019
2.0.25 2,331 5/19/2019
2.0.24 2,277 3/27/2019
2.0.23 2,278 3/24/2019
2.0.22 2,334 3/24/2019
2.0.21 2,322 3/24/2019
2.0.20 2,324 3/22/2019
2.0.19 2,276 3/13/2019
2.0.18 2,294 3/6/2019
2.0.16 2,307 3/3/2019
2.0.15 2,330 3/3/2019
2.0.14 2,344 3/3/2019
2.0.13 2,319 3/2/2019
2.0.12 2,452 1/9/2019
2.0.11 2,357 1/6/2019
2.0.10 2,365 1/5/2019
2.0.9 2,442 11/20/2018
2.0.8 2,469 11/19/2018
2.0.6 2,462 11/19/2018
2.0.5 2,413 11/18/2018
2.0.3 2,514 10/29/2018
2.0.2 2,453 10/29/2018
2.0.1 2,433 10/29/2018
2.0.0 2,595 10/23/2018
1.0.165 2,466 10/14/2018
1.0.163 2,501 10/11/2018
1.0.162 2,439 10/11/2018
1.0.161 2,538 10/5/2018
1.0.160 2,435 10/5/2018
1.0.159 2,478 10/5/2018
1.0.158 2,461 10/5/2018
1.0.157 2,487 10/4/2018
1.0.156 2,537 10/4/2018
1.0.155 2,519 10/2/2018
1.0.154 2,526 10/1/2018
1.0.153 2,518 10/1/2018
1.0.152 2,485 10/1/2018
1.0.151 2,533 10/1/2018
1.0.150 2,497 10/1/2018
1.0.149 2,569 10/1/2018
1.0.148 2,583 8/23/2018
1.0.147 2,710 8/1/2018
1.0.146 2,750 7/31/2018
1.0.145 2,669 7/31/2018
1.0.144 2,656 7/31/2018
1.0.143 2,958 6/27/2018
1.0.142 3,000 6/27/2018
1.0.141 2,989 6/27/2018
1.0.140 2,673 6/27/2018
1.0.139 2,773 6/22/2018
1.0.137 3,042 6/14/2018
1.0.136 2,957 6/11/2018
1.0.135 3,018 6/11/2018
1.0.134 3,019 5/31/2018
1.0.133 3,055 4/25/2018
1.0.132 3,040 4/18/2018
1.0.131 2,948 4/18/2018
1.0.130 3,012 4/18/2018
1.0.129 2,959 4/17/2018
1.0.128 2,985 4/16/2018
1.0.127 2,988 4/16/2018
1.0.126 2,965 4/16/2018
1.0.125 3,148 4/13/2018
1.0.124 2,996 4/12/2018
1.0.123 3,010 4/5/2018
1.0.122 2,914 4/5/2018
1.0.121 2,953 4/5/2018
1.0.120 2,939 4/5/2018
1.0.119 3,207 3/31/2018
1.0.118 3,202 3/30/2018
1.0.117 2,922 3/29/2018
1.0.116 2,942 3/29/2018
1.0.115 2,763 2/26/2018
1.0.114 2,708 2/25/2018
1.0.113 3,014 2/22/2018
1.0.112 2,682 2/22/2018
1.0.111 2,670 2/22/2018
1.0.110 2,758 2/21/2018
1.0.108 3,058 2/3/2018
1.0.107 2,958 2/3/2018
1.0.106 3,029 2/3/2018
1.0.105 2,702 2/1/2018
1.0.104 3,067 2/1/2018
1.0.103 3,114 1/29/2018
1.0.102 3,010 1/28/2018
1.0.101 3,142 1/24/2018
1.0.100 3,030 1/23/2018
1.0.99 2,973 1/23/2018
1.0.98 3,054 1/22/2018
1.0.97 2,968 1/22/2018
1.0.96 3,005 1/22/2018
1.0.95 3,000 1/22/2018
1.0.94 3,044 1/15/2018
1.0.93 2,976 1/15/2018
1.0.92 2,971 1/15/2018
1.0.91 3,026 1/13/2018
1.0.90 3,085 12/11/2017
1.0.89 3,052 12/11/2017
1.0.88 3,035 12/9/2017
1.0.87 2,734 12/9/2017
1.0.86 2,730 12/9/2017
1.0.85 3,079 12/9/2017
1.0.84 2,787 12/4/2017
1.0.83 2,768 12/4/2017
1.0.82 2,795 11/29/2017
1.0.81 2,744 11/26/2017
1.0.80 2,765 9/27/2017
1.0.79 2,778 9/24/2017
1.0.78 2,689 9/22/2017
1.0.76 2,780 9/13/2017
1.0.75 2,749 9/13/2017
1.0.74 2,776 9/13/2017
1.0.72 2,771 8/6/2017
1.0.71 2,726 8/5/2017
1.0.70 2,815 7/9/2017
1.0.69 2,736 7/8/2017
1.0.68 2,780 7/7/2017
1.0.67 2,774 7/7/2017
1.0.66 2,762 7/6/2017
1.0.65 2,760 7/6/2017
1.0.64 2,799 6/27/2017
1.0.63 2,785 6/20/2017
1.0.62 2,777 5/31/2017
1.0.61 2,816 5/31/2017
1.0.60 2,743 5/31/2017
1.0.59 2,897 5/31/2017
1.0.58 2,786 4/1/2017
1.0.57 2,817 3/28/2017
1.0.55 2,787 3/20/2017
1.0.54 2,879 2/25/2017
1.0.53 2,773 2/14/2017
1.0.52 2,746 2/13/2017
1.0.51 2,846 2/12/2017
1.0.50 2,843 2/11/2017
1.0.49 2,785 2/11/2017
1.0.48 2,820 2/11/2017
1.0.46 2,836 1/18/2017
1.0.45 2,873 12/17/2016
1.0.44 2,838 12/5/2016
1.0.43 2,874 11/24/2016
1.0.42 2,840 11/22/2016
1.0.41 2,818 11/19/2016
1.0.40 2,826 11/19/2016
1.0.39 2,881 11/19/2016
1.0.38 2,859 11/19/2016
1.0.36 2,912 10/5/2016
1.0.35 2,777 10/4/2016
1.0.34 2,777 9/30/2016
1.0.33 2,764 9/11/2016
1.0.32 2,821 8/29/2016
1.0.31 2,810 8/29/2016
1.0.30 2,845 8/24/2016
1.0.29 2,843 8/24/2016
1.0.28 2,861 8/23/2016
1.0.27 2,892 8/21/2016
1.0.26 2,933 8/5/2016
1.0.25 3,040 6/14/2016
1.0.24 2,987 6/14/2016
1.0.23 2,864 6/9/2016
1.0.22 2,794 6/6/2016
1.0.21 2,800 6/6/2016
1.0.20 2,891 6/2/2016
1.0.19 2,875 5/27/2016
1.0.18 2,849 5/24/2016
1.0.17 2,865 5/24/2016
1.0.16 2,875 5/23/2016
1.0.15 2,886 5/23/2016
1.0.14 2,821 5/22/2016
1.0.13 2,830 5/22/2016
1.0.12 2,795 5/19/2016
1.0.11 2,870 5/18/2016
1.0.10 2,910 5/17/2016
1.0.9 2,810 5/15/2016
1.0.8 2,841 5/13/2016
1.0.7 2,922 5/10/2016
1.0.6 2,800 5/9/2016
1.0.5 2,892 5/9/2016
1.0.4 2,841 5/8/2016
1.0.3 2,857 5/8/2016
1.0.1 3,170 4/27/2016
1.0.0 3,260 4/27/2016