Browse by type
The open core for manufacturing.
ERP · MES · QMS — API-first, extensible, yours.
<a href="https://carbon.ms"><strong>Website</strong></a> ·
<a href="https://docs.carbon.ms"><strong>Documentation</strong></a> ·
<a href="https://discord.gg/yGUJWhNqzy"><strong>Discord</strong></a> ·
<a href="https://github.com/orgs/crbnos/projects/1/views/1"><strong>Roadmap</strong></a>
<img src="https://img.shields.io/badge/TypeScript-000000?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript" />
<img src="https://img.shields.io/badge/React-000000?style=flat-square&logo=react&logoColor=white" alt="React" />
<img src="https://img.shields.io/badge/Supabase-000000?style=flat-square&logo=supabase&logoColor=white" alt="Supabase" />
<img src="https://img.shields.io/badge/Rust-000000?style=flat-square&logo=rust&logoColor=white" alt="Rust" />
<img src="https://img.shields.io/badge/License-AGPL--3.0-000000?style=flat-square" alt="License" />
crbn)We built Carbon after years of building end-to-end manufacturing systems with off-the-shelf solutions. We realized that:
We built Carbon to solve these problems ☝️
| ERP | Sales, purchasing, inventory, items, accounting |
| MES | Shop floor execution and job operations |
| QMS | Inspections, non-conformances, CAPAs |
| MRP | Material requirements planning |
| Traceability | Full lot and serial tracking |
| Nested BoM | Multi-level bills of material |
| Configurator | Product configuration |
| Capacity Planning | Scheduling against real resource capacity |
| Custom Fields | Extend any record |
| API & Webhooks | Build your own apps on top of Carbon |
| MCP Client/Server | AI-native integration surface |
| Accounting | GL, journals, and third-party sync |
See the full roadmap for what's next (up next: Simulation).
Technical highlights
Carbon is designed to make it easy for you to extend the platform by building your own apps through our API. We provide some examples to get you started in the examples folder.
| Layer | Technology |
|---|---|
| Framework | React Router |
| Language | TypeScript |
| Styling | Tailwind |
| Behavior | Radix UI |
| Database | Supabase (Postgres + RLS) |
| Auth | Supabase |
| Cache | Redis |
| Jobs | Inngest |
| SMTP (Nodemailer) | |
| i18n | Lingui |
| Hosting | Vercel |
| Billing | Stripe |
| Geometry | Rust (FCL collision + OpenCASCADE CAD) |
The monorepo follows the Turborepo convention of grouping packages into two folders:
carbon
├── apps # applications
└── packages # shared code
/apps| App | Description | How to run |
|---|---|---|
erp |
ERP application | pnpm dev (boots stack + ERP via crbn up picker) |
mes |
MES — shop floor | pnpm dev (select MES in picker, or both) |
academy |
Training | pnpm dev:academy |
starter |
Example app built on the API | pnpm dev:starter |
assembler |
Geometry service (Rust): STEP → GLB + assembly motion planning | spawned by crbn up (needs a release binary — see Optional: assembler) |
pnpm dev runs the per-worktree dev CLI (crbn up). ERP and MES are first-class — the CLI boots the docker stack, applies migrations, regenerates types/swagger, and spawns the selected apps behind portless. The assembler geometry service is spawned too when its release binary is present. Academy and starter are standalone Turborepo entries.
/packages| Package | Description |
|---|---|
@carbon/database |
Database schema, migrations and types |
@carbon/documents |
Transactional PDFs and email templates |
@carbon/ee |
Integration definitions and configurations |
@carbon/config |
Shared configuration (vitest, tsconfig, tailwind) across apps and packages |
@carbon/jobs |
Background jobs and workers |
@carbon/logger |
Shared logger used across apps |
@carbon/react |
Shared web-based UI components |
@carbon/kv |
Redis cache client |
@carbon/lib |
Third-party client libraries (slack, resend) |
@carbon/stripe |
Stripe integration |
@carbon/utils |
Shared utility functions used across apps and packages |
nvm)npm)You'll also want accounts with the following external services:
| Service | Purpose |
|---|---|
| Posthog | Product analytics platform |
| Stripe | Payments service |
| An SMTP provider (e.g. Resend) | Email service |
Posthog has a free tier which should be plenty to support local development. If you're self hosting and you don't want to use Posthog, it's pretty easy to remove the analytics.
Clone the repo, or fork it at https://github.com/crbnos/carbon/fork. Carbon is licensed under AGPLv3. If you'd rather not share your changes with your users, as AGPLv3 requires, or if you want the Enterprise features in packages/ee, you'll need a commercial license.
git clone https://github.com/crbnos/carbon.git
cd carbon
This repo uses pnpm as its package manager. Enable Corepack so the correct pnpm version (pinned via packageManager in package.json) is used automatically:
corepack enable # one-time: activates pnpm shim from packageManager field
nvm use # use node v22
pnpm install # install dependencies
The dev stack (Postgres, GoTrue, Kong, Storage, Inngest, Inbucket, Studio, Realtime) is booted later by crbn up — see Local Dev CLI below. There is no separate "start the database" step.
assembler geometry serviceassembler is a Rust service (STEP → GLB + assembly motion planning) over C++ FCL and OpenCASCADE. ERP/MES run fine without it — set it up only if you need the 3D /convert and /plan endpoints.
bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Rust, if not already installed
brew install fcl cmake ninja draco # collision libs (+ libccd/eigen/octomap), build tools, Draco mesh compression
On Linux, install the equivalents from your package manager: libfcl-dev libccd-dev libeigen3-dev liboctomap-dev libdraco-dev cmake ninja-build plus a C/C++ toolchain.
./setup.sh already installs Draco on macOS. If yours lives outside the Homebrew keg (/opt/homebrew/opt/draco on arm64), point draco-bridge's build at it with DRACO_PREFIX=/path/to/draco cargo build.
~/.cache/carbon-occt. Slow (~15–30 min) but one-time per machine; re-running is a no-op once cached:bash
./apps/assembler/scripts/build-occt.sh
build.rs finds it automatically):bash
cargo build --release -p assembler
crbn up spawns the binary when it's present. Verify it's up with curl -sf "$ASSEMBLER_SERVICE_URL/health" (the URL is in your worktree's .env.local) or by watching the asm | lines in the crbn up output. Without the binary the rest of the stack still runs — only /convert and /plan are unavailable.
crbn)crbn is a small CLI at packages/dev/bin/crbn that wraps two things:
carbon-<slug> compose project. Routing is handled by portless (a local HTTPS reverse proxy that serves *.dev hostnames on :443 with locally-trusted certs — installed automatically on first crbn up).Windows users: the dev CLI (
crbn,setup.sh) is POSIX-only and expects WSL or Git Bash. Native cmd.exe / PowerShell shells are not supported. From a WSL/Git Bash prompt, the standard flow (./setup.sh,pnpm dev,crbn checkout …) works the same as on macOS/Linux.
Run setup.sh once to put crbn on your $PATH and install the crbn shell function (so crbn checkout can change cwd):
./setup.sh # writes a sentinel block to ~/.zshrc or ~/.bashrc
source ~/.zshrc # or open a new shell
crbn # shows commands
Common flows:
``bash
crbn checkout sid/cool-thing # cd into worktree (creates if missing,
# auto-fetches from origin if needed)
crbn checkout -b feat/new-thing # new branch off origin/main + worktree
crbn checkout sid/cool-thing --up # …and boot the stack inside it
crbn checkout 760 # fetch GitHub PR #760 into apr-760`
# branch + worktree (fork PRs work too)
crbn copy # re-
browse all types & interfaces →
$ claude mcp add carbon \
-- python -m otcore.mcp_server <graph>