Plugins
Linear
Create, update, and track issues in Linear workspaces via GraphQL.
Authentication
| Type | Default | Details |
|---|---|---|
api_key | ✅ | Personal API Key (lin_...) |
oauth_2 | Linear OAuth flow |
Linear API tokens come in two flavors:
lin_*personal API keys — sent as a raw header value- OAuth
access_tokenstrings — sent asBearer <token>
The handler sniffs the prefix on ctx.key and formats accordingly.
Endpoints
| Path | Risk | Description |
|---|---|---|
issues.list | read | List issues. |
issues.get | read | Get a single issue. |
issues.create | write | Create an issue. |
issues.update | write | Update an issue. |
issues.delete | destructive | Delete an issue. |
teams.list | read | List teams. |
users.viewer | read | Get the authenticated user. |
issues.list
List issues with optional filtering.
Input:
| Field | Type | Description |
|---|---|---|
first | number | Max results (default: 25) |
filter | object | Linear issue filter |
Output: { issues: LinearIssue[] }
issues.get
Get a single issue by ID.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Issue UUID |
Output: LinearIssue
issues.create
Create a new issue.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
teamId | string | ✅ | Team UUID |
title | string | ✅ | Issue title |
description | string | Issue description (Markdown) | |
assigneeId | string | Assignee UUID | |
priority | number | Priority (0–4) |
Output: { issue: LinearIssue }
issues.update
Update an existing issue.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Issue UUID |
title | string | New title | |
description | string | New description | |
stateId | string | State UUID to transition to |
Output: { issue: LinearIssue }
issues.delete
Delete an issue.
Input:
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✅ | Issue UUID |
Output: { success: boolean }
teams.list
List teams in the workspace.
Input: None
Output: { teams: LinearTeam[] }
users.viewer
Get the currently authenticated user.
Input: None
Output: LinearUser
Usage
import { createFabric } from "@fabricorg/integrations";
import { linear } from "@fabricorg/integrations/plugins";
const fabric = createFabric({
plugins: [linear({ apiKey: process.env.LINEAR_API_KEY })],
});
// Create an issue
const { issue } = await fabric.linear.api.issues.create({
teamId: "a1b2c3d4-...",
title: "Fix auth regression",
description: "Users reporting 401s after token refresh",
priority: 2,
});
// List my team's open issues
const { issues } = await fabric.linear.api.issues.list({
filter: { state: { type: { eq: "started" } } },
});Webhooks
Linear webhooks are not yet implemented in this plugin.
Types
interface LinearIssue {
id: string;
identifier: string;
title: string;
description?: string;
url: string;
state?: { id: string; name: string; type: string };
team?: { id: string; key: string; name: string };
priority?: number;
createdAt: string;
}
interface LinearTeam {
id: string;
key: string;
name: string;
}
interface LinearUser {
id: string;
name: string;
email: string;
displayName: string;
}