Edge & mobile. 4-bit quantized. Runs on a laptop CPU at >30 tok/s.
Nibiru is a lightweight framework built on MMVC — Model, Module, View, Controller. Compose AI modules the way you compose code. Talk to it, ship with it, run it locally.
A working playground running the nibiru-base-7B model. No signup. Same interface you'll embed in your app.

Good question. In MMVC the two are intentionally distinct:
A Module is a unit of intelligence — a model, a tool, a retriever, a planner. It has typed inputs and outputs and is composable. Think of it like a pure function over the model layer.
A Controller is the orchestration layer. It decides which modules run, in what order, and how their outputs flow into the View. Controllers hold no model state; they hold policy.
If you've used MVC, the mental model maps cleanly — we just split “Model” into Model (weights) and Module (capability).

Sure — here's ReActPlanner from the standard library. It's about 40 lines, ships with the framework, and works with any chat module:
Want me to wire it to the retriever above?
Classic MVC separated data, presentation and logic. Modern AI apps need one more boundary — the capability layer. So we added it.
Foundation models, embeddings, fine-tunes. The substrate.
Retrievers, planners, tools, agents. Typed and composable.
Chat, voice, IDE, API. How users talk to the system.
Routing, policy, lifecycle. The conductor, not the orchestra.
→ Roadmap: MAMVC (Model · AI · Module · View · Controller) lands in 1.0.
Edit the code, hit Execute, watch the controller dispatch modules, tools and the model. The same loop runs locally when you ship.
Modules compose. Controllers orchestrate. Models run wherever you put them — cloud, edge, laptop.
1 2 3 4 5 6 7 8 9 10 11 12 13
<?php use Nibiru\{Model, Module, Controller, View}; use Nibiru\Std\{Retriever, ReActPlanner, ChatView}; $model = Model::load('nibiru-base-7B'); $retriever = new Retriever(index: './docs', k: 5); $planner = new ReActPlanner(model: $model, tools: [$retriever]); $agent = new Controller($planner, view: new ChatView()); // Stream a turn foreach ($agent->stream('How does MMVC differ from MVC?') as $token) { echo $token; }
Open weights. Quantized variants for every footprint. Verified checksums and signed manifests.
Edge & mobile. 4-bit quantized. Runs on a laptop CPU at >30 tok/s.
The flagship. Strong reasoning & tool use. Fits a single 24 GB GPU.
Production-grade. Multi-GPU and tensor-parallel out of the box.