Skip to main content

What Neutron is

Neutron is a personal operating-system kernel running on the Internet Computer: one user-owned canister whose owner chooses its apps and may replace the kernel itself. Canister state is replicated and Neutron does not make a general confidentiality claim.

Nobody installs "Neutron" by itself, any more than anyone installs Linux by itself. What you deploy is a distro — an operating system assembled on the kernel, carrying its own starter apps, assets, and runtime configuration, seeded when the canister is provisioned. SushiOS is the first. A different distro can change any of that, and because the kernel is itself just a package, it can replace the kernel too.

A running system is one canister. That canister runs the kernel, serves the browser UI, stores every installed application's frontend assets and backend state, and rewrites its own WebAssembly module whenever you install something. The product model assigns it to one human owner; the implementation represents that owner's access as a flat set of full-trust authorized principals.

The system is deliberately open all the way down. The kernel is packaged and installed by the same machinery as any other app, and a package whose id is kernel is a kernel replacement. Forking the kernel, changing its rules and its UI, and installing that fork into your own canister is an intended option — not an exception someone forgot to close. That is what makes more than one distro possible.

We are developing the chicken and the egg at the same time.

The one idea that explains the rest

Most of Neutron's design follows from a single decision:

Applications are not separate canisters. They are compiled into yours.

An app package ships a Motoko backend module, browser assets, and a manifest. Installing it collects every backend module already living in your canister, adds the new one, assembles them into one Motoko actor, compiles that actor to WebAssembly inside your browser tab, and asks the canister to upgrade itself with the result.

That gives you a genuinely integrated computer — apps share one identity, one Candid interface, one canister HTTP service with separate static/package and app-published certified stores, one upgrade path, and can call each other's declared backend functions directly with no network hop. It also means there is no canister boundary between apps, so the security boundary has to be built somewhere else: in the code generator, in static analysis of app source, in a closed capability system, and in the browser's frame isolation. Those four mechanisms are what the Security chapter is about.

What is in the box

LayerWhat it does
Kernel backendOwns authorization, certified asset storage, HTTP serving, capability brokers, the install journal, and canister self-upgrade.
Kernel frontendA React tiling workspace shell: launcher, workspaces, app tray, Settings, install dialogs, and every consent prompt.
App packages.neutron archives containing a manifest, hashed Motoko modules, and optional web assets.
CompilerAssembles and compiles the combined actor — in the browser, in a CLI, or inside the provisioner.
Capability brokersKernel-owned, per-installation gatekeepers for outbound calls, randomness, HTTPS outcalls, threshold signing, stable storage, vetKeys, and certified assets.
ProvisionerCreates and reinstalls whole canisters, locally on PocketIC or in production on the IC.

Who this documentation is for

App developers want Building an app and the Packaging chapter — how to shape a Motoko backend, what the manifest declares, and how a package is built and installed.

Reviewers and security people want Security. It is written to separate what the implementation actually enforces from what is merely intended, and it names the boundaries Neutron explicitly does not claim.

Operators want Operating a Neutron — how canisters are created, how a local fleet is stood up, and how certified repositories and update sources work.

Everyone should start with Concepts, which is short and explains why the rest of the system is shaped the way it is.

A note on maturity

Neutron is preproduction. Several subsystems documented here are marked development and carry explicit release gates. In particular, the Certified Assets API has a source-owned local qualification runner, but only a pass receipt bound to the current candidate is qualification evidence, and even that bounded run does not establish behaviour at the production entry ceiling. The hosted dispenser also still needs a paid mainnet deposit-to-activation qualification. Those caveats are stated inline where they apply rather than collected in a disclaimer, because they change what you are allowed to promise your users.

Where this documentation describes a limitation, an open question, or an unfinished path, that is deliberate. See Open questions.

Getting a system to work on

For the hackathon you do not need to deploy anything on the Internet Computer. Clone the repository and run a whole Neutron locally: the provisioner fetches and verifies its own pinned PocketIC server, creates the canister on it, compiles the kernel and every configured app into a single actor, and installs it. No ICP, no cycles, no mainnet canister.

git clone https://github.com/infu/neutron
cd neutron
npm install

Keep the local server running in one terminal:

npm run provision -- local.ndeploy.json serve

and from a second terminal in the same environment, install the configured fleet and print where it landed:

npm run provision -- local.ndeploy.json reinstall
npm run provision -- local.ndeploy.json status

Open the node URL printed by status — with the default gateway it has the form http://<canister-id>.localhost:8000/ — and you have a system to build against, including the same launcher install flow an owner sees. What you get is a real Neutron: the same kernel, the same browser compile, the same capability checks. What you do not get is persistence across runs — every reinstall is a destructive whole-canister reinstall — or a URL anyone else can open.

Getting started has the prerequisites (Bun, Mops on PATH) and the app packaging loop; Provisioning explains configs, sessions, and what each command is allowed to do.

Deploying on the Internet Computer is the other path — for when you want a canister that is actually yours: persistent, publicly reachable, paying its own cycles, upgrading itself. The dispenser creates one for 2 ICP, which becomes the cycles it runs on; the button on the home page says what you get.