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

The OS for
Your Business

Business OS 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
business-os — bash
# Clone & spin up in seconds
$ git clone https://github.com/chrisrobison/business-os
$ cd business-os && 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 Business OS

Everything you need to ship
business software faster

Stop rebuilding the same plumbing. Business OS 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

Business OS 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

Business OS 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/business-os
$ cd business-os

# 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
▶ Business OS 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
Business OS?

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