AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Issue tracking without the wait.
Keyboard-first, local-first issue tracking for software teams.
Your whole workspace lives on your machine, so filtering, sorting and grouping take a keystroke — not a round trip.
Download — macOS Apple Silicon · macOS Intel · Windows · Linux AppImage · .deb
The mac and Windows builds are not signed yet, so the first launch needs right-click → Open on macOS, or More info → Run anyway on Windows.README 전문 보기 ↗Keyboard-first, local-first issue tracking for software teams. Your whole workspace lives on your machine, so filtering, sorting and groupingtake a keystroke — not a round trip.
Website · Pricing · Self-hosting guide · Docs
Download — macOS Apple Silicon · macOS Intel · Windows · Linux AppImage · .deb
The mac and Windows builds are not signed yet, so the first launch needs right-click → Open on macOS, or More info → Run anyway on Windows.
Most trackers put a network request between you and your own backlog. Polaris keeps a full replica of your workspace in the browser and answers from it: the server's job is to keep that replica true, not to be asked permission for a sort.
Measured against a 50 ms budget, not asserted:
| Filter, group and sort 5,000 issues with four active clauses | 0.2 ms |
| Full workspace snapshot | 24 ms, 20 KB gzipped |
| Local commit to the rest of the team seeing it | < 100 ms |
make up && make migrate && make seed
make dev
That brings up Postgres, applies 77 migrations, seeds a realistic workspace, and runs the
API on :8088, the sync hub on :8089, the worker, and Vite on :5173. Open
http://localhost:5173/ and it opens as the seed account — no login form.
Run them separately with make api, make sync, make worker, make web. The worker is
what turns changes into inbox notifications; skip it and the inbox stays empty.
One Compose file, no published ports on any datastore, a reverse proxy terminating TLS in front. Free, under the AGPL, with no ceiling on seats, teams or history — that is what makes it open source rather than a demo.
cp .env.example .env # set POSTGRES_PASSWORD, POLARIS_JWT_SECRET, POLARIS_PUBLIC_URL
docker compose up -d
docs/05-infrastructure/11-self-hosting.md is the runbook, and it is written to be followed on a machine that is not ours: every environment variable, what breaks when it is wrong, and the failure modes that look like something else.
Registration is invite-only by default on a self-hosted install — the first account bootstraps it, everybody after that needs an invitation. Our cloud runs open signup and is EU-only.
Issues — parent/sub-issues, relations, estimates, due dates, priorities, labels, templates, recurring issues. Triage as a hidden intake status: accept, duplicate, decline, snooze. Auto-close and auto-archive that respect parents, subs and projects.
Projects and initiatives — cross-team projects with milestones, health from the latest update, dependency lines, a Gantt timeline, project labels, attached saved views, project templates. Initiatives group projects, nest up to five deep, and roll health up.
Cycles — per-team cadence, auto-created windows, rollover and auto-add, capacity graph.
Teams — sub-teams with inherited privacy, private teams, guests, retire/restore, a 30-day delete window.
Documents, comments, notifications — team and project markdown docs, threaded comments and reactions, an inbox with subscriptions, coalescing fan-out and digest email.
Platform — one GraphQL API over the whole domain, webhooks with HMAC-SHA256 and an SSRF pin, OAuth apps and scopes, personal API keys, an MCP server, and an in-app agent. The public API is the same API the product itself uses; there is no private backdoor.
Clients — web, an Electron desktop shell for macOS, Windows and Linux with auto-update and deep links, and a native iOS app.
Everything is driven from one keymap registry — the command menu and the help overlay are
views over it, not separate lists. Space peeks, ⌘K commands, G then a letter goes
somewhere.
gqlgen GraphQL, a WebSocket sync hub, a worker. 30 packages, 193 test files.Caddyfile as the reference edge.Six discipline lints run in CI and are gates, not suggestions: every colour is a
var(--token), every shortcut goes through the keymap registry, every route a server
registers is routed by the proxy, package imports respect their boundaries, Compose
profiles stay honest, and the community build is proven — from the linked packages of the
built binary, not from a build tag — to contain nothing from ee/.
| Path | What's in it |
|---|---|
services/ | Go: GraphQL API, sync hub, worker, admin CLI |
web/ | TypeScript: local-first store, sync client, keymap, UI |
desktop/ | Electron shell — the same bundle as the web app |
ios/ | Native iOS app and its shared PolarisCore package |
ee/ | Enterprise features, under a separate commercial licence |
schema/ | The GraphQL contract, in one file |
docs/00-overview/ | Product shape, domain model (ERD), glossary |
docs/01-features/ | One file per feature area — behaviour, config, edge cases |
docs/02-integrations/ | Integration catalogue and per-integration contracts |
docs/03-platform/ | GraphQL API, webhooks, OAuth, agents, rate limits |
New here? 00-overview/01-product-summary.md → 00-overview/02-domain-model.md →
04-scope/03-dependency-graph.md → 05-infrastructure/01-architecture-overview.md.
The functional scope in docs/01-features/ came from research into what an issue tracker
for software teams has to do. That research drew on public product documentation — among it
Linear's product and platform docs, read in full on 2026-08-14.
That provenance is stated rather than hidden, because it is what makes those documents trustworthy: where a behaviour is recorded there, it is a behaviour somebody documented, and where the docs were silent and a decision was needed it is marked [INFERRED] or [OPEN]. Knowing which is which is the whole value of the exercise.
The prose, code and assets in this repository are original. No Linear source code, assets,
icons, copy or documentation text were used, and nothing was reverse-engineered from a
running product. Polaris makes its own decisions — see docs/05-infrastructure/, starting
with the sync engine and the permission model. See NOTICE and
TRADEMARK.md.
The core is AGPL-3.0. Enterprise features live in ee/ under a
separate commercial licence — source-available, not open source, and never linked into the
community build.
Self-hosting is free and unlimited on seats. The paid pitch is "you would rather not keep a
Postgres alive", plus SSO, SCIM, audit log and dashboards for the organisations that need
them. See docs/06-product-model/02-plans-and-packaging.md.
CONTRIBUTING.md has the shape of it, and
CODE_OF_CONDUCT.md the rest. Security reports go to
SECURITY.md — please do not open a public issue for one.
Before you push: make check.
docs/04-scope/ |
| Inventory, dependency graph, build phases, non-goals |
docs/05-infrastructure/ | Stack, sync engine, data layer, deployment, security, self-hosting |
docs/06-product-model/ | Licensing, packaging, running the project |
docs/07-milestones/ | Scope freezes and the acceptance tests that define done |