Last updated: March 15, 2026

Install the official Linear browser extension to create issues from any webpage without context switching and preview issues directly in GitHub PRs. Linear is popular among development teams for its clean interface and GitHub integration, but Chrome extensions add capabilities that improve workflow efficiency—create issues without switching tabs, view issue previews in PRs, and access notifications directly in Chrome. This guide covers practical Linear extensions and how to integrate them into your daily development routine.

Table of Contents

Why Use Chrome Extensions with Linear

Linear’s web application works well, but browser extensions add capabilities that improve productivity for developers who spend significant time in Chrome. These extensions can:

Practical Chrome Extensions for Linear

1. Linear - Issues & Projects

The official Linear browser extension provides core functionality directly in Chrome. After installing, you can create issues, view your inbox, and access recent projects without opening a new tab.

Installation: Search for “Linear” in the Chrome Web Store or visit linear.app/downloads. Sign in with your Linear account to activate the extension.

Key Features:

When you click the extension icon, a popup appears showing your inbox count and recent issues. This works well for a quick status check between coding sessions.

2. GitHub Linear Issue Connector

This extension bridges GitHub pull requests with Linear issues. When viewing a PR that references a Linear issue (like LINE-123), the extension displays the issue status directly in the GitHub UI.

Use Case: You’re reviewing a PR and want to check if the linked issue is already resolved. Instead of opening Linear in a new tab, you see the issue status inline.

// The extension detects patterns like LINEAR-123 in PR descriptions
// and fetches issue status from the Linear API
const issuePattern = /LINEAR-\d+/g;
const matches = prDescription.match(issuePattern);
// Displays issue status badge next to PR title

This is particularly useful for code reviewers who want to verify issue completion without context switching.

3. Linear Quick Add

Quick Add extensions let you create issues from anywhere in Chrome using a keyboard shortcut. This works when you’re viewing documentation, a bug report, or any page that contains actionable information.

Workflow:

  1. Navigate to a page with relevant information
  2. Press Cmd+Shift+Y to open the quick-add dialog
  3. The extension pre-fills the page URL and selected text as the issue description
  4. Add a title, select project and labels, then create

This eliminates copy-pasting between tabs. The URL serves as context, making issues more actionable for whoever receives them.

4. Custom Extension: Issue Linker

For teams with specific workflows, building a custom Chrome extension that communicates with Linear’s API offers maximum flexibility. Here’s a basic implementation:

// manifest.json
{
  "manifest_version": 3,
  "name": "Linear Issue Linker",
  "version": "1.0",
  "permissions": ["activeTab", "storage"],
  "host_permissions": ["https://linear.app/*"],
  "background": {
    "service_worker": "background.js"
  }
}

// background.js - Quick issue creation
chrome.action.onClicked.addListener(async (tab) => {
  const issueData = {
    title: "Issue from: " + tab.title,
    description: "Source: " + tab.url,
    teamId: "YOUR_TEAM_ID"
  };

  // Make API call to Linear
  const response = await fetch("https://api.linear.app/graphql", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": "YOUR_API_KEY"
    },
    body: JSON.stringify({
      query: `
        mutation CreateIssue($input: IssueCreateInput!) {
          issueCreate(input: $input) {
            success
            issue {
              identifier
              url
            }
          }
        }
      `,
      variables: { input: issueData }
    })
  });
});

This example creates an issue from the current page’s title and URL. Extend it to capture selected text, add labels, or assign to team members based on page content.

Setting Up Your Extension Workflow

Authentication

Most extensions require a Linear API key or OAuth connection. To generate an API key:

  1. Open Linear and go to Settings → API
  2. Click “Create new key”
  3. Set appropriate permissions (read/write based on needs)
  4. Store the key securely—never commit it to repositories

Keyboard Shortcuts

Custom keyboard shortcuts make extensions feel native. Check the extension settings page (chrome://extensions/shortcuts) to configure:

Action Recommended Shortcut
Quick add issue Cmd+Shift+I
Open Linear Cmd+Shift+L
Search issues Cmd+Shift+F

Integration with Development Workflow

Combine extensions with your existing tools for maximum efficiency:

Code Review: Use the GitHub connector to see Linear issue status while reviewing PRs. If the issue is marked “In Progress,” request changes before merging.

Bug Reporting: When users report bugs in your app, use Quick Add to create issues immediately while the context is fresh. Include the URL and any console errors.

Documentation: Create issues for outdated documentation directly from docs.linear.app or your own wikis.

Limitations and Alternatives

Chrome extensions work within browser constraints. For deeper integration, consider:

Extensions work best for quick actions and context-aware issue creation. Reserve complex issue management for the full Linear interface.

Building Your Custom Extension: Complete Example

For teams wanting tighter Linear integration, building a simple custom extension beats any off-the-shelf solution:

{
  "manifest_version": 3,
  "name": "Linear Issue Creator",
  "version": "1.0.0",
  "description": "Create Linear issues from anywhere in Chrome",
  "permissions": [
    "activeTab",
    "scripting",
    "storage",
    "webRequest"
  ],
  "host_permissions": [
    "https://linear.app/*",
    "https://api.linear.app/*",
    "https://*/*"
  ],
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "images/linear-16.png",
      "48": "images/linear-48.png",
      "128": "images/linear-128.png"
    }
  },
  "background": {
    "service_worker": "background.js"
  },
  "commands": {
    "open-creator": {
      "suggested_key": {
        "default": "Ctrl+Shift+I",
        "mac": "Cmd+Shift+I"
      },
      "description": "Create a new Linear issue"
    }
  }
}

