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 98 1/27/2026
5.0.0 487 10/10/2025
4.0.5 1,544 10/31/2023
4.0.4 1,246 10/24/2023
4.0.3 1,436 9/8/2023
4.0.1 1,350 9/8/2023
4.0.0 1,360 9/8/2023
2.0.93 2,074 2/15/2022
2.0.92 1,966 9/9/2021
2.0.91 1,901 8/6/2021
2.0.90 1,891 7/23/2021
2.0.89 1,978 7/16/2021
2.0.88 1,963 5/14/2021
2.0.87 1,835 5/13/2021
2.0.86 1,909 5/13/2021
2.0.85 1,976 5/11/2021
2.0.84 1,996 2/17/2021
2.0.83 2,092 1/13/2021
2.0.82 2,105 10/1/2020
2.0.81 2,108 8/25/2020
2.0.80 2,134 8/24/2020
2.0.79 2,201 8/22/2020
2.0.78 2,251 7/29/2020
2.0.77 2,108 7/29/2020
2.0.76 2,235 7/1/2020
2.0.75 2,247 7/1/2020
2.0.74 2,217 6/11/2020
2.0.73 2,114 6/10/2020
2.0.72 2,199 5/18/2020
2.0.71 2,151 5/4/2020
2.0.70 2,110 5/1/2020
2.0.69 2,144 4/29/2020
2.0.68 2,166 4/26/2020
2.0.66 2,154 4/26/2020
2.0.65 2,093 4/25/2020
2.0.64 2,085 4/25/2020
2.0.63 2,128 4/24/2020
2.0.62 2,257 2/17/2020
2.0.61 2,137 2/11/2020
2.0.59 2,189 2/3/2020
2.0.58 2,224 1/28/2020
2.0.57 2,347 1/11/2020
2.0.56 2,167 1/7/2020
2.0.54 2,231 1/6/2020
2.0.53 2,166 1/6/2020
2.0.52 2,182 1/4/2020
2.0.51 2,257 1/2/2020
2.0.50 2,165 1/2/2020
2.0.49 2,341 12/30/2019
2.0.48 2,226 11/11/2019
2.0.47 2,210 10/9/2019
2.0.46 2,271 8/26/2019
2.0.45 2,228 8/25/2019
2.0.44 2,203 8/17/2019
2.0.43 2,199 7/25/2019
2.0.42 2,223 7/25/2019
2.0.41 2,251 7/25/2019
2.0.40 2,257 7/25/2019
2.0.39 2,221 7/23/2019
2.0.38 2,200 7/19/2019
2.0.37 2,179 7/18/2019
2.0.35 2,210 7/15/2019
2.0.34 2,253 7/9/2019
2.0.33 2,265 7/8/2019
2.0.32 2,218 7/8/2019
2.0.31 2,188 7/8/2019
2.0.30 2,195 6/28/2019
2.0.29 2,274 5/31/2019
2.0.28 2,286 5/31/2019
2.0.27 2,256 5/27/2019
2.0.25 2,317 5/19/2019
2.0.24 2,262 3/27/2019
2.0.23 2,263 3/24/2019
2.0.22 2,319 3/24/2019
2.0.21 2,308 3/24/2019
2.0.20 2,309 3/22/2019
2.0.19 2,261 3/13/2019
2.0.18 2,280 3/6/2019
2.0.16 2,291 3/3/2019
2.0.15 2,315 3/3/2019
2.0.14 2,329 3/3/2019
2.0.13 2,305 3/2/2019
2.0.12 2,439 1/9/2019
2.0.11 2,344 1/6/2019
2.0.10 2,352 1/5/2019
2.0.9 2,428 11/20/2018
2.0.8 2,455 11/19/2018
2.0.6 2,448 11/19/2018
2.0.5 2,400 11/18/2018
2.0.3 2,499 10/29/2018
2.0.2 2,439 10/29/2018
2.0.1 2,419 10/29/2018
2.0.0 2,582 10/23/2018
1.0.165 2,452 10/14/2018
1.0.163 2,487 10/11/2018
1.0.162 2,426 10/11/2018
1.0.161 2,523 10/5/2018
1.0.160 2,422 10/5/2018
1.0.159 2,465 10/5/2018
1.0.158 2,448 10/5/2018
1.0.157 2,473 10/4/2018
1.0.156 2,524 10/4/2018
1.0.155 2,506 10/2/2018
1.0.154 2,513 10/1/2018
1.0.153 2,505 10/1/2018
1.0.152 2,470 10/1/2018
1.0.151 2,520 10/1/2018
1.0.150 2,482 10/1/2018
1.0.149 2,556 10/1/2018
1.0.148 2,570 8/23/2018
1.0.147 2,697 8/1/2018
1.0.146 2,735 7/31/2018
1.0.145 2,655 7/31/2018
1.0.144 2,643 7/31/2018
1.0.143 2,945 6/27/2018
1.0.142 2,986 6/27/2018
1.0.141 2,974 6/27/2018
1.0.140 2,660 6/27/2018
1.0.139 2,757 6/22/2018
1.0.137 3,028 6/14/2018
1.0.136 2,942 6/11/2018
1.0.135 3,005 6/11/2018
1.0.134 3,005 5/31/2018
1.0.133 3,042 4/25/2018
1.0.132 3,027 4/18/2018
1.0.131 2,934 4/18/2018
1.0.130 2,998 4/18/2018
1.0.129 2,945 4/17/2018
1.0.128 2,971 4/16/2018
1.0.127 2,975 4/16/2018
1.0.126 2,949 4/16/2018
1.0.125 3,133 4/13/2018
1.0.124 2,983 4/12/2018
1.0.123 2,996 4/5/2018
1.0.122 2,901 4/5/2018
1.0.121 2,940 4/5/2018
1.0.120 2,926 4/5/2018
1.0.119 3,193 3/31/2018
1.0.118 3,189 3/30/2018
1.0.117 2,909 3/29/2018
1.0.116 2,927 3/29/2018
1.0.115 2,749 2/26/2018
1.0.114 2,695 2/25/2018
1.0.113 3,001 2/22/2018
1.0.112 2,669 2/22/2018
1.0.111 2,657 2/22/2018
1.0.110 2,744 2/21/2018
1.0.108 3,045 2/3/2018
1.0.107 2,945 2/3/2018
1.0.106 3,016 2/3/2018
1.0.105 2,689 2/1/2018
1.0.104 3,053 2/1/2018
1.0.103 3,099 1/29/2018
1.0.102 2,996 1/28/2018
1.0.101 3,128 1/24/2018
1.0.100 3,017 1/23/2018
1.0.99 2,960 1/23/2018
1.0.98 3,041 1/22/2018
1.0.97 2,955 1/22/2018
1.0.96 2,991 1/22/2018
1.0.95 2,987 1/22/2018
1.0.94 3,031 1/15/2018
1.0.93 2,963 1/15/2018
1.0.92 2,958 1/15/2018
1.0.91 3,013 1/13/2018
1.0.90 3,071 12/11/2017
1.0.89 3,038 12/11/2017
1.0.88 3,021 12/9/2017
1.0.87 2,721 12/9/2017
1.0.86 2,716 12/9/2017
1.0.85 3,066 12/9/2017
1.0.84 2,773 12/4/2017
1.0.83 2,751 12/4/2017
1.0.82 2,781 11/29/2017
1.0.81 2,730 11/26/2017
1.0.80 2,752 9/27/2017
1.0.79 2,765 9/24/2017
1.0.78 2,675 9/22/2017
1.0.76 2,767 9/13/2017
1.0.75 2,735 9/13/2017
1.0.74 2,762 9/13/2017
1.0.72 2,754 8/6/2017
1.0.71 2,713 8/5/2017
1.0.70 2,802 7/9/2017
1.0.69 2,723 7/8/2017
1.0.68 2,767 7/7/2017
1.0.67 2,760 7/7/2017
1.0.66 2,749 7/6/2017
1.0.65 2,746 7/6/2017
1.0.64 2,785 6/27/2017
1.0.63 2,771 6/20/2017
1.0.62 2,764 5/31/2017
1.0.61 2,801 5/31/2017
1.0.60 2,730 5/31/2017
1.0.59 2,884 5/31/2017
1.0.58 2,772 4/1/2017
1.0.57 2,802 3/28/2017
1.0.55 2,773 3/20/2017
1.0.54 2,866 2/25/2017
1.0.53 2,760 2/14/2017
1.0.52 2,733 2/13/2017
1.0.51 2,832 2/12/2017
1.0.50 2,829 2/11/2017
1.0.49 2,772 2/11/2017
1.0.48 2,804 2/11/2017
1.0.46 2,823 1/18/2017
1.0.45 2,860 12/17/2016
1.0.44 2,824 12/5/2016
1.0.43 2,861 11/24/2016
1.0.42 2,826 11/22/2016
1.0.41 2,805 11/19/2016
1.0.40 2,813 11/19/2016
1.0.39 2,867 11/19/2016
1.0.38 2,846 11/19/2016
1.0.36 2,899 10/5/2016
1.0.35 2,764 10/4/2016
1.0.34 2,762 9/30/2016
1.0.33 2,751 9/11/2016
1.0.32 2,808 8/29/2016
1.0.31 2,794 8/29/2016
1.0.30 2,832 8/24/2016
1.0.29 2,830 8/24/2016
1.0.28 2,848 8/23/2016
1.0.27 2,877 8/21/2016
1.0.26 2,919 8/5/2016
1.0.25 3,027 6/14/2016
1.0.24 2,974 6/14/2016
1.0.23 2,851 6/9/2016
1.0.22 2,781 6/6/2016
1.0.21 2,787 6/6/2016
1.0.20 2,875 6/2/2016
1.0.19 2,860 5/27/2016
1.0.18 2,834 5/24/2016
1.0.17 2,852 5/24/2016
1.0.16 2,862 5/23/2016
1.0.15 2,873 5/23/2016
1.0.14 2,808 5/22/2016
1.0.13 2,815 5/22/2016
1.0.12 2,782 5/19/2016
1.0.11 2,857 5/18/2016
1.0.10 2,894 5/17/2016
1.0.9 2,796 5/15/2016
1.0.8 2,828 5/13/2016
1.0.7 2,909 5/10/2016
1.0.6 2,785 5/9/2016
1.0.5 2,879 5/9/2016
1.0.4 2,827 5/8/2016
1.0.3 2,843 5/8/2016
1.0.1 3,156 4/27/2016
1.0.0 3,246 4/27/2016