Usamos cookies para mejorar tu experiencia en el sitio
CodeWorlds
Volver a colecciones
Guide34 min read

Linear

Linear is a modern project management tool for software teams with keyboard-first UX and native GitHub integration.

Linear - Kompletny Przewodnik po Nowoczesnym Project Management

Czym jest Linear?

Linear to narzędzie do zarządzania projektami stworzone przez i dla zespołów software. W przeciwieństwie do tradycyjnych narzędzi jak Jira czy Asana, Linear stawia na szybkość, minimalizmem i keyboard-first experience - każda akcja może być wykonana bez dotykania myszki, co sprawia, że praca z narzędziem jest tak naturalna jak kodowanie.

Linear został założony w 2019 roku przez byłych pracowników Uber (Karri Saarinen - ex-Head of Design Airbnb i Jori Lallo - ex-engineer Uber). Ich frustracją było to, że narzędzia do zarządzania projektami są wolniejsze i mniej intuicyjne niż same narzędzia developerskie - dlatego stworzyli Linear jako narzędzie, które jest równie szybkie i przyjemne w użyciu jak VS Code czy terminal.

Linear jest używany przez tysiące firm technologicznych, w tym Vercel, Retool, Ramp, Loom, Cash App i wielu innych. Stał się de facto standardem dla startupów i nowoczesnych zespołów software.

Dlaczego Linear?

Kluczowe zalety Linear

  1. Szybkość - Instant load, zero lag, optimistic updates
  2. Keyboard-first - Wszystko przez skróty klawiszowe
  3. Beautiful design - Minimalistyczny, estetyczny UI
  4. GitHub native - Głęboka integracja z kodem
  5. Cycles - Sprints bez zbędnego boilerplate
  6. Roadmaps - Wizualna timeline projektów
  7. No-configuration - Działa out-of-the-box
  8. Real-time sync - Natychmiastowa synchronizacja

Linear vs Jira vs Asana vs Notion

CechaLinearJiraAsanaNotion
Szybkość UI⚡ Błyskawiczna🐌 Wolna🚶 Średnia🚶 Średnia
Keyboard shortcuts✅ Pełne❌ Ograniczone❌ Ograniczone✅ Dobre
GitHub integration✅ Native✅ Plugin❌ Webhook❌ Embed
Setup time⚡ Instant🐌 Długi🚶 Średni🚶 Średni
Learning curve✅ Niska❌ Wysoka✅ Niska🚶 Średnia
Dla dev teams✅ Perfect✅ Tak❌ Ogólne❌ Ogólne
Free tier250 issues✅ Do 10✅ Limited✅ Limited
Cena$10/user$8.15/user$11/user$10/user

Podstawy Linear

Interfejs użytkownika

Code
TEXT
┌─────────────────────────────────────────────────────────────────┐
│  Linear                                     🔍 Cmd+K  [?] [⚙️]  │
├──────────────┬──────────────────────────────────────────────────┤
│              │                                                   │
│  📥 Inbox    │  Issues                                          │
│  🎯 My Issues│  ┌────────────────────────────────────────────┐  │
│  📋 Backlog  │  │ ○ LIN-123  Fix auth redirect bug           │  │
│  ▶️ Active   │  │   🔴 Urgent · @alice · Frontend            │  │
│  📊 Triage   │  ├────────────────────────────────────────────┤  │
│              │  │ ○ LIN-124  Add dark mode toggle            │  │
│  ─────────── │  │   🟡 Medium · @bob · Design                │  │
│              │  ├────────────────────────────────────────────┤  │
│  Teams:      │  │ ○ LIN-125  Refactor API client             │  │
│  🏠 Product  │  │   🟢 Low · Unassigned · Backend            │  │
│  ⚙️ Enginee. │  └────────────────────────────────────────────┘  │
│  🎨 Design   │                                                   │
│              │  [+ New Issue]                                   │
│  ─────────── │                                                   │
│              │  Filters: Status | Priority | Assignee | Label   │
│  🗺️ Roadmap  │                                                   │
│  📅 Cycles   │                                                   │
│              │                                                   │
└──────────────┴──────────────────────────────────────────────────┘

Hierarchia w Linear

Code
TEXT
Workspace (Firma/Organizacja)
├── Team: Engineering
│   ├── Project: Mobile App v2.0
│   │   ├── Issue: LIN-101 Setup React Native
│   │   ├── Issue: LIN-102 Navigation system
│   │   └── Issue: LIN-103 API integration
│   │
│   └── Project: Backend Refactor
│       ├── Issue: LIN-201 Migrate to NestJS
│       └── Issue: LIN-202 Add caching layer
├── Team: Design
│   └── Project: Design System
│       ├── Issue: DES-001 Color palette
│       └── Issue: DES-002 Component library
└── Team: Product
    └── Project: User Research
        └── Issue: PRD-001 Conduct interviews

Tworzenie issues

Code
TEXT
Szybkie tworzenie (C lub Cmd+I):

Title: Fix login redirect bug
─────────────────────────────────────────
Description (Markdown):

## Problem
Users are redirected to wrong page after login.

## Steps to reproduce
1. Go to /login
2. Enter credentials
3. Click "Sign In"
4. Expected: Dashboard
5. Actual: Landing page

## Technical details
- [ ] Check auth middleware
- [ ] Review redirect logic in AuthContext

─────────────────────────────────────────
Status: 📋 Backlog
Priority: 🔴 Urgent
Assignee: @alice
Labels: bug, frontend, auth
Project: Authentication Improvements
Cycle: Sprint 24
Estimate: 2 points

Keyboard Shortcuts

Podstawowe skróty

Code
TEXT
NAWIGACJA:
G I          - Go to Inbox
G M          - Go to My Issues
G B          - Go to Backlog
G A          - Go to Active
G P          - Go to Projects
G C          - Go to Cycles
G R          - Go to Roadmap
G T          - Go to Team
G S          - Go to Settings

