Mibo 1.4.0
See the version list below for details.
dotnet add package Mibo --version 1.4.0
NuGet\Install-Package Mibo -Version 1.4.0
<PackageReference Include="Mibo" Version="1.4.0" />
<PackageVersion Include="Mibo" Version="1.4.0" />
<PackageReference Include="Mibo" />
paket add Mibo --version 1.4.0
#r "nuget: Mibo, 1.4.0"
#:package Mibo@1.4.0
#addin nuget:?package=Mibo&version=1.4.0
#tool nuget:?package=Mibo&version=1.4.0
Mibo
Mibo is a lightweight, Elmish-inspired micro-framework for F# that helps you build games on top of MonoGame (the underlying game framework). It’s designed to stay fun for small games while still providing an upgrade path for bigger projects (ARPG/RTS-style complexity) without forcing you to rewrite your engine.
Key ideas:
- Keep
updatepure (MVU) - Submit render commands to a
RenderBufferinview - Use explicit boundaries (tick ownership, phases, snapshot barriers) when scaling up
If you prefer learning by example, check out the working sample projects:
samples/2DSample(2D sample)samples/3DSample(3D sample)
What’s in the box?
- Elmish runtime for MonoGame games (MVU loop)
- optional fixed timestep support
- optional frame-bounded dispatch for stricter frame boundaries
- Input (raw input + semantic mapping / rebinding-friendly)
- Assets (loading + caching helpers)
- Rendering
- 2D SpriteBatch renderer (layers + multi-camera amenities)
- 3D renderer with opaque/transparent passes + multi-camera amenities
- Sprite3D “90% path” for unlit textured quads and billboards
- escape hatches (
DrawCustom) when you need custom GPU work
- Camera helpers + culling utilities
Documentation
The docs live in docs/ and are intended to be the authoritative reference.
Start here:
- Architecture
- Elmish runtime:
docs/elmish.md - System pipeline (phases + snapshot):
docs/system.md - Scaling ladder (Simple → Complex):
docs/scaling.md
- Elmish runtime:
- Core services
- Input:
docs/input.md - Assets:
docs/assets.md
- Input:
- Rendering
- Overview / composition:
docs/rendering.md - 2D:
docs/rendering2d.md - 3D:
docs/rendering3d.md - Camera:
docs/camera.md
- Overview / composition:
Getting started
Prerequisites:
- .NET SDK 10
- A working OpenGL setup (MonoGame DesktopGL)
From the repo root:
dotnet --version
dotnet tool restore
dotnet restore
dotnet build
dotnet test
Templates
Mibo provides project templates to get you started quickly.
Install the templates:
dotnet new install Mibo.Templates
Create a new project:
# 2D Game
dotnet new mibo2d -n My2DGame
# 3D Game
dotnet new mibo3d -n My3DGame
# Multi-Platform (Desktop, Android, iOS)
dotnet new mibo-multi -n MyMultiPlatformGame
Run the samples
2D sample:
dotnet run --project samples/2DSample/MiboSample.fsproj
3D sample:
dotnet run --project samples/3DSample/3DSample.fsproj
Content pipeline tooling
This repo uses local dotnet tools (see .config/dotnet-tools.json) for MonoGame content:
mgcb/mgcb-editor-*
If you need to edit a content project:
dotnet tool restore
# Run the editor appropriate for your OS
dotnet mgcb-editor-linux
# or dotnet mgcb-editor-windows / dotnet mgcb-editor-mac
Build the documentation site (optional)
The repo uses fsdocs-tool.
dotnet tool restore
dotnet fsdocs build
To watch locally while editing:
dotnet tool restore
dotnet fsdocs watch
Repo structure
src/Mibo— the core framework librarysrc/Mibo.Tests— unit testssrc/Templates— project templates sourcesamples/2DSample— 2D sample gamesamples/3DSample— 3D sample gamedocs/— documentation source
Feedback welcome
If you’re interested in using F# beyond simple 2D games—while still staying in the MonoGame ecosystem—issues and PRs are very welcome.
| 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
- FSharp.Core (>= 10.0.102)
- FSharp.UMX (>= 1.1.0)
- JDeck (>= 1.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
### Added
- Rendering: **Property-Driven Camera API**. Refactored `Camera` struct to preserve projection and view parameters, enabling a self-documenting DSL for camera configuration.
- Rendering: **Composable Camera DSL**. Introduced pipeline-friendly helpers including `withFov`, `withAspect`, `withRange`, `at`, `lookingAt`, `lookAt`, `withDistance`, `withAngles`, and `orbit` for ergonomic camera manipulation.
- Rendering: **Aggregate Dynamic Lighting**. Introduced `AddLight` command and `withDefaultLighting` configuration to support modular, additive lighting contributions. Modules can now independently contribute lights (point, spot, directional) to the scene aggregate without destructive overrides of global lighting state.
### Changed
- Rendering: **Performance Optimization**. Consolidated `PreRenderCallback` and lighting updates into `Drawing.flush` to eliminate redundant array allocations every frame.
- Templates: **Modern 3D Template**. Migrated the `Mibo3D` project template to utilize the high-performance `Mibo.Rendering.Graphics3D` engine and the new composable Camera API.
### Fixed
- Rendering: Removed CPU-side vertex data scanning for mesh bounding box computation. This prevents crashes on Android and other platforms where GPU vertex buffers are often allocated as write-only. Bounding boxes are now derived safely from bounding spheres.
- Rendering: Eliminated redundant null checks and boxing in `configureBasicEffectLighting` for better error visibility and performance.