A source-available, self-hostable Linear-style issue tracker with a terminal-shaped soul.
Create issues, plan cycles, triage inbox — entirely under your control.
Security:
.env.exampleships with placeholder secrets. Set real values forEXPONENTIAL_SESSION_SECRET,EXPONENTIAL_METRICS_TOKEN, andDB_PASSWORD(openssl rand -hex 32) before the instance accepts any network connections — not only before sharing it.
Run the full stack locally (web + API + Postgres + Redis):
# Required: replace sample secrets in .env before exposing the app
git clone https://github.com/namuh-eng/exponential.git && cd exponential && cp .env.example .env && $EDITOR .env && docker compose up --buildBuild time: this compiles the full Go + Node.js stack from source (~15 min and ~8 GiB RAM on a typical machine). A faster image-based path is coming in #634.
Open http://localhost:7015 — done.
Full self-hosting guide: docs/self-hosting.md
| Feature | exponential | Linear | Jira | Plane |
|---|---|---|---|---|
| Self-hostable | Yes — Docker Compose or ECS | No (Cloud only) | Server edition (EOL) | Yes |
| Open / source-available | Yes (ELv2) | No | No | Yes (AGPL) |
| Go headless API | Yes — OpenAPI contract + SDK | No | No | No |
| MCP server (local) | Yes — stdio, read-only | No | No | No |
| Keyboard-first UI | Yes — command palette + shortcuts | Yes | Limited | Limited |
| Cycles (sprints) | Yes | Yes | Yes (Scrum) | Yes |
| Initiatives / roadmap | Yes | Yes | Roadmap plugin | Yes |
| AI integrations | OpenAI summaries, MCP | Yes (Ask Linear) | Atlassian Intelligence | Limited |
| CLI | Yes (TypeScript, npm) | Limited | Limited | No |
| License | Elastic 2.0 — use + modify, no resale | Proprietary | Proprietary | AGPL |
- Issues: list, board, priority, labels, estimates, assignees, comments, reactions, history, templates, bulk updates, and triage flows.
- Projects and roadmap: project detail, milestones, updates, labels, statuses, templates, progress, and roadmap views.
- Cycles and initiatives: sprint-style cycle planning plus strategic initiative grouping across projects.
- Inbox and notifications: assignment, mention, inbox, and notification settings surfaces.
- Workspace admin: members, invitations, security, API/OAuth applications, import/export, custom emoji, documents, SLA, integrations, and AI settings.
- Keyboard-first UI: command palette, shortcut registry, dense list/board views, and terminal/editorial visual direction.
- Self-hosting controls: Compose defaults, bind-address controls, optional Google OAuth, Slack OAuth, S3 attachments, SES or Opensend email, metrics token, and ECS deployment scripts.
- MCP server: expose your exponential workspace to AI agents via the local stdio MCP runtime — read issues, projects, cycles, and more.
git clone https://github.com/namuh-eng/exponential.git
cd exponential
cp .env.example .env
# Generate secrets — paste each value into .env
openssl rand -hex 32 # → EXPONENTIAL_SESSION_SECRET
openssl rand -hex 32 # → EXPONENTIAL_METRICS_TOKEN
$EDITOR .env
docker compose up --buildOpen http://localhost:7015. The stack runs: web, api, api-migrate,
postgres, and redis.
See docs/self-hosting.md for reverse-proxy headers, bind-address controls, backups, upgrades, and optional integrations.
cp .env.example .env
bash scripts/prepare-ecs-deploy-env.sh
DB_PASSWORD=<generated> bash scripts/preflight.sh
bash scripts/prepare-ecs-deploy-env.sh
RUN_PROD_SMOKE=true bash scripts/deploy-ecs.shDeploys separate API and web services behind an ALB with RDS, ElastiCache, S3, SES, ECR, smoke tests, and Secrets Manager.
git clone https://github.com/namuh-eng/exponential.git
cd exponential
pnpm install
cp .env.example .env
docker compose -f docker-compose.dev.yml up --buildWeb: http://localhost:7015 · API: http://localhost:7016
After creating a personal access token in Workspace → Settings → API:
export EXPONENTIAL_TOKEN=pat_your_token
export EXPONENTIAL_API_URL=http://localhost:7016/v1
# CLI
pnpm --filter @namuh-eng/expn-cli cli -- issue ls --json
# Local MCP server (read-only, stdio)
pnpm --filter @exponential/mcp exec exponential-mcp- CLI docs: docs/cli.md
- MCP docs: docs/mcp.md
- npm publishing: docs/cli-publishing.md
| Layer | Implementation |
|---|---|
| Web | Next.js 16, React 19, TypeScript, Tailwind, Radix UI |
| API | Go, chi, pgx, sqlc, OpenAPI strict server stubs |
| Data | PostgreSQL 15+, SQL migrations, Redis 7+ |
| Contract | packages/proto/openapi.yaml + generated TypeScript SDK |
| Auth | First-party Go auth, Google OAuth, magic links, session cookies, PATs |
| Optional integrations | S3 attachments, SES/Opensend email, Slack OAuth, OpenAI summaries |
| Deployment | Docker Compose (one host) · AWS ECS Fargate (managed) |
| Validation | make check, make test, make test-e2e, Biome, Vitest, Go tests, Playwright |
exponential/
├── apps/api/ # Go headless API and migration binary
├── apps/cli/ # TypeScript CLI over the generated SDK
├── apps/mcp/ # Local stdio MCP runtime
├── apps/web/ # Next.js UI-only app
├── packages/mcp-server/ # Read-only MCP tool package
├── packages/proto/ # OpenAPI contract and SQL migrations
├── packages/sdk/ # Generated TypeScript SDK
├── infra/ # Dockerfiles and ECS task definitions
├── scripts/ # Validation, deploy, smoke, and generation helpers
└── docs/ # Operator docs and architecture notes
make check # typecheck, lint/format, API build, OpenAPI, deploy guards
make test # Go API tests + Vitest unit tests
make test-e2e # Playwright E2E with the dev stack
make all # check + test
make dev # pnpm dev
make build # production buildYou may use, modify, and self-host exponential for any internal or personal purpose. You may not offer it as a managed hosted service to third parties.
Start with CONTRIBUTING.md. Before opening a PR:
make check
make testRun make test-e2e before declaring browser-facing flows verified.
Built by Jaeyun Ha at Ralphthon Seoul 2026.