GLOBALNE:
Cmd/Ctrl + K - Command palette (najważniejszy!)
/            - Quick search
?            - Show all shortcuts
Escape       - Close/Cancel

TWORZENIE:
C            - Create issue
Shift + C    - Create issue from anywhere
I            - Create sub-issue
P            - Create project

EDYCJA ISSUES:
Space        - Select/Deselect
Enter        - Open issue detail
S            - Change status
A            - Assign
L            - Add label
E            - Edit estimate
D            - Set due date
M            - Move to project
X            - Archive
Delete       - Delete (with confirmation)

NAWIGACJA W LIŚCIE:
J / ↓        - Move down
K / ↑        - Move up
[ / ]        - Previous/Next issue

Zaawansowane skróty

Code
TEXT
BULK ACTIONS:
Shift + click    - Select range
Cmd + click      - Multi-select
Cmd + A          - Select all visible
Shift + S        - Change status for selected
Shift + A        - Assign selected
Shift + L        - Label selected

WIDOKI:
1               - List view
2               - Board view
3               - Calendar view
Cmd + Shift + \ - Toggle sidebar
F               - Full screen issue
Cmd + /         - Toggle activity

MARKDOWN (w edytorze):
Cmd + B         - Bold
Cmd + I         - Italic
Cmd + K         - Link
Cmd + E         - Code
Cmd + Shift + M - Mention user
Cmd + Shift + E - Mention issue

Command Palette (Cmd+K)

Code
TEXT
Cmd+K otwiera command palette - najszybszy sposób na wszystko:

> create issue
> assign to alice
> set status in progress
> add label bug
> move to project Authentication
> set priority urgent
> go to settings
> switch team engineering
> open preferences

Pro tip: Możesz łączyć akcje:
> LIN-123 status done assign me

Status i Workflow

Domyślne statusy

Code
TEXT
Backlog (📋) - Issues do rozważenia
├── Triage (📊) - Nowe issues do przeglądu
Todo (○) - Gotowe do pracy
In Progress (◐) - W trakcie realizacji
In Review (◑) - Code review / QA
Done (●) - Zakończone
└── Canceled (⊘) - Anulowane

Customowe workflow

Code
TEXT
Zespół może dostosować workflow:

Settings → Teams → [Team Name] → Workflow

Przykład workflow dla Design team:

📋 Backlog
├── 📊 Triage
├── 💡 Discovery
├── ✏️ Designing
├── 👀 Design Review
├── 🔄 Revisions
├── ✅ Ready for Dev
└── ● Done

Cycles (Sprints)

Konfiguracja cycles

Code
TEXT
Settings → Teams → [Team] → Cycles

Cycle length: 2 weeks
Start day: Monday
Auto-archive after: 1 week
Auto-move incomplete: ✅ (do następnego cycle)

Planowanie cyklu

Code
TEXT
1. Przejdź do Cycles (G C)
2. Wybierz nadchodzący cycle
3. Przeciągnij issues z Backlog
4. Lub użyj M (move) na issue → wybierz cycle

Cycle Planning View:
┌─────────────────────────────────────────────────────────────┐
│ Cycle 24: Jan 20 - Feb 2                                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│ Capacity: 32 points                                         │
│ Committed: 28 points                                        │
│ Progress: ████████░░░░░░░░░░░░ 35%                         │
│                                                             │
│ Issues:                                                     │
│ ● LIN-101  Setup React Native           @alice   3 pts     │
│ ◐ LIN-102  Navigation system            @bob     5 pts     │
│ ○ LIN-103  API integration              @alice   8 pts     │
│ ○ LIN-104  Unit tests                   @charlie 5 pts     │
│ ○ LIN-105  Documentation                Unas.    2 pts     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Velocity i metryki

Code
TEXT
Cycle metrics automatycznie śledzone:

- Velocity: średnia liczba punktów/cycle
- Completion rate: % ukończonych issues
- Scope change: ile dodano/usunięto w trakcie
- Lead time: czas od created do done
- Cycle time: czas od started do done

Linear automatycznie pokazuje trendy i przewiduje
capacity dla przyszłych cycles.

GitHub Integration

Linkowanie issues

Code
TEXT
W commit messages lub PR:
─────────────────────────────
fix: resolve auth redirect bug

Fixes LIN-123
Closes LIN-124
Relates to LIN-125
─────────────────────────────

Lub w PR description:
Closes LIN-123

Linear automatycznie:
1. Linkuje PR do issue
2. Zmienia status issue na "In Review"
3. Po merge zmienia na "Done" (opcjonalne)

Automatyzacja statusów

Code
TEXT
Settings → Integrations → GitHub → Automations

Dostępne triggery:
├── PR opened → Move issue to "In Review"
├── PR merged → Move issue to "Done"
├── PR closed → Move issue to "Backlog"
├── Branch created → Move issue to "In Progress"
└── Commit pushed → Show activity on issue

Przykładowa konfiguracja:
[✓] When PR is opened, move to "In Review"
[✓] When PR is merged to main, move to "Done"
[✓] Show commits and PRs on issue timeline
[✓] Auto-link issues from branch names (feature/LIN-123)

Branch naming

Code
TEXT
Linear może automatycznie generować nazwy branchy:

Issue: LIN-123 "Fix login redirect bug"
Branch: feature/lin-123-fix-login-redirect-bug

Settings → Integrations → GitHub:
Branch format: {prefix}/{issueId}-{title}
Prefix: feature, fix, chore (based on label)

GitHub Sync

Code
TEXT
Dwukierunkowa synchronizacja:

GitHub Issue → Linear Issue
- Import issues z GitHub
- Sync komentarzy
- Sync labels

Linear Issue → GitHub Issue
- Export issues do GitHub
- Mirror status changes

Projects i Roadmaps

Tworzenie projektu

Code
TEXT
1. G P (go to projects)
2. P (create project)
3. Wypełnij:

Project: Mobile App v2.0
─────────────────────────────────────────
Icon: 📱
Description: Complete rewrite of our mobile app
using React Native for both iOS and Android.

