Issues, projects and teams — with real permissions

The system for modern product development

Plan, build and ship without the mouse. A command menu that knows what you have selected, a shortcut map you learn in an afternoon, and an authorization model that actually holds.

Four seeded accounts, four permission levels. PressCommand+kanywhere inside.

Built the way the original was, down to the measurements

Every colour, size and duration in this interface was measured off the running application rather than guessed. The greys are violet, body text is 13px at weight 450, and nothing animates for longer than 350ms.

  • Issues that hold their order

    Manual order is a base-62 fractional index, not a float. Dropping an issue between two others writes exactly one row, and there is no rebalancing pass waiting to run at the wrong moment.

  • A command menu that reads the room

    ⌘K offers what applies to what you have selected. Pick “Change status…” and it opens the statuses instead of guessing — a sub-menu, not a second dialog.

  • Permissions as one table

    Workspace, team and project roles resolve through a single declarative matrix. A missing cell is a compile error, and there is a test that greps the codebase for role comparisons written anywhere else.

  • Projects across teams

    Lead, members, milestones, health and updates. One private team on a project hides the project — visibility is computed, never stored, so it cannot drift from the memberships that decide it.

  • An inbox with a snooze that is a timestamp

    Notifications come back because a comparison changed its mind, not because a scheduled job woke up. Nothing here needs a background worker to be correct.

  • Views that survive a reload

    List or board, grouped by status, assignee, priority, project or label, with display options and filters — saved, shared, and restored exactly as you left them.

The keyboard is the interface

A scope stack, a chord buffer with a timeout, an IME guard and an Escape ladder that closes one thing per press. Single letters are the fast path, which is only possible because shortcuts are suppressed the moment a text field takes focus.

The map was assembled from Linear’s own documentation — it publishes no shortcuts page — and cross-checked against third-party sheets, several of which are stale. Where they disagreed, the documentation won.

Press ? inside the app for the whole map, searchable.

Open command palette
Command+k
Search
/
Change status…
s
Change assignee…
a
Toggle list / board
Command+b
Toggle sidebar
[
Set due date…
shift+d
Set priority to Urgent
shift+1
Go to Inbox
g i
Mark as blocked by…
m b
New issue
c
Keyboard shortcuts
?

Guests see what they were added to, and nothing else

Workspace roles, team roles and project membership resolve as a union — the highest applicable grant wins. Discoverability is a permission too: a team a guest is not in is not listable, not readable, and does not appear in search.

The last owner cannot be removed or demoted, and the check runs inside a transaction that locks the workspace row first — two concurrent demotions each reading “two owners” would otherwise both succeed.

  • OwnerEverything, including deleting the workspace.
  • AdminEverything except that. Implicitly a team admin.
  • MemberPublic teams, and any team they belong to.
  • GuestOnly their explicit team and project memberships.

The demo workspace is already seeded

Three teams, forty issues across every workflow state, three projects with milestones, and four accounts at four permission levels — so the authorization rules have something to be true about.