Carbon
Carbon: Simple on the surface, powerful underneath
Carbon 1.0 is an offline-first, self host-able sync server task manager. With the simplicity of generic ToDo apps, the power of leading GTD apps, deep time tracking for real accountability, and a core belief in No SaaS!
What You Get Right Away
Capture & organize
- Quick inbox for ideas — notes as well as tasks
- Projects to group related tasks, and any item can become a container (unlimited nesting)
- Tags to categorize work — colored, nestable, synced family-wide
- Due dates, a separate defer (snooze) date, and a separate reminder time
- Priority flagging, four levels plus a flag
Smart views
- Today - what’s due today
- Inbox - capture and process
- Flagged - your priorities
- Review - (GTD) Review Projects, so you don’t forget!
- Nearby - Tasks valid at your location
- Plan - Plan your day, backed by a time budget
- Recently Deleted - restore a task, or a whole cascade, for 30 days
- Custom Views - Create custom views with powerful filters — nested AND/OR/NOT, or just describe one in plain English
Works offline, syncs when ready
- Full browser app with a real SQLite database
- Works completely offline
- Conflict-free CRDT sync to your own server whenever you connect
- Mandatory 2FA (email and/or authenticator) on sync accounts, TLS in transit
- No cloud, no accounts you don’t control
Deploy it yourself
- Docker Compose setup
- Runs on your VPS, NAS, or home server
- Optional authentication
- No vendor lock-in
Time Tracking That Holds Up to Real Accountability
Time tracking isn’t bolted on — it’s core to how Carbon works.
- Per-user sessions, task segments and pauses, surfaced in a Time view (List / Timeline / Chart) with CSV reporting
- Retroactive editing — merge an accidental restart, split or trim untracked gaps, drag segment handles, or slot a task into a gap after the fact
- Time notes — pin a timestamped note into the active block straight from the timer bar
- Optional GPS tracks while a timer runs — denoised and attached to a time note, continuing in the background on Android
- Estimated durations per task feed a daily time budget in the Plan view, and per-project review intervals keep GTD reviews honest
Power Features
- Recurring tasks — including ordinal patterns and completion-relative repeats
- Nested tasks — break work into subtasks, unlimited depth, with dependencies gating what’s next
- Drag-and-drop — reorder or re-nest, your way
- Undo everywhere — multi-level undo/redo, an inline Undo snackbar on delete, and 30-day Recently Deleted recovery on top
- Dark/light mode — plus Light, Dark, ePaper, Gruvbox, Ayu, Nord and Catppuccin themes
- PWA installable — install as an app
- Desktop app — global quick-add hotkey (Ctrl/Cmd+Shift+A), system tray, and close-to-tray
- Task assignment — delegate to team members, with auto-share on assign
- Sharing — share a whole project or a single task (read or write, inherited down its subtree), plus a “Shared with me” view
- Federation — link a project subtree to another workspace — same server or a different Carbon host entirely — off by default and gated by both sides’ approval
- Comments — per-task discussions with @mentions and attachments
- Markdown export — export any project or task subtree as clean, portable Markdown
- REST API — integrate with Home Assistant, scripts, anything
Notes, Notebooks & Recipes
- First-class notes — a dedicated item type, nestable like tasks, edited with a rich Markdown editor; convert task ↔ note anytime without losing data
- Notes projects — flip a project to Notes and it becomes a notebook
- Note rows render as cards, with a generated thumbnail from the note’s first image
- Recipe mode — flip a note to Recipe for a scaled servings view; Optimise rewrites messy Markdown into a parseable recipe via the LLM agent, and a copy-able prompt imports a recipe straight from a web page
- Zip export of every note (Markdown + images) from Data backup
Talk to It: Natural-Language Control
Carbon understands plain language — capture and manage tasks the way you’d describe them out loud.
- In-app command box — type something like “add milk to shopping, due Friday”. A server-side tool-loop carries it out — add, complete, delete, rename, tag, schedule, share, assign, start a timer, geofence a tag — and tells you exactly what changed, tracking token usage per command.
- Agent API (
/api/agent/*) — granular tools spanning tasks, notes, recipes, sharing and time tracking that any LLM can compose. Scoped tokens, per-item write gating, and fuzzy name→ID matching keep it safe and forgiving. - Telegram bot — chat with Carbon in plain language. It remembers the conversation, so follow-ups just work: “add bread and milk to the shopping list”, then “sausages too”, then “I’ll get bread and sausages from Coles, milk from Aldi” — and each item is tagged to the right place.
- Hermes skill & webhook — drive Carbon from the CLI or any script via the
carbon-nlskill and its webhook listener, or wire up any OpenAI/Anthropic-compatible endpoint as a bot user. - Bulk tagging — add or remove tags across a whole list, tag, query, or set of items in a single call.
Location-Aware Reminders
- Local reminders, no server required — due/defer alerts still fire fully offline (foreground in the browser, background on native apps)
- Push reminders (sync server) — Web Push / FCM to every signed-in device
- Place geocoding — “remind me at the nearest Coles” finds the closest match (via OpenStreetMap) and geofences a tag to it. Cached, rate-limited, and opt-in per deployment.
- Multi-device location — every signed-in device can report its own GPS as a toggleable source. Name and manage your devices; the freshest accurate fix wins. Home Assistant is just one more source.
- Geofencing — fire reminders when you arrive or leave, via device GPS or Home Assistant, in the background on the native apps.
Learn More
Full Feature List — Detailed breakdown of every feature
Blog & Videos — Deep-dives into key features (coming soon)
Get Started
Visit carbon.etx.sx
Or
git clone https://github.com/emmertex/carbon.git
cd carbon
npm install
npm run dev
Open http://localhost:3042. Works offline immediately. Configure a server in Settings when you’re ready to sync.
Self-host: docker compose up -d --build