Status: 🟡 In Progress
Lead: @alice
Target date: March 30, 2025
─────────────────────────────────────────

Projects mogą zawierać:
- Multiple milestones
- Linked issues
- Documents
- Updates (progress posts)

Milestones

Code
TEXT
Project: Mobile App v2.0
├── Milestone 1: Foundation (Feb 15)
│   ├── LIN-101 Setup project
│   ├── LIN-102 Core navigation
│   └── LIN-103 Design system integration
├── Milestone 2: Core Features (Mar 1)
│   ├── LIN-201 User authentication
│   ├── LIN-202 Profile management
│   └── LIN-203 Settings screen
├── Milestone 3: Polish (Mar 20)
│   ├── LIN-301 Performance optimization
│   ├── LIN-302 Accessibility
│   └── LIN-303 Bug fixes
└── Milestone 4: Launch (Mar 30)
    ├── LIN-401 App Store submission
    └── LIN-402 Marketing assets

Roadmap view

Code
TEXT
Roadmap pokazuje projekty na timeline:

         Jan        Feb        Mar        Apr
         ├──────────┼──────────┼──────────┼──
         │          │          │          │
Mobile   │██████████████████████████░░░░░░│ ← In Progress
App v2   │          │          │  ↑ Target│
         │          │          │          │
Backend  │     ████████████████│          │ ← Completed
Refactor │          │          │          │
         │          │          │          │
Design   │               ██████████████████│ ← Planned
System   │          │          │          │
         │          │          │          │

Możesz drag & drop aby zmienić daty,
i kliknąć projekt aby zobaczyć szczegóły.

Triage i Inbox

Triage workflow

Code
TEXT
Triage to miejsce gdzie trafiają nowe issues
przed przypisaniem do backlogu:

1. Issue created → Status: Triage
2. Team lead przegląda
3. Przypisuje:
   - Priority
   - Labels
   - Project/Cycle
   - Assignee
4. Przenosi do Backlog lub Todo
5. Lub zamyka jako duplicate/invalid

Triage View (G T):
┌─────────────────────────────────────────────────────────────┐
│ Triage · 12 issues need attention                           │
├─────────────────────────────────────────────────────────────┤
│ Today (5)                                                   │
│ ○ LIN-200  Bug: Login fails on Safari      @user reported  │
│ ○ LIN-201  Feature: Dark mode support      @user requested │
│ ○ LIN-202  Bug: Crash on large files       @user reported  │
│                                                             │
│ Yesterday (4)                                               │
│ ...                                                         │
│                                                             │
│ Older (3)                                                   │
│ ...                                                         │
└─────────────────────────────────────────────────────────────┘

Inbox

Code
TEXT
Inbox (G I) pokazuje twoje notyfikacje:

- Issues assigned to you
- Issues where you're mentioned
- Comments on your issues
- Status changes on watched issues

Możesz:
- Mark as read (Enter)
- Snooze (z) - przypomni później
- Archive (x) - usuń z inbox

Labels i Filtering

System labels

Code
TEXT
Labels pomagają kategoryzować issues:

Type labels:
├── 🐛 bug
├── ✨ feature
├── 📝 documentation
├── 🧹 chore
└── 🔧 refactor

Area labels:
├── frontend
├── backend
├── mobile
├── infrastructure
└── design

Priority labels (wbudowane):
├── 🔴 Urgent (P0)
├── 🟠 High (P1)
├── 🟡 Medium (P2)
├── 🟢 Low (P3)
└── ⚪ No priority

Zaawansowane filtry

Code
TEXT
Filtrowanie w Linear jest potężne:

status:inProgress              - Issues in progress
assignee:me                    - My issues
priority:urgent,high           - Urgent or high priority
label:bug,frontend             - Bugs in frontend
created:>2024-01-01            - Created after date
updated:<7d                    - Updated in last 7 days
cycle:current                  - Current cycle
project:"Mobile App"           - Specific project
has:attachment                 - Has attachments
estimate:>3                    - Estimate > 3 points

Kombinacje:
assignee:me status:todo,inProgress label:bug

Zapisane filtry:
Views → Custom Views → Save current filter

Views

Code
TEXT
Tworzenie custom view:

1. Ustaw filtry
2. Wybierz kolumny i sortowanie
3. Click "Save view"
4. Nazwij i wybierz widoczność:
   - Personal
   - Team
   - Workspace

Przykładowe views:
- "My urgent bugs" - assignee:me label:bug priority:urgent
- "Ready for review" - status:inReview
- "Blocked issues" - has:blocker
- "Unestimated" - estimate:none

Integracje

Slack

Code
TEXT
Linear ↔ Slack Integration:

1. Notifications → Slack channel
   - New issues created
   - Status changes
   - Mentions

2. Create issues from Slack:
   /linear create "Bug: Login broken"
   /linear LIN-123 - show issue details

3. Unfurl Linear links:
   Paste Linear URL → rich preview

Settings → Integrations → Slack

Figma

Code
TEXT
Figma Integration:

1. Paste Figma link in issue → rich preview
2. Attach Figma files to issues
3. Open Figma from Linear

Workflow:
Designer creates design in Figma
→ Attaches to Linear issue
→ Developer sees preview in Linear
→ No context switching needed

Inne integracje

Code
TEXT
Oficjalne integracje:
├── GitHub/GitLab/Bitbucket
├── Slack
├── Figma
├── Sentry
├── Zendesk
├── Intercom
├── Notion
├── Discord
└── Zapier (dla custom)

API i Webhooks:
├── GraphQL API
├── Webhooks
└── OAuth apps

Linear API

GraphQL API

Code
TypeScript
// Linear SDK
import { LinearClient } from '@linear/sdk'

const linear = new LinearClient({
  apiKey: process.env.LINEAR_API_KEY
})

// Pobierz issues
async function getMyIssues() {
  const me = await linear.viewer
  const issues = await me.assignedIssues()

  return issues.nodes.map(issue => ({
    id: issue.id,
    identifier: issue.identifier, // LIN-123
    title: issue.title,
    state: issue.state?.name,
    priority: issue.priority
  }))
}

