casals563 downloadsSync Linear (https://linear.app) issues with notes. Create, update, and track Linear issues directly from your vault.
A comprehensive Linear integration plugin for Obsidian that provides seamless bidirectional synchronization between your notes and Linear issues. Create, sync, and manage Linear issues directly from Obsidian with advanced features like autocomplete, conflict resolution, and automatic label creation.
@assignee/john, @status/done, @label/bug, @priority/1 syntax.linear.json config files.obsidian/plugins/linear-integration/ in your vaultlin_api_...)Add inline tags to any note:
# Bug: Login validation not working
@team/Engineering @assignee/sarah.jones @priority/1 @status/In Progress @label/critical @label/frontend
The login form doesn't validate email addresses properly when users enter malformed addresses.
Steps to reproduce:
1. Navigate to login page
2. Enter invalid email format
3. Submit form
Expected: Validation error shown
Actual: Form submits successfully
Then run the "Create Linear Issue from Note" command or use Ctrl/Cmd + P → "Linear: Create Issue".
Enable "Auto-fill from Note Expressions" in settings to automatically populate issue fields:
@team/Engineering → Auto-selects Engineering team@assignee/john.doe → Auto-assigns to John Doe @priority/1 → Sets to Urgent priority@status/In Progress → Sets initial status@label/bug @label/urgent → Creates and assigns labelsUse the sync button in the ribbon or run "Sync Linear Issues" command to pull your Linear issues into Obsidian.
| Tag Type | Syntax | Example | Auto-complete |
|---|---|---|---|
| Team | @team/team-name |
@team/Engineering |
✅ |
| Assignee | @assignee/username |
@assignee/john.doe |
✅ |
| Status | @status/status-name |
@status/In Progress |
✅ |
| Priority | @priority/number |
@priority/1 |
✅ |
| Project | @project/project-name |
@project/Q4 Roadmap |
✅ |
| Labels | @label/label-name |
@label/bug @label/urgent |
✅ |
Note: All tags support spaces in names (e.g., @assignee/John Doe, @status/In Review)
The plugin provides intelligent autocomplete with:
Type any of the tag prefixes and see instant suggestions:
@team/ → Shows all available teams@assignee/ → Shows all team members@status/ → Shows workflow states@label/ → Shows existing labels with colorsCreate .linear.json files in any folder to customize behavior:
{
"workspace": "my-company",
"team": "engineering",
"project": "q4-roadmap",
"defaultAssignee": "[email protected]",
"defaultPriority": 3,
"autoSync": true,
"labels": [
"frontend",
"backend",
"bug-fix"
],
"template": "# {{title}}\n\n**Status:** {{status}} | **Priority:** {{priority}}\n**Assignee:** {{assignee}} | **Team:** {{team}}\n\n## Context\n{{description}}\n\n## Acceptance Criteria\n- [ ] \n\n## Notes\n\n\n---\n*Linear: [{{identifier}}]({{url}}) | Last synced: {{lastSync}}*",
"syncRules": {
"bidirectional": true,
"conflictResolution": "manual",
"includeComments": true
},
"display": {
"showTooltips": true,
"enableQuickEdit": true,
"statusIcons": {
"Backlog": "📋",
"Todo": "📝",
"In Progress": "🔄",
"In Review": "👀",
"Done": "✅",
"Canceled": "❌"
}
}
}
The plugin automatically manages frontmatter for synced notes:
---
linear_id: "issue-uuid"
linear_identifier: "ENG-123"
linear_status: "In Progress"
linear_assignee: "John Doe"
linear_team: "Engineering"
linear_url: "https://linear.app/issue/ENG-123"
linear_created: "2024-01-15T10:30:00Z"
linear_updated: "2024-01-16T14:22:00Z"
linear_last_synced: "2024-01-16T14:25:00Z"
linear_priority: 1
linear_estimate: 5
linear_labels: ["bug", "frontend", "critical"]
---
Customize note generation with template variables:
# {{title}}
**Status:** {{status}} | **Priority:** {{priority}}
**Assignee:** {{assignee}} | **Team:** {{team}}
**Created:** {{created}} | **Updated:** {{updated}}
## Description
{{description}}
## Acceptance Criteria
- [ ]
## Notes
---
*Linear: [{{identifier}}]({{url}}) | Last synced: {{lastSync}}*
Available variables:
{{title}}, {{description}}, {{status}}, {{assignee}}{{team}}, {{priority}}, {{estimate}}, {{created}}{{updated}}, {{identifier}}, {{url}}, {{lastSync}}| Setting | Description | Default |
|---|---|---|
| API Key | Your Linear Personal API Key | - |
| Default Team | Default team for new issues | - |
| Sync Folder | Folder for Linear notes | "Linear Issues" |
| Auto Sync | Sync on startup | false |
| Sync Interval | Minutes between auto-syncs | 15 |
| Auto-fill from Expressions | Parse note content to pre-fill modal | true |
| Autocomplete Enabled | Enable smart autocomplete | true |
| Quick Edit Enabled | Enable quick edit modals | true |
| Tooltips Enabled | Show interactive tooltips | true |
| Conflict Resolution | How to handle conflicts | "manual" |
Customize how Linear statuses appear in your notes:
| Linear Status | Default Icon | Customizable |
|---|---|---|
| Todo | 📋 | ✅ |
| In Progress | 🔄 | ✅ |
| Done | ✅ | ✅ |
| Canceled | ❌ | ✅ |
Use the "Add Custom Status Mapping" button to add new status → emoji mappings.
# Clone the repository
git clone https://github.com/your-username/obsidian-linear-plugin.git
cd obsidian-linear-plugin
# Install dependencies
npm install
# Start development
npm run dev
# Build for production
npm run build
# Run TypeScript checks
npm run typecheck
# Lint code
npm run lint
# Clean build artifacts
npm run clean
src/
├── api/ # Linear API client with retry logic
│ └── linear-client.ts
├── features/ # Plugin features
│ ├── autocomplete-system.ts # Smart autocomplete with colors
│ ├── conflict-resolver.ts # Intelligent conflict handling
│ └── local-config-system.ts # Per-folder configuration
├── models/ # TypeScript types and interfaces
│ └── types.ts
├── parsers/ # Markdown and expression parsing
│ └── markdown-parser.ts
├── sync/ # Bidirectional sync management
│ └── sync-manager.ts
├── ui/ # User interface components
│ ├── issue-modal.ts # Enhanced issue creation modal
│ └── settings-tab.ts # Plugin settings with custom modals
├── utils/ # Utilities and helpers
│ └── frontmatter.ts
│ └── debug.ts
└── main.ts # Main plugin entry point
This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.
⭐ Star us on GitHub | 🐛 Report Issues
Made with ❤️ for the Obsidian and Linear communities