Project management for people
who'd rather curl than click

Alloy is a headless project tracker with a REST API. Manage tickets, sprints, and time from your terminal, your scripts, or your AI assistant.

bash
# Start the server (SQLite, zero config)
$ alloy serve
Listening on 0.0.0.0:3000

# Onboard — creates admin user, org, and API key
$ curl -s -X POST localhost:3000/api/v1/onboard \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@acme.dev","password":"changeme",
       "org_name":"Acme","org_slug":"acme"}' | jq .
{ "org_id": "d3f1...", "api_key": "alloy_live_sBk9..." }

# Authenticate
$ TOKEN=$(curl -s -X POST localhost:3000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@acme.dev","password":"changeme"}' \
  | jq -r .access_token)

# Create a project, then a ticket
$ P=$(curl -s -X POST localhost:3000/api/v1/projects \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"org_id":"'$ORG_ID'","key":"ACME","name":"Acme Platform"}' \
  | jq -r .id)

$ curl -s -X POST localhost:3000/api/v1/projects/$P/tickets \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Ship the feature","priority":"high"}' | jq .key
"ACME-1"
Get Started in 5 Minutes
"Every feature in Alloy is an API endpoint first. The CLI, TUI, and MCP server are all just clients — build your own."

Built for automation, not for browsers

{ }REST API

Every action is a curl command. Create tickets, run sprints, log time — all from your terminal or scripts.

curl -X POST /api/v1/tickets -d '{"title":"Ship it"}'

>_CLI & TUI

When you want convenience. Vim-style keybindings, interactive prompts, smart ticket resolution by key.

alloy ticket create "Fix the thing" --priority high

MCP Native

Built-in MCP server. Your AI assistant creates tickets, updates statuses, and queries your backlog natively.

"Create a ticket for the auth bug" → ACME-42

Dual Database

SQLite for solo use — zero setup. PostgreSQL for teams — multi-tenant with row-level security. Same binary.

alloy serve  # SQLite, just works

Integrations

Slack commands, GitHub webhooks, Okta SSO, SCIM provisioning. Fits into your stack, not the other way around.

/alloy create "Deploy fix" --priority urgent

Time & Finance

Built-in time tracking with capitalization reporting. Engineering effort data for finance, without a separate tool.

curl /api/v1/reports/capitalization?period=2026-Q1

Everything is a client

Alloy is the server. Your data stays behind the API.

curl CLI / TUI MCP / AI Your Scripts Alloy Server SQLite (solo) PostgreSQL (teams) S3 / MinIO (files)

A different philosophy

AlloyTraditional PM Tools
InterfaceAPI first, clients optionalGUI first, API bolted on
Automationcurl + jq + cronZapier / webhook plugins
AI integrationNative MCP serverThird-party connectors
DeploymentSingle binary, your infraSaaS, their cloud
Data ownershipYour database, your controlTheir servers, their terms
ConfigZero config SQLite startWorkspace setup wizard

Five minutes. One binary. Zero config.

Install, run, curl. That's it.

bash
# Install and run
$ cargo install alloy-cli
$ alloy serve

# You're live
$ curl http://localhost:3000/health
{"status":"ok"}
Read the Getting Started Guide