// Utwórz issue
async function createIssue(teamId: string, title: string, description: string) {
  const issue = await linear.createIssue({
    teamId,
    title,
    description,
    priority: 2, // Medium
    labelIds: ['bug-label-id']
  })

  return issue.issue
}

// Aktualizuj issue
async function updateIssueStatus(issueId: string, stateId: string) {
  await linear.updateIssue(issueId, {
    stateId
  })
}

// Dodaj komentarz
async function addComment(issueId: string, body: string) {
  await linear.createComment({
    issueId,
    body
  })
}

Webhooks

Code
TypeScript
// Webhook handler (Next.js API route)
import { LinearWebhooks, LINEAR_WEBHOOK_SIGNATURE_HEADER } from '@linear/sdk'

const webhook = new LinearWebhooks(process.env.LINEAR_WEBHOOK_SECRET!)

export async function POST(request: Request) {
  const body = await request.text()
  const signature = request.headers.get(LINEAR_WEBHOOK_SIGNATURE_HEADER)

  if (!webhook.verify(body, signature!)) {
    return Response.json({ error: 'Invalid signature' }, { status: 401 })
  }

  const payload = JSON.parse(body)

  switch (payload.type) {
    case 'Issue':
      if (payload.action === 'create') {
        console.log('New issue:', payload.data.title)
        // Send to Slack, update CRM, etc.
      }
      break

    case 'Comment':
      if (payload.action === 'create') {
        console.log('New comment on:', payload.data.issue.identifier)
      }
      break
  }

  return Response.json({ success: true })
}

Best Practices

Issue writing

Code
TEXT
Dobry issue zawiera:

Title: Krótki, opisowy (co, nie jak)
✓ "Fix: Users can't reset password"
✗ "Password bug"
✗ "Use bcrypt instead of md5"

Description:
1. Problem/Context - co i dlaczego
2. Acceptance criteria - kiedy done
3. Technical notes - dla developera

Przykład:
─────────────────────────────────────────
## Problem
Users are unable to reset their password.
The reset email is sent but the link returns 404.

## Root cause
Token expires before email is delivered (5 min TTL).

## Acceptance criteria
- [ ] Increase token TTL to 1 hour
- [ ] Add expiry message on 404
- [ ] Add "resend email" option

## Technical notes
- Token stored in Redis: `reset:{userId}`
- Email sent via Resend

Team workflow

Code
TEXT
Rekomendowany workflow:

Monday:
1. Cycle planning (30 min)
2. Review triage
3. Assign issues

Daily:
1. Check inbox (5 min)
2. Update issue statuses
3. Add blockers/comments

End of cycle:
1. Close completed issues
2. Review velocity
3. Incomplete → next cycle
4. Retrospective

Pro tips:
- Use keyboard shortcuts religiously
- Keep issues small (1-3 days max)
- Update status in real-time
- Link all PRs to issues

Estimation

Code
TEXT
Story points w Linear:

1 - Trivial (< 1 hour)
2 - Small (half day)
3 - Medium (1 day)
5 - Large (2-3 days)
8 - Very large (1 week) → consider splitting

Alternatywnie - T-shirt sizes:
XS, S, M, L, XL (mapują na 1, 2, 3, 5, 8)

Settings → Teams → Estimation:
- Points
- T-shirt
- Hours
- None

Cennik

Plany

Code
TEXT
Free:
├── Do 250 issues
├── Unlimited members
├── Basic integrations
├── Mobile apps
└── Public API

Standard ($10/user/month):
├── Unlimited issues
├── Cycles
├── Roadmaps
├── All integrations
├── Custom workflows
├── Triage
└── Priority support

Plus ($15/user/month):
├── Everything in Standard
├── Advanced insights
├── SAML SSO
├── SCIM provisioning
├── Audit logs
├── Custom roles
└── 99.99% SLA

Enterprise (custom):
├── Everything in Plus
├── Dedicated support
├── Custom contracts
├── On-premise option
└── Advanced security

Porównanie z Jira

Code
TEXT
Linear vs Jira - Total Cost of Ownership:

Linear Standard: $10/user/month
Jira Standard: $8.15/user/month (seems cheaper but...)

Hidden Jira costs:
+ Admin time for configuration
+ Plugin costs ($5-20/user)
+ Training (steep learning curve)
+ Performance issues (developer frustration)
+ Context switching (slow UI)

Real-world comparison:
10-person team, 1 year:

Linear:
$10 × 10 × 12 = $1,200/year
+ 0 hours setup
+ 1 hour training
= $1,200 + minimal time

Jira:
$8.15 × 10 × 12 = $978/year
+ 20 hours setup × $50/hr = $1,000
+ 10 hours training × $50/hr = $500
+ Plugins ~$500/year
+ Lost productivity (slow UI) = ???
= $2,978+ annually

FAQ - Często zadawane pytania

Czy Linear ma darmowy tier?

Tak, Linear oferuje darmowy plan do 250 issues z unlimited members. To wystarcza dla małych zespołów i side projects. Po przekroczeniu limitu musisz przejść na Standard ($10/user/month).

Jak zmigrować z Jira?

Linear oferuje oficjalny importer:

  1. Settings → Import → Jira
  2. Połącz konto Jira
  3. Wybierz projekty do importu
  4. Mapuj statusy i labels
  5. Import (może potrwać zależnie od ilości issues)

Linear migruje: issues, comments, attachments, labels, assignees.

Czy Linear działa offline?

Linear jest web-first i wymaga internetu. Jednak:

  • PWA można zainstalować
  • Desktop app (Electron) cache'uje dane
  • Optimistic updates - czujesz się jak offline

Jak Linear wypada dla non-dev teams?

Linear jest zoptymalizowany dla software teams. Dla:

  • Marketing/Sales → Notion, Asana
  • All-purpose → Monday, ClickUp
  • Design teams → Linear jest OK

