Software with no server.No database.No cloud.

Everyone builds a cloud and puts an app on top of it.

We build the software differently — until some of the infrastructure has no job left.

Puppeteer has been in continuous production since 2018.

This is not serverless

The interesting part isn't what we removed. It's why it wasn't needed.

Moving software out of a datacenter is not the interesting part. The interesting part is why it can leave in the first place.

Most software starts with records. A customer is a row. An invoice is a row. An account is a row. Programs keep those rows correct, databases store them, servers protect them, APIs expose them, and infrastructure keeps the whole thing alive.

And nobody was asked

The same total — ₡3,222,336 across 87 purchases — came back on a desktop, on a phone and in a browser. Each one read its own journal and asked nothing of anyone: no server was holding the answer, and none was consulted to produce it.

Assumed first
  1. Records
  2. Database
  3. Server
  4. API
  5. Cloud
Where we startWhat it did.

We start somewhere else.

We write programs where the thing is what it did.

That model is Puppeteer.

Meet Puppeteer

Software where the subject carries its own history.

Puppeteer is the substrate underneath the way nCubo builds software.

Instead of storing a subject as pieces of state that have to be reconstructed later, Puppeteer preserves what that subject did. The operations belong to the subject. They travel with it.

SUBJECTDURABLE HISTORYAPPEARS INclientmachinepeertopology
Replay them anywhere and the same history produces the same answer.

That one change has consequences. Big ones.

What changes

When the model changes.

A normal system of this size comes with infrastructure whose job is to keep centralised state available, correct and safe. Change the model underneath and some of those jobs stop existing.

No longer required

  • No central database
  • No nCubo server in the middle
  • No always-online dependency
  • No infrastructure that grows simply because another person joined

What becomes possible

  • History can move with the subject
  • Institutions can hand history over directly
  • The device can do the work
  • Scale no longer has to follow user count

We didn't replace these layers with cheaper versions.We changed the model underneath them.

This does not mean the rest of the world has no servers: an institution still operates its own systems, and that is where its records come from. What is not there is a system of ours in the middle. Nothing of yours reaches an nCubo database, because there isn't one waiting for it.

Don't take our word for it

It is not a claim. Run it.

Every important claim on this page has something behind it that can be opened, executed or inspected. We built the uncomfortable cases on purpose.

  • Runnable proof

    Without a server, how do devices agree?

    The Village Hall

    Three phones. A QR code printed on paper. A full evening of bingo. One phone dies and the hall carries on. No server, no database, 432 tests green.

    Run the demo
  • Architectural comparison

    Is this actually different from the conventional way?

    The Same Invoice, Twice

    The same invoice built both ways. Side by side. Executable.

    Compare them
  • Causality test

    What happens when execution stops halfway?

    Unacknowledged

    Interrupt the work. Then see what the subject knows.

    Run it

Executable evidence. Published arguments. One model challenged from different directions.

Measured, not projected

Numbers we can reproduce.

Every number below came from one of the runs above. Real devices, dates included.

Watch them happen

One domain, staged across a console, browsers, an automated player and an emulated microcontroller. Twelve host projects, one directory of rules, and the diff that proves it did not change.

The remote database is stopped mid-run, the writes continue, and it is brought back. What waited during the outage was not a list of messages to be sent — which is why the replica rebuilt afterwards reaches the same state and not a similar one.

Full measurements

WhatResultMeasured on
First answer439 ms vs 4,153 msA54 · Sep 16–17
Another institution100–250 KB vs 12 MBXiaomi + A54 · Sep 11–16
Memory per institution9 MB vs 42 MBXiaomi + A54 · Sep 11–16
Five institutions151–164 MB vs 238 MBA54 · Sep 16–17
Same history, three machines₡3,222,336 across 87 purchases, on all threeDesktop + phone + browser · Sep 4 & 16
Recorded event33–97 bytes vs 118–910 bytesPaper 5
Offline AI answerAnswered in airplane modeiPhone 17 Pro · Sep 17
Offline writes, then reconnect10,000 queued, drained at 296/s, 20,999 on both sidesMySQL + SQL Server · Jul 13
From research to real software

Puppeteer isn't a prototype.

The same substrate is already inside a real product.

Mymi

Your information.Your device.Your choice.

That is data sovereignty as an architecture rather than a policy: there is no copy of your records on our side to govern, to lose, or to be asked for.

  • Your records stay with you.
  • Institutions hand them over directly.
  • Your AI asks only what you allow.
See Mymi
Mymi's home screen: five connected institutions — a supermarket, a petrol station, a clinical laboratory, a city hall and a dealership — each with its own brand and its permissions.
Same substrate

Same substrate, different problems

Mymi can carry years of a person's records. The Village Hall carries ninety minutes of a bingo game.

Neither needs a server. That is not because they are similar products.

Different problems. Same Puppeteer.

Why there is no database

It is not a storage decision.

The substrate declares two dependencies: a build-time analyzer and a hashing library.

Every storage type ends in one of two words:FileSystemInMemory

There is no seam where a database would go. The whole engine is about a megabyte.

For the technically curious

A Puppet is an Actor with CQRS + Event Sourcing.

But its journal records something different.

In conventional Event Sourcing, the journal preserves events describing what happened to the subject. A Puppet's journal preserves the acts performed by the subject itself.

  • Events about the Actor
  • Changes to its state
  • Acts performed by the Actor

The journal is not a history of state.It is a history of acts.

The difference isn't just architectural. It's ontological.

A Puppet is not a record whose state is the thing and whose history merely explains how it got there. Its acts are part of what it is. So the same Puppet, given the same history, returns the same answer on a laptop, on a phone and in a browser — not three answers that happen to agree.

The same subject.The same history.The same answer.

Published, not asserted

We expect this to be checked.

A software company can write a page saying its architecture works. The argument behind Puppeteer has been published instead, by the architect who built it — with the conditions that would prove it wrong.

Published
10 papers
Falsifiable
Conditions that could prove the model wrong
Deposited with DOIsRead the papers
This is what we mean by building differently

We don't just use architectures. We research new ones.

Puppeteer is one answer. Mymi is one product built from it. The demos try to break it. The papers make the argument inspectable.

What the demos ask

Questions about whether the architecture actually works:

  • Can this work in practice?
  • Can it survive failure?
  • Can it cross machines, clients and topologies?
Explore demos

What the papers ask

Questions about the model itself:

  • What does this imply?
  • Where does the model fail?
  • What assumptions does it challenge?
  • What could disprove it?
Read the research