MenuBuddy 5.0.1
dotnet add package MenuBuddy --version 5.0.1
NuGet\Install-Package MenuBuddy -Version 5.0.1
<PackageReference Include="MenuBuddy" Version="5.0.1" />
<PackageVersion Include="MenuBuddy" Version="5.0.1" />
<PackageReference Include="MenuBuddy" />
paket add MenuBuddy --version 5.0.1
#r "nuget: MenuBuddy, 5.0.1"
#:package MenuBuddy@5.0.1
#addin nuget:?package=MenuBuddy&version=5.0.1
#tool nuget:?package=MenuBuddy&version=5.0.1
MenuBuddy
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);
Dropdowns
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.SlideLeftTransitionWipeType.SlideRightTransitionWipeType.PopTopTransitionWipeType.PopBottomTransitionWipeType.PopLeftTransitionWipeType.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):
- FontBuddy - Font rendering
- InputHelper - Input state management
- ResolutionBuddy - Resolution management
- PrimitiveBuddy - Primitive rendering
- GameTimer - Timing utilities
- And others...
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 | Versions 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. |
-
net8.0
- FilenameBuddy (>= 5.0.5)
- FontBuddy (>= 5.0.4)
- GameTimer (>= 5.0.8)
- HadoukInput (>= 5.0.0)
- InputHelper (>= 5.0.0)
- MatrixExtensions (>= 5.0.0)
- MouseBuddy (>= 5.0.0)
- PrimitiveBuddy (>= 5.0.0)
- RandomExtensions.dmanning23 (>= 5.0.0)
- ResolutionBuddy (>= 5.0.0)
- StateMachineBuddy (>= 5.0.5)
- TouchScreenBuddy (>= 5.0.0)
- Vector2Extensions (>= 5.0.0)
- XmlBuddy (>= 5.0.0)
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 |