Czy mogę używać Linear z GitLab/Bitbucket?

Tak, Linear ma oficjalne integracje z GitLab i Bitbucket. Funkcjonalność jest podobna do GitHub - linkowanie issues, auto-status changes.

Jak zarządzać wieloma zespołami?

Linear obsługuje multiple teams w jednym workspace:

  • Każdy team ma własny backlog i workflow
  • Issues mogą być przenoszone między teamami
  • Roadmap pokazuje wszystkie projekty
  • Cross-team dependencies

Podsumowanie

Linear to idealne narzędzie do zarządzania projektami dla zespołów software, oferujące:

  • Błyskawiczną szybkość - Instant load, zero lag
  • Keyboard-first UX - Wszystko przez skróty
  • Native GitHub - Głęboka integracja z kodem
  • Cycles - Sprints bez boilerplate
  • Roadmaps - Wizualne planowanie
  • Beautiful design - Przyjemny w użyciu

Jeśli jesteś zmęczony wolną Jirą lub ogólnymi narzędziami jak Asana - Linear to game-changer dla dev teams.


Linear - a complete guide to modern project management

What is Linear?

Linear is a project management tool built by and for software teams. Unlike traditional tools like Jira or Asana, Linear prioritizes speed, minimalism, and a keyboard-first experience - every action can be performed without touching the mouse, making working with the tool feel as natural as coding itself.

Linear was founded in 2019 by former Uber employees (Karri Saarinen - ex-Head of Design at Airbnb and Jori Lallo - ex-engineer at Uber). Their frustration was that project management tools were slower and less intuitive than the developer tools themselves - so they created Linear as a tool that is just as fast and pleasant to use as VS Code or the terminal.

Linear is used by thousands of technology companies, including Vercel, Retool, Ramp, Loom, Cash App, and many others. It has become the de facto standard for startups and modern software teams.

Why Linear?

Key advantages of Linear

  1. Speed - Instant load, zero lag, optimistic updates
  2. Keyboard-first - Everything via keyboard shortcuts
  3. Beautiful design - Minimalist, aesthetic UI
  4. GitHub native - Deep integration with code
  5. Cycles - Sprints without unnecessary boilerplate
  6. Roadmaps - Visual project timelines
  7. No-configuration - Works out-of-the-box
  8. Real-time sync - Instant synchronization

Linear vs Jira vs Asana vs Notion

FeatureLinearJiraAsanaNotion
UI speed⚡ Lightning fast🐌 Slow🚶 Average🚶 Average
Keyboard shortcuts✅ Full❌ Limited❌ Limited✅ Good
GitHub integration✅ Native✅ Plugin❌ Webhook❌ Embed
Setup time⚡ Instant🐌 Long🚶 Medium🚶 Medium
Learning curve✅ Low❌ High✅ Low🚶 Medium
For dev teams✅ Perfect✅ Yes❌ General❌ General
Free tier250 issues✅ Up to 10✅ Limited✅ Limited
Price$10/user$8.15/user$11/user$10/user

Linear basics

User interface

Code
TEXT
┌─────────────────────────────────────────────────────────────────┐
│  Linear                                     🔍 Cmd+K  [?] [⚙️]  │
├──────────────┬──────────────────────────────────────────────────┤
│              │                                                   │
│  📥 Inbox    │  Issues                                          │
│  🎯 My Issues│  ┌────────────────────────────────────────────┐  │
│  📋 Backlog  │  │ ○ LIN-123  Fix auth redirect bug           │  │
│  ▶️ Active   │  │   🔴 Urgent · @alice · Frontend            │  │
│  📊 Triage   │  ├────────────────────────────────────────────┤  │
│              │  │ ○ LIN-124  Add dark mode toggle            │  │
│  ─────────── │  │   🟡 Medium · @bob · Design                │  │
│              │  ├────────────────────────────────────────────┤  │
│  Teams:      │  │ ○ LIN-125  Refactor API client             │  │
│  🏠 Product  │  │   🟢 Low · Unassigned · Backend            │  │
│  ⚙️ Enginee. │  └────────────────────────────────────────────┘  │
│  🎨 Design   │                                                   │
│              │  [+ New Issue]                                   │
│  ─────────── │                                                   │
│              │  Filters: Status | Priority | Assignee | Label   │
│  🗺️ Roadmap  │                                                   │
│  📅 Cycles   │                                                   │
│              │                                                   │
└──────────────┴──────────────────────────────────────────────────┘

Hierarchy in Linear

Code
TEXT
Workspace (Company/Organization)
├── Team: Engineering
│   ├── Project: Mobile App v2.0
│   │   ├── Issue: LIN-101 Setup React Native
│   │   ├── Issue: LIN-102 Navigation system
│   │   └── Issue: LIN-103 API integration
│   │
│   └── Project: Backend Refactor
│       ├── Issue: LIN-201 Migrate to NestJS
│       └── Issue: LIN-202 Add caching layer
├── Team: Design
│   └── Project: Design System
│       ├── Issue: DES-001 Color palette
│       └── Issue: DES-002 Component library
└── Team: Product
    └── Project: User Research
        └── Issue: PRD-001 Conduct interviews

Creating issues

Code
TEXT
Quick creation (C or Cmd+I):

Title: Fix login redirect bug
─────────────────────────────────────────
Description (Markdown):

## Problem
Users are redirected to wrong page after login.

## Steps to reproduce
1. Go to /login
2. Enter credentials
3. Click "Sign In"
4. Expected: Dashboard
5. Actual: Landing page

## Technical details
- [ ] Check auth middleware
- [ ] Review redirect logic in AuthContext

─────────────────────────────────────────
Status: 📋 Backlog
Priority: 🔴 Urgent
Assignee: @alice
Labels: bug, frontend, auth
Project: Authentication Improvements
Cycle: Sprint 24
Estimate: 2 points

Keyboard shortcuts

Basic shortcuts