Create popup.html:

<!DOCTYPE html>
<html>
<head>
  <style>
    body { font-family: system-ui; width: 400px; padding: 16px; }
    input, textarea, select { width: 100%; padding: 8px; margin: 8px 0; }
    button { background: #0066ff; color: white; padding: 10px; width: 100%; }
  </style>
</head>
<body>
  <h2>Create Issue</h2>
  <input id="title" type="text" placeholder="Issue title">
  <textarea id="description" placeholder="Description"></textarea>
  <select id="team">
    <option value="">Select team...</option>
  </select>
  <select id="priority">
    <option value="0">No priority</option>
    <option value="1">Urgent</option>
    <option value="2">High</option>
    <option value="3">Medium</option>
    <option value="4">Low</option>
  </select>
  <button id="create">Create Issue</button>
  <div id="status"></div>
  <script src="popup.js"></script>
</body>
</html>

Create popup.js:

const API_KEY = 'YOUR_LINEAR_API_KEY'; // Store in Chrome storage in production

document.getElementById('create').addEventListener('click', async () => {
  const title = document.getElementById('title').value;
  const description = document.getElementById('description').value;
  const teamId = document.getElementById('team').value;
  const priority = parseInt(document.getElementById('priority').value);

  if (!title || !teamId) {
    document.getElementById('status').textContent = 'Please fill in all fields';
    return;
  }

  const query = `
    mutation CreateIssue($input: IssueCreateInput!) {
      issueCreate(input: $input) {
        issue {
          id
          identifier
          url
          title
        }
        success
      }
    }
  `;

  try {
    const response = await fetch('https://api.linear.app/graphql', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        query,
        variables: {
          input: {
            title,
            description,
            teamId,
            priority
          }
        }
      })
    });

    const data = await response.json();
    if (data.data?.issueCreate?.success) {
      const issue = data.data.issueCreate.issue;
      document.getElementById('status').innerHTML =
        `✓ Created <a href="${issue.url}" target="_blank">${issue.identifier}</a>`;
      // Clear form
      document.getElementById('title').value = '';
      document.getElementById('description').value = '';
    } else {
      document.getElementById('status').textContent = 'Error creating issue';
    }
  } catch (error) {
    document.getElementById('status').textContent = `Error: ${error.message}`;
  }
});

// Load teams on popup open
chrome.storage.local.get(['teams'], (result) => {
  if (result.teams) {
    const select = document.getElementById('team');
    result.teams.forEach(team => {
      const option = document.createElement('option');
      option.value = team.id;
      option.textContent = team.name;
      select.appendChild(option);
    });
  }
});

Store your API key securely:

# Never commit the actual key. Instead, create an options page where users provide their key
# Or use environment variables during build:
export LINEAR_API_KEY="your_key_here"
npm run build

Linear Extension Workflow Optimization

Once you have extensions installed, optimize your daily workflow:

Suggested keyboard shortcut mapping:

Browser bookmark bar organization:

Linear |
├── My Issues
├── Backlog
├── Search
└── Team

Each bookmark links to a filtered Linear view (e.g., https://linear.app/team/issues?filter=assignee:me).

Workflow templates for common activities:

When researching a bug, create an issue immediately with:

When reviewing documentation, create issues for:

When in code review, before commenting on a PR:

Performance Tips for Extension Users

Extensions can slow browser startup if not optimized:

For teams of developers sharing a custom extension, publish to your internal Chrome Web Store:

# Create a .crx file for distribution
# Upload to your internal store at chrome.google.com/webstore (requires developer account)
# Or use policies to force install via chrome policies JSON

Comparison: Extensions vs. Native Apps

Feature Extension Linear App VS Code Extension
Create issue ✓ Fast ✓ Full featured ✓ Context aware
View details △ Limited ✓ Full ✓ Full
Keyboard shortcuts ✓ Global ✓ App only ✓ Global
Notification integration △ Browser ✓ System ✓ IDE integrated
Offline access △ Limited △ Limited
Setup complexity Medium None Low

Most efficient teams use Chrome extension + VS Code extension together.

Frequently Asked Questions

How long does it take to complete this setup?

For a straightforward setup, expect 30 minutes to 2 hours depending on your familiarity with the tools involved. Complex configurations with custom requirements may take longer. Having your credentials and environment ready before starting saves significant time.

What are the most common mistakes to avoid?

The most frequent issues are skipping prerequisite steps, using outdated package versions, and not reading error messages carefully. Follow the steps in order, verify each one works before moving on, and check the official documentation if something behaves unexpectedly.

Do I need prior experience to follow this guide?

Basic familiarity with the relevant tools and command line is helpful but not strictly required. Each step is explained with context. If you get stuck, the official documentation for each tool covers fundamentals that may fill in knowledge gaps.

Can I adapt this for a different tech stack?

Yes, the underlying concepts transfer to other stacks, though the specific implementation details will differ. Look for equivalent libraries and patterns in your target stack. The architecture and workflow design remain similar even when the syntax changes.

Where can I get help if I run into issues?

Start with the official documentation for each tool mentioned. Stack Overflow and GitHub Issues are good next steps for specific error messages. Community forums and Discord servers for the relevant tools often have active members who can help with setup problems.