Features Architecture Modules Quick Start GitHub ↗ Get Started →
Open Source · v0.1.0

The OS for
Your Business

U2OS is a modular, API-first foundation for building business applications. Ship faster with a battle-tested kernel, event bus, plug-and-play modules, and rock-solid multi-tenant support.

3+ DB Backends
100% API-First
∞ Extensible
✓
Tenant resolved acme.yourdomain.com
u2os — bash
# Clone & spin up in seconds
$ git clone https://github.com/chrisrobison/u2os
$ cd u2os && npm install
✔ installed 47 packages
 
$ DB_CLIENT=sqlite npm run db:init
✔ Core schema initialized
✔ Migrations applied (salon-module)
 
$ npm start
kernel → loading 2 modules…
module → salon-module v0.1.0 ready
server → ▶ listening on :3010
 
$
⚡
Event fired appointment.booked

Built on proven open-source technology

Node.js
Express
MySQL
PostgreSQL
SQLite
Docker
React UI
JavaScript

Why U2OS

Everything you need to ship
business software faster

Stop rebuilding the same plumbing. U2OS gives you a hardened foundation so you can focus on your unique business logic.

⚡

Event Bus

Decouple your modules with a built-in publish/subscribe event bus. Fire appointment.booked and let any subscriber react — no tight coupling required.

🔒

Auth & RBAC

JWT-based authentication with a four-tier role model out of the box: owner, admin, staff, viewer. Every endpoint is locked down from day one.

🗄️

Database-Agnostic

Switch between SQLite, MySQL, and PostgreSQL with a single env variable. Same API, same code — whether you're prototyping locally or running in production.

🏢

Multi-Tenant Native

Each tenant gets its own isolated database. Host-based tenant resolution happens on every request — no shared data, no cross-tenant leaks, ever.

🔍

Universal CRUD API

Every business entity — customers, appointments, payments — gets create, read, update, delete, and search APIs automatically. Define a schema, get an API.

🆔

Dual ID System

Every record has a UUID for internal use and a human-readable public ID (e.g. cust_abc123) for external-facing APIs. Clean URLs, safe internals.

🐳

Docker Ready

Ship to production in minutes with the included Dockerfile and docker-compose.yml. Add a reverse proxy and you're live.

📈

Observability Built-in

Structured JSON logs, request context propagation, health and readiness endpoints. Know what's happening in production from day one.

UI Layer

React dashboard · App runtime · Web components

API Gateway / Router

Auth middleware · Rate limiting · CORS · Helmet

Kernel

Entity CRUD · Event bus · Plugin loader · Tenancy

Module Layer

salon-module · example-module · your-module

Data Connector

SQLite · MySQL · PostgreSQL (swap via env var)

Architecture

Kernel first,
modules everywhere

U2OS separates the stable kernel from the ever-changing business modules. The kernel handles the hard stuff — tenancy, auth, routing, migrations — so your modules only need to define what makes them unique.

✓
Strict module isolation Each module declares its permissions in a manifest. Undeclared capabilities are rejected at load time.
✓
Deterministic migrations Core schema runs first, module migrations follow. Forward-only with a strict startup guard.
✓
Zero-trust tenancy Every request resolves a tenant from the Host header. Unknown domains are rejected in strict mode.
✓
Connector abstraction All modules talk to the same connector interface. Swap your database without touching business logic.

How It Works

From zero to
production-ready API

Three simple steps to a fully functional business application with auth, multi-tenancy, and extensible modules.

1

Clone & Configure

Clone the repo, copy .env.example, set your database client, JWT secret, and preferred database. SQLite works great for local dev — no external services needed.

2

Init & Boot

Run npm run db:init to apply schema migrations, create an owner account, then npm start. The kernel loads all modules, applies their migrations, and begins serving requests.

3

Build Your Module

Drop a new folder into /modules with a manifest.json, a routes.js, and SQL migrations. The kernel auto-discovers and wires it at startup. No config files to edit.

Plugin Modules

Ready-to-use modules,
infinitely extensible

Start with a working module and customise it, or build your own vertical from scratch using the module API.

💇
Available

Salon Module

Complete appointment scheduling system for salons, spas, and service businesses. Includes calendar view, customer booking, and payment hooks.

Appointment Scheduling Calendar View Customer Booking Payment Events
📦
Available

Example Module

Minimal reference implementation. Shows the complete module contract — manifest, routes, migrations, events — in the fewest possible lines of code.

Reference Implementation Starter Template Fully Annotated
📦
Coming Soon

Inventory Module

Stock management, SKU tracking, low-stock alerts, and purchase order workflows for product-based businesses.

Stock Tracking SKU Management Alerts
👥
Coming Soon

CRM Module

Contact management, deal pipeline, activity timeline, and email integration for customer-facing teams.

Contacts Deal Pipeline Activity Feed
💳
Coming Soon

Billing Module

Invoicing, subscription management, payment processing hooks, and revenue reporting across tenants.

Invoicing Subscriptions Stripe Hooks
✨

Build Your Own

Every business is unique. Create a custom module tailored to your workflow in minutes.

View Module API →

Multi-Tenancy

One codebase,
unlimited tenants

U2OS resolves the tenant on every single request using the Host header. Each tenant has a completely isolated database — no shared tables, no risk of data leaks, even if your code has a bug.

A control-plane database maps domains to tenant instances. Unknown hosts are rejected in strict mode. Tenant bootstrapping, provisioning, and domain routing is built right into the kernel.

Role-based access control

Owner Admin Staff Viewer

Request → Tenant Resolution

acme.example.com
→
beta.example.com
▼ Host header resolved via control-plane DB
Control Plane DB
customers · instances · domains
🗄️ acme_db
SQLite / PG / MySQL
|
🗄️ beta_db
SQLite / PG / MySQL
✓ Complete data isolation per tenant

Quick Start

Up and running
in under 5 minutes

No external services needed for local development. SQLite works out of the box.

bash
# 1. Clone the repository
$ git clone https://github.com/chrisrobison/u2os
$ cd u2os

# 2. Install dependencies
$ npm install

# 3. Configure environment
$ cp .env.example .env
# Set DB_CLIENT=sqlite and AUTH_JWT_SECRET

# 4. Initialize the database
$ npm run db:init
✔ Core schema initialized
✔ Module migrations applied

# 5. Create the first owner account
$ npm run auth:create-owner -- \
    --email owner@example.com \
    --password 'secret' \
    --name 'Owner'
✔ Owner account created

# 6. Start the server
$ npm start
▶ U2OS listening on :3010
1

Choose your database

Set DB_CLIENT=sqlite for instant local dev, or point to an existing MySQL or PostgreSQL server. The connector interface is identical either way.

2

Secure your instance

Set a 32+ character AUTH_JWT_SECRET. Configure CORS_ALLOWLIST and TRUST_PROXY for your deployment topology. Rate limiting is on by default.

3

Enable modules

Every folder in /modules is auto-discovered. Drop in the salon-module or build your own. Migrations run automatically at startup.

4

Deploy with Docker

A production-ready Dockerfile and docker-compose.yml are included. One command to build and ship. Add a reverse proxy and you're live.

Open Source · Free Forever

Ready to build on
U2OS?

Join the community. Star the repo, open an issue, or contribute a module.
Everything is MIT licensed.