Code
TEXT
NAVIGATION:
G I          - Go to Inbox
G M          - Go to My Issues
G B          - Go to Backlog
G A          - Go to Active
G P          - Go to Projects
G C          - Go to Cycles
G R          - Go to Roadmap
G T          - Go to Team
G S          - Go to Settings

GLOBAL:
Cmd/Ctrl + K - Command palette (the most important one!)
/            - Quick search
?            - Show all shortcuts
Escape       - Close/Cancel

CREATING:
C            - Create issue
Shift + C    - Create issue from anywhere
I            - Create sub-issue
P            - Create project

EDITING ISSUES:
Space        - Select/Deselect
Enter        - Open issue detail
S            - Change status
A            - Assign
L            - Add label
E            - Edit estimate
D            - Set due date
M            - Move to project
X            - Archive
Delete       - Delete (with confirmation)

LIST NAVIGATION:
J / ↓        - Move down
K / ↑        - Move up
[ / ]        - Previous/Next issue

Advanced shortcuts

Code
TEXT
BULK ACTIONS:
Shift + click    - Select range
Cmd + click      - Multi-select
Cmd + A          - Select all visible
Shift + S        - Change status for selected
Shift + A        - Assign selected
Shift + L        - Label selected

VIEWS:
1               - List view
2               - Board view
3               - Calendar view
Cmd + Shift + \ - Toggle sidebar
F               - Full screen issue
Cmd + /         - Toggle activity

MARKDOWN (in editor):
Cmd + B         - Bold
Cmd + I         - Italic
Cmd + K         - Link
Cmd + E         - Code
Cmd + Shift + M - Mention user
Cmd + Shift + E - Mention issue

Command Palette (Cmd+K)

Code
TEXT
Cmd+K opens the command palette - the fastest way to do anything:

> create issue
> assign to alice
> set status in progress
> add label bug
> move to project Authentication
> set priority urgent
> go to settings
> switch team engineering
> open preferences

Pro tip: You can chain actions:
> LIN-123 status done assign me

Status and workflow

Default statuses

Code
TEXT
Backlog (📋) - Issues to consider
├── Triage (📊) - New issues to review
Todo (○) - Ready to work on
In Progress (◐) - Currently being worked on
In Review (◑) - Code review / QA
Done (●) - Completed
└── Canceled (⊘) - Canceled

Custom workflows

Code
TEXT
Teams can customize their workflow:

Settings → Teams → [Team Name] → Workflow

Example workflow for a Design team:

📋 Backlog
├── 📊 Triage
├── 💡 Discovery
├── ✏️ Designing
├── 👀 Design Review
├── 🔄 Revisions
├── ✅ Ready for Dev
└── ● Done

Cycles (Sprints)

Configuring cycles

Code
TEXT
Settings → Teams → [Team] → Cycles

Cycle length: 2 weeks
Start day: Monday
Auto-archive after: 1 week
Auto-move incomplete: ✅ (to next cycle)

Planning a cycle

Code
TEXT
1. Navigate to Cycles (G C)
2. Select the upcoming cycle
3. Drag issues from Backlog
4. Or use M (move) on an issue → select cycle

Cycle Planning View:
┌─────────────────────────────────────────────────────────────┐
│ Cycle 24: Jan 20 - Feb 2                                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│ Capacity: 32 points                                         │
│ Committed: 28 points                                        │
│ Progress: ████████░░░░░░░░░░░░ 35%                         │
│                                                             │
│ Issues:                                                     │
│ ● LIN-101  Setup React Native           @alice   3 pts     │
│ ◐ LIN-102  Navigation system            @bob     5 pts     │
│ ○ LIN-103  API integration              @alice   8 pts     │
│ ○ LIN-104  Unit tests                   @charlie 5 pts     │
│ ○ LIN-105  Documentation                Unas.    2 pts     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Velocity and metrics

Code
TEXT
Cycle metrics are tracked automatically:

- Velocity: average number of points per cycle
- Completion rate: percentage of completed issues
- Scope change: how many issues were added/removed during the cycle
- Lead time: time from created to done
- Cycle time: time from started to done

Linear automatically shows trends and predicts
capacity for future cycles.

GitHub integration

Linking issues

Code
TEXT
In commit messages or PRs:
─────────────────────────────
fix: resolve auth redirect bug

Fixes LIN-123
Closes LIN-124
Relates to LIN-125
─────────────────────────────

Or in the PR description:
Closes LIN-123

Linear automatically:
1. Links the PR to the issue
2. Changes the issue status to "In Review"
3. After merge, changes it to "Done" (optional)

Status automation

Code
TEXT
Settings → Integrations → GitHub → Automations

Available triggers:
├── PR opened → Move issue to "In Review"
├── PR merged → Move issue to "Done"
├── PR closed → Move issue to "Backlog"
├── Branch created → Move issue to "In Progress"
└── Commit pushed → Show activity on issue

Example configuration:
[✓] When PR is opened, move to "In Review"
[✓] When PR is merged to main, move to "Done"
[✓] Show commits and PRs on issue timeline
[✓] Auto-link issues from branch names (feature/LIN-123)

Branch naming

Code
TEXT
Linear can automatically generate branch names:

Issue: LIN-123 "Fix login redirect bug"
Branch: feature/lin-123-fix-login-redirect-bug

Settings → Integrations → GitHub:
Branch format: {prefix}/{issueId}-{title}
Prefix: feature, fix, chore (based on label)

GitHub Sync

Code
TEXT
Two-way synchronization:

GitHub Issue → Linear Issue
- Import issues from GitHub
- Sync comments
- Sync labels

Linear Issue → GitHub Issue
- Export issues to GitHub
- Mirror status changes

Projects and roadmaps

Creating a project

Code
TEXT
1. G P (go to projects)
2. P (create project)
3. Fill in:

Project: Mobile App v2.0
─────────────────────────────────────────
Icon: 📱
Description: Complete rewrite of our mobile app
using React Native for both iOS and Android.

Status: 🟡 In Progress
Lead: @alice
Target date: March 30, 2025
─────────────────────────────────────────

