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.
- π Bidirectional Sync: Keep Linear issues and Obsidian notes in perfect sync
- π Issue Creation: Convert markdown notes to Linear issues with inline tags and auto-fill
- π·οΈ Smart Tag Support: Use
@assignee/john,@status/done,@label/bug,@priority/1syntax - β‘ Real-time Autocomplete: Smart suggestions for users, statuses, labels, projects, and teams
- π¨ Color-coded Labels: Visual label organization with Linear's actual colors
- π Quick Edit: Edit Linear issues without leaving Obsidian
- π‘ Interactive Tooltips: Hover over issue links to see instant previews with actions
- βοΈ Intelligent Conflict Resolution: Smart detection and resolution of sync conflicts
- π€ Auto-fill from Expressions: Automatically populate issue fields from note content
- π·οΈ Dynamic Label Creation: Automatically create new labels when they don't exist
- π API Retry Logic: Robust API handling with exponential backoff
- βοΈ Granular Settings: Fine-tune autocomplete, tooltips, and auto-fill behavior
- π Kanban Generation: Auto-generate kanban boards from your Linear issues
- π Agenda Views: Create agenda notes with due dates and priorities
- π¬ Comment Mirroring: Sync Linear comments to your notes
- π Batch Operations: Bulk create/update issues across multiple notes
- π― Custom Status Mapping: Map Linear statuses to your preferred emojis
- π’ Multi-workspace Support: Handle multiple Linear organizations
- π Secure Token Storage: Encrypted API key management
- βοΈ Local Configuration: Per-folder
.linear.jsonconfig files - π Conflict Analytics: Track and analyze sync conflicts
- π― Advanced Filtering: Custom GraphQL queries and filters
- Download: Get the latest release from GitHub Releases
- Install: Extract to
.obsidian/plugins/linear-integration/in your vault - Enable: Go to Settings β Community Plugins β Enable "Linear Integration"
- Get API Key: Go to Linear Settings β API and create a Personal API Key
- Configure Plugin:
- Open Obsidian Settings β Linear Integration
- Enter your API key (
lin_api_...) - Click "Test Connection" to verify
- Select your default team
- Configure auto-fill and autocomplete settings
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 successfullyThen 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:
@team/Engineeringβ Auto-selects Engineering team - Assignee:
@assignee/john.doeβ Auto-assigns to John Doe - Priority:
@priority/1β Sets to Urgent priority - Status:
@status/In Progressβ Sets initial status - Labels:
@label/bug @label/urgentβ Creates and assigns labels
Use 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:
- Context-aware suggestions based on your Linear workspace
- Color-coded labels matching Linear's label colors
- Hierarchical label display (groups and child labels)
- Default value prioritization from local config
- Fuzzy matching for faster selection
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 colors
Create .linear.json files in any folder to customize behavior:
{
"workspace": "my-company",
"team": "engineering",
"project": "q4-roadmap",
"defaultAssignee": "john.doe@company.com",
"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.
- Comment Mirroring: Sync Linear comments to notes
- Kanban Generation: Auto-generate kanban boards
- Batch Operations: Enable bulk operations
- Secure Storage: Encrypt stored tokens
- Node.js 16+
- npm or yarn
- TypeScript 5.0+
# 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 cleansrc/
βββ 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
- π Bug Reports: Found an issue? Let us know!
- π‘ Feature Requests: Have an idea? We'd love to hear it!
- π§ Code Contributions: Submit PRs for fixes and features
- π§ͺ Testing: Help test new features and releases
This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- β Enhanced Autocomplete: Color-coded suggestions with hierarchical labels
- β Auto-fill from Expressions: Smart field population from note content
- β Dynamic Label Creation: Automatically create non-existent labels
- β Improved Tag Syntax: Support for spaces in names and new tag types
- β Interactive Tooltips: Hover previews with quick actions
- β Custom Status Mapping: Easy emoji customization with modal interface
- β API Retry Logic: Robust error handling with exponential backoff
- β Enhanced UI: Loading states and better user feedback
- Webhooks: Real-time updates via Linear webhooks
- Advanced Querying: Custom GraphQL query builder
- Team Dashboards: Team-specific views and metrics
- Workflow Automation: Custom automation rules
- Mobile Support: Enhanced mobile experience
- Integrations: Slack, Discord, email notifications
- AI-Powered Suggestions: Smart issue categorization and assignment
β Star us on GitHub | π Report Issues
Made with β€οΈ for the Obsidian and Linear communities