Engineering since 2008

Software that outlives the app it was written for.

nCubo builds distributed systems across mobile clients, services, clusters, data centers and independent participants — and Puppeteer, a substrate of its own designed to keep them coherent when the deployment, the client or the topology changes.

Our model

Projects end.
Domains continue.

Every implementation should solve something useful now and strengthen the domain asset available to the next one.

Published evidence · Paper 09
1
domain
5
measured stagings
6
clients
0
domain edits
IMPLEMENTATION 01Domain knowledgeIMPLEMENTATION 02Reusable architectureIMPLEMENTATION 03Validated capabilityDOMAIN ASSETKnowledgeArchitectureReusable systemsValidationNEXT IMPLEMENTATIONStarts enriched,not from zeroRETAINED CAPABILITYRETURNS ITS OWN01Domainknowledge02Reusablearchitecture03ValidatedcapabilityDOMAIN ASSETKnowledgeArchitectureReusable systemsValidationNEXT IMPLEMENTATIONStarts enriched,not from zeroRETAINED CAPABILITYRETURNS ITS OWN
Distributed engineering

The client is not just a window into the system. It can be part of the system.

Most software keeps computation and state in a data center and reduces powerful devices to interfaces. We design systems that can use the capacity those devices already have.

  • More participants can mean more capacity — not just more load.
  • Capability can live where it makes sense.

The system can live where its participants live.

See how far that can go

THE CENTERKubernetes · clusters · multi-data-centerEverything happens somewhere else.peer-to-peerCASHIERFlutterBOOKKEEPERC# · .NETPARTICIPANTPARTICIPANTLinuxWAREHOUSE KEEPERLOCAL CAPABILITYTHE CENTERKubernetes · clustersmulti-data-centerEverything happens somewhere else.peer-to-peerCASHIERFlutterBOOKKEEPERC# · .NETPARTICIPANTPARTICIPANTLinuxWAREHOUSE KEEPERLOCAL CAPABILITY
Under the story

Different runtimes. One coherent architecture.

The same system can span devices, shared services, data centers and direct peer-to-peer coordination.

DISTRIBUTED TOPOLOGYDATA CENTER ADATA CENTER Bserver-to-serverpeer-to-peerSHARED INFRASTRUCTURESERVICE COREShared coordination where requiredC# · .NET · Linux · MicroservicesORCHESTRATIONKubernetes · clustersMESSAGING & DATAKafka · distributed dataPARTICIPANT SURFACESMOBILEFlutterINSTALLEDPARTICIPANT-OWNED STATEBROWSERPARTICIPANTPARTICIPANTLOCAL BEHAVIOR + STATEDISTRIBUTED TOPOLOGYDATA CENTER ADATA CENTER Bserver-to-serverpeer-to-peerSHARED INFRASTRUCTURESERVICE COREShared coordination where requiredC# · .NET · Linux · MicroservicesORCHESTRATIONKubernetes · clustersMESSAGING & DATAKafka · distributed dataPARTICIPANT SURFACESMOBILEFlutterINSTALLEDPARTICIPANT-OWNED STATEBROWSERPARTICIPANTPARTICIPANTLOCAL BEHAVIOR
Distributed systems

Replication · Replay · Multi-data-center · Kubernetes · Zero-downtime deployment · Red/Black deployment

Centralized when appropriate. Peer-to-peer when required. Coherent in either topology.

Once a system can live in many places, a harder question appears.

Who owns identity, state and authority when no single place owns the whole system?

What makes our systems different

We build distributed systems from software subjects with identity, authority and histories of their own.

Puppeteer is the substrate built to let those subjects execute concurrently across machines and changing topologies.

HOST AHOST BTWO PEERSDURABLE HISTORYPUPPET

A substrate developed at nCubo · in continuous production since 2018

Research

Architecture should survive scrutiny. So we make ours inspectable.

10papers

Identity, authority and causality — each paper building on the ones before it.

The Puppeteer Papers Series

Demos

The argument is executable.

Each demo takes one architectural claim, builds it end to end and says what it does not establish.

Featured demo

The same invoice, built two ways.

A conventional .NET invoice flow, and the same domain enacted as a Puppeteer Puppet. Same products, same amounts, same invoice — different architectural center.

DecisionApplication owns the flowConventional implementationDomain owns the actPuppet implementation
HTTPDomainBoundary
PersistenceDomainBoundary
PresentationDomainBoundary
Whether the act is validHostDomain
  • 225Files in the domain
  • 50I/O calls inside the flow
  • 0Output formats in the domainConventional: web framework dependency

Counted in the repository. An existence proof that the separation is buildable — not a performance or cost evaluation.

More demos
Problems we work on

Problems that change the architecture.

Four kinds of problems we've built for — each with evidence you can inspect.

  • Scale & concurrency

    When participation changes the problem.

    Systems that must keep working as participation grows.

    10,000 writes with the remote database stopped. None lost.

    See the measurements
  • Distributed systems

    When client-server stops fitting.

    Shared state across participants without requiring one central authority.

    A bingo night running on phones in one hall — no server, no database.

    See The Village Hall
  • Edge & local-first

    When the device is part of the system.

    Software that holds state and continues to work when the network does not.

    Four ways to run another organization's code on a phone. 8/8 escape attempts closed.

    See the measurements
  • Architecture & reliability

    When the architecture itself is the question.

    Build and measure competing approaches before committing to one.

    We built the orthodox version too. It refuted 2 of the 4 assumptions it was meant to confirm.

    See the comparison

Building something that does not fit the usual architecture?