Projects can contain:
- Multiple milestones
- Linked issues
- Documents
- Updates (progress posts)

Milestones

Code
TEXT
Project: Mobile App v2.0
├── Milestone 1: Foundation (Feb 15)
│   ├── LIN-101 Setup project
│   ├── LIN-102 Core navigation
│   └── LIN-103 Design system integration
├── Milestone 2: Core Features (Mar 1)
│   ├── LIN-201 User authentication
│   ├── LIN-202 Profile management
│   └── LIN-203 Settings screen
├── Milestone 3: Polish (Mar 20)
│   ├── LIN-301 Performance optimization
│   ├── LIN-302 Accessibility
│   └── LIN-303 Bug fixes
└── Milestone 4: Launch (Mar 30)
    ├── LIN-401 App Store submission
    └── LIN-402 Marketing assets

Roadmap view

Code
TEXT
The roadmap displays projects on a timeline:

         Jan        Feb        Mar        Apr
         ├──────────┼──────────┼──────────┼──
         │          │          │          │
Mobile   │██████████████████████████░░░░░░│ ← In Progress
App v2   │          │          │  ↑ Target│
         │          │          │          │
Backend  │     ████████████████│          │ ← Completed
Refactor │          │          │          │
         │          │          │          │
Design   │               ██████████████████│ ← Planned
System   │          │          │          │
         │          │          │          │

You can drag & drop to change dates,
and click on a project to see its details.

Triage and inbox

Triage workflow

Code
TEXT
Triage is where new issues land
before being assigned to the backlog:

1. Issue created → Status: Triage
2. Team lead reviews
3. Assigns:
   - Priority
   - Labels
   - Project/Cycle
   - Assignee
4. Moves to Backlog or Todo
5. Or closes as duplicate/invalid

Triage View (G T):
┌─────────────────────────────────────────────────────────────┐
│ Triage · 12 issues need attention                           │
├─────────────────────────────────────────────────────────────┤
│ Today (5)                                                   │
│ ○ LIN-200  Bug: Login fails on Safari      @user reported  │
│ ○ LIN-201  Feature: Dark mode support      @user requested │
│ ○ LIN-202  Bug: Crash on large files       @user reported  │
│                                                             │
│ Yesterday (4)                                               │
│ ...                                                         │
│                                                             │
│ Older (3)                                                   │
│ ...                                                         │
└─────────────────────────────────────────────────────────────┘

Inbox

Code
TEXT
Inbox (G I) shows your notifications:

- Issues assigned to you
- Issues where you're mentioned
- Comments on your issues
- Status changes on watched issues

You can:
- Mark as read (Enter)
- Snooze (z) - will remind you later
- Archive (x) - remove from inbox

Labels and filtering

System labels

Code
TEXT
Labels help categorize issues:

Type labels:
├── 🐛 bug
├── ✨ feature
├── 📝 documentation
├── 🧹 chore
└── 🔧 refactor

Area labels:
├── frontend
├── backend
├── mobile
├── infrastructure
└── design

Priority labels (built-in):
├── 🔴 Urgent (P0)
├── 🟠 High (P1)
├── 🟡 Medium (P2)
├── 🟢 Low (P3)
└── ⚪ No priority

Advanced filters

Code
TEXT
Filtering in Linear is powerful:

status:inProgress              - Issues in progress
assignee:me                    - My issues
priority:urgent,high           - Urgent or high priority
label:bug,frontend             - Bugs in frontend
created:>2024-01-01            - Created after date
updated:<7d                    - Updated in last 7 days
cycle:current                  - Current cycle
project:"Mobile App"           - Specific project
has:attachment                 - Has attachments
estimate:>3                    - Estimate > 3 points

Combinations:
assignee:me status:todo,inProgress label:bug

Saved filters:
Views → Custom Views → Save current filter

Views

Code
TEXT
Creating a custom view:

1. Set your filters
2. Choose columns and sorting
3. Click "Save view"
4. Name it and choose visibility:
   - Personal
   - Team
   - Workspace

Example views:
- "My urgent bugs" - assignee:me label:bug priority:urgent
- "Ready for review" - status:inReview
- "Blocked issues" - has:blocker
- "Unestimated" - estimate:none

Integrations

Slack

Code
TEXT
Linear ↔ Slack Integration:

1. Notifications → Slack channel
   - New issues created
   - Status changes
   - Mentions

2. Create issues from Slack:
   /linear create "Bug: Login broken"
   /linear LIN-123 - show issue details

3. Unfurl Linear links:
   Paste Linear URL → rich preview

Settings → Integrations → Slack

Figma

Code
TEXT
Figma Integration:

1. Paste Figma link in issue → rich preview
2. Attach Figma files to issues
3. Open Figma from Linear

Workflow:
Designer creates design in Figma
→ Attaches to Linear issue
→ Developer sees preview in Linear
→ No context switching needed

Other integrations

Code
TEXT
Official integrations:
├── GitHub/GitLab/Bitbucket
├── Slack
├── Figma
├── Sentry
├── Zendesk
├── Intercom
├── Notion
├── Discord
└── Zapier (for custom workflows)

API and Webhooks:
├── GraphQL API
├── Webhooks
└── OAuth apps

Linear API

GraphQL API

Code
TypeScript
import { LinearClient } from '@linear/sdk'

const linear = new LinearClient({
  apiKey: process.env.LINEAR_API_KEY
})

async function getMyIssues() {
  const me = await linear.viewer
  const issues = await me.assignedIssues()

  return issues.nodes.map(issue => ({
    id: issue.id,
    identifier: issue.identifier,
    title: issue.title,
    state: issue.state?.name,
    priority: issue.priority
  }))
}

async function createIssue(teamId: string, title: string, description: string) {
  const issue = await linear.createIssue({
    teamId,
    title,
    description,
    priority: 2,
    labelIds: ['bug-label-id']
  })

  return issue.issue
}

async function updateIssueStatus(issueId: string, stateId: string) {
  await linear.updateIssue(issueId, {
    stateId
  })
}

