FabricFabricSDK
Plugins

Linear

Create, update, and track issues in Linear workspaces via GraphQL.

Authentication

TypeDefaultDetails
api_keyPersonal API Key (lin_...)
oauth_2Linear OAuth flow

Linear API tokens come in two flavors:

  • lin_* personal API keys — sent as a raw header value
  • OAuth access_token strings — sent as Bearer <token>

The handler sniffs the prefix on ctx.key and formats accordingly.

Endpoints

PathRiskDescription
issues.listreadList issues.
issues.getreadGet a single issue.
issues.createwriteCreate an issue.
issues.updatewriteUpdate an issue.
issues.deletedestructiveDelete an issue.
teams.listreadList teams.
users.viewerreadGet the authenticated user.

issues.list

List issues with optional filtering.

Input:

FieldTypeDescription
firstnumberMax results (default: 25)
filterobjectLinear issue filter

Output: { issues: LinearIssue[] }

issues.get

Get a single issue by ID.

Input:

FieldTypeRequiredDescription
idstringIssue UUID

Output: LinearIssue

issues.create

Create a new issue.

Input:

FieldTypeRequiredDescription
teamIdstringTeam UUID
titlestringIssue title
descriptionstringIssue description (Markdown)
assigneeIdstringAssignee UUID
prioritynumberPriority (0–4)

Output: { issue: LinearIssue }

issues.update

Update an existing issue.

Input:

FieldTypeRequiredDescription
idstringIssue UUID
titlestringNew title
descriptionstringNew description
stateIdstringState UUID to transition to

Output: { issue: LinearIssue }

issues.delete

Delete an issue.

Input:

FieldTypeRequiredDescription
idstringIssue 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;
}