async function addComment(issueId: string, body: string) {
  await linear.createComment({
    issueId,
    body
  })
}

Webhooks

Code
TypeScript
import { LinearWebhooks, LINEAR_WEBHOOK_SIGNATURE_HEADER } from '@linear/sdk'

const webhook = new LinearWebhooks(process.env.LINEAR_WEBHOOK_SECRET!)

export async function POST(request: Request) {
  const body = await request.text()
  const signature = request.headers.get(LINEAR_WEBHOOK_SIGNATURE_HEADER)

  if (!webhook.verify(body, signature!)) {
    return Response.json({ error: 'Invalid signature' }, { status: 401 })
  }

  const payload = JSON.parse(body)

  switch (payload.type) {
    case 'Issue':
      if (payload.action === 'create') {
        console.log('New issue:', payload.data.title)
      }
      break

    case 'Comment':
      if (payload.action === 'create') {
        console.log('New comment on:', payload.data.issue.identifier)
      }
      break
  }

  return Response.json({ success: true })
}

Best practices

Issue writing

Code
TEXT
A good issue contains:

Title: Short, descriptive (what, not how)
✓ "Fix: Users can't reset password"
✗ "Password bug"
✗ "Use bcrypt instead of md5"

Description:
1. Problem/Context - what and why
2. Acceptance criteria - when is it done
3. Technical notes - for the developer

Example:
─────────────────────────────────────────
## Problem
Users are unable to reset their password.
The reset email is sent but the link returns 404.

## Root cause
Token expires before email is delivered (5 min TTL).

## Acceptance criteria
- [ ] Increase token TTL to 1 hour
- [ ] Add expiry message on 404
- [ ] Add "resend email" option

## Technical notes
- Token stored in Redis: `reset:{userId}`
- Email sent via Resend

Team workflow

Code
TEXT
Recommended workflow:

Monday:
1. Cycle planning (30 min)
2. Review triage
3. Assign issues

Daily:
1. Check inbox (5 min)
2. Update issue statuses
3. Add blockers/comments

End of cycle:
1. Close completed issues
2. Review velocity
3. Incomplete → next cycle
4. Retrospective

Pro tips:
- Use keyboard shortcuts religiously
- Keep issues small (1-3 days max)
- Update status in real-time
- Link all PRs to issues

Estimation

Code
TEXT
Story points in Linear:

1 - Trivial (< 1 hour)
2 - Small (half day)
3 - Medium (1 day)
5 - Large (2-3 days)
8 - Very large (1 week) → consider splitting

Alternatively - T-shirt sizes:
XS, S, M, L, XL (map to 1, 2, 3, 5, 8)

Settings → Teams → Estimation:
- Points
- T-shirt
- Hours
- None

Pricing

Plans

Code
TEXT
Free:
├── Up to 250 issues
├── Unlimited members
├── Basic integrations
├── Mobile apps
└── Public API

Standard ($10/user/month):
├── Unlimited issues
├── Cycles
├── Roadmaps
├── All integrations
├── Custom workflows
├── Triage
└── Priority support

Plus ($15/user/month):
├── Everything in Standard
├── Advanced insights
├── SAML SSO
├── SCIM provisioning
├── Audit logs
├── Custom roles
└── 99.99% SLA

Enterprise (custom):
├── Everything in Plus
├── Dedicated support
├── Custom contracts
├── On-premise option
└── Advanced security

Comparison with Jira

Code
TEXT
Linear vs Jira - Total Cost of Ownership:

Linear Standard: $10/user/month
Jira Standard: $8.15/user/month (seems cheaper but...)

Hidden Jira costs:
+ Admin time for configuration
+ Plugin costs ($5-20/user)
+ Training (steep learning curve)
+ Performance issues (developer frustration)
+ Context switching (slow UI)

Real-world comparison:
10-person team, 1 year:

Linear:
$10 × 10 × 12 = $1,200/year
+ 0 hours setup
+ 1 hour training
= $1,200 + minimal time

Jira:
$8.15 × 10 × 12 = $978/year
+ 20 hours setup × $50/hr = $1,000
+ 10 hours training × $50/hr = $500
+ Plugins ~$500/year
+ Lost productivity (slow UI) = ???
= $2,978+ annually

FAQ - frequently asked questions

Does Linear have a free tier?

Yes, Linear offers a free plan for up to 250 issues with unlimited members. This is enough for small teams and side projects. Once you exceed the limit, you need to upgrade to Standard ($10/user/month).

How do I migrate from Jira?

Linear offers an official importer:

  1. Settings → Import → Jira
  2. Connect your Jira account
  3. Select projects to import
  4. Map statuses and labels
  5. Import (may take a while depending on the number of issues)

Linear migrates: issues, comments, attachments, labels, assignees.

Does Linear work offline?

Linear is web-first and requires an internet connection. However:

  • The PWA can be installed
  • The desktop app (Electron) caches data
  • Optimistic updates make it feel like you're working offline

How does Linear work for non-dev teams?

Linear is optimized for software teams. For other use cases:

  • Marketing/Sales → Notion, Asana
  • All-purpose → Monday, ClickUp
  • Design teams → Linear works well

Can I use Linear with GitLab/Bitbucket?

Yes, Linear has official integrations with GitLab and Bitbucket. The functionality is similar to GitHub - issue linking, auto-status changes.

How do I manage multiple teams?

Linear supports multiple teams within a single workspace:

  • Each team has its own backlog and workflow
  • Issues can be moved between teams
  • The roadmap shows all projects
  • Cross-team dependencies are supported

Summary

Linear is the ideal project management tool for software teams, offering:

  • Lightning-fast speed - Instant load, zero lag
  • Keyboard-first UX - Everything via shortcuts
  • Native GitHub - Deep integration with code
  • Cycles - Sprints without boilerplate
  • Roadmaps - Visual planning
  • Beautiful design - A pleasure to use

If you're tired of slow Jira or general-purpose tools like Asana - Linear is a game-changer for dev teams.