OmniFocus Bridge

unlisted

by Christian Reinhardt

Sync OmniFocus 4 Pro projects and tasks into your vault and write changes back.

Updated 2d agoMIT
View on GitHub

OmniFocus Bridge logo — a checked task linked by a bridge to a note

OmniFocus Bridge

Bidirectional sync between OmniFocus 4 Pro and Obsidian.

Obsidian plugin macOS only Requires OmniFocus 4 Pro MIT license


An Obsidian plugin that mirrors your OmniFocus projects, tasks, and tags into your vault as markdown, and writes completions, flags, and dates back to OmniFocus.

Features

  • One-way sync: OmniFocus to Obsidian -- projects, tasks, and tags with full folder hierarchy
  • Write-back: Complete tasks, toggle flags, set due/defer dates directly from Obsidian
  • Quick Add: Create new OmniFocus tasks without leaving Obsidian
  • Side panel: An OmniFocus view with Today, Inbox, Projects, and Dashboard tabs
  • Auto-sync: Configurable interval (1m / 5m / 15m / 30m), plus sync on startup and on file open
  • Incremental sync: Only updates changed projects, keeping syncs fast
  • Dashboard: Auto-generated overview with overdue, due today, due this week, and flagged sections
  • Daily Note integration: Insert a daily task summary at the cursor position
  • Codeblock views: Use omnifocus fenced code blocks for filtered, live task views
  • Rich rendering: Emoji metadata, sorted tasks, frontmatter compatible with Dataview

Requirements

  • macOS (the plugin uses OmniFocus's Automation API via osascript)
  • OmniFocus 4 Pro (the Pro edition is required for JavaScript automation)
  • Obsidian Desktop (v1.0.0 or later)

Installation

OmniFocus Bridge is not yet in the Obsidian Community plugins directory (submission pending), so searching for it inside Obsidian won't find it yet. Install it from a release instead.

Install from a release

  1. Download main.js, manifest.json, and styles.css from the latest release
  2. Create a folder called omnifocus-bridge inside your vault's .obsidian/plugins/ directory
  3. Copy the downloaded files into that folder
  4. Restart Obsidian and enable OmniFocus Bridge in Settings > Community plugins (turn off Restricted mode first if it's on)

Build from source

Requires Node.js and git.

git clone https://github.com/XyndoX/omnifocus-sync.git
cd omnifocus-sync
npm install
npm run build

Then copy main.js, manifest.json, and styles.css from the repo root into <vault>/.obsidian/plugins/omnifocus-bridge/ and enable the plugin as above.

Usage

First Sync

  1. Open Settings > OmniFocus Bridge
  2. Click Test Connection to verify OmniFocus is running and accessible
  3. Click Sync now or use Cmd+P and search for OmniFocus Bridge: Sync now

Your OmniFocus projects will appear as markdown files inside the sync folder (default: OmniFocus/).

Commands

Open the command palette (Cmd+P) and search for any of the following:

CommandDescription
Sync nowPull latest data from OmniFocus and update markdown files
Open sync folderOpen the dashboard (or the first note) in the sync folder
Open panelOpen the OmniFocus side panel (Today, Inbox, Projects, Dashboard)
Generate dashboardCreate or update Dashboard.md with overdue, due today, due this week, and flagged task sections
Quick add taskOpen a modal to create a new task in OmniFocus (auto-detects project from current file)
Complete/reopen taskToggle the completion state of the task on the current line
Toggle flagFlag or unflag the task on the current line
Set due dateSet or clear the due date for the task on the current line
Set defer dateSet or clear the defer date for the task on the current line
Open task in OmniFocusOpen the task on the current line directly in OmniFocus
Insert daily summaryInsert a summary of today's due, overdue, and flagged tasks at the cursor

Codeblock Views

Add an omnifocus fenced code block to any note for a live, filtered task view:

```omnifocus
view: due-today
```

Available Views

ViewDescription
all-activeAll incomplete tasks (default)
due-todayTasks due today or overdue
due-this-weekTasks due within the next 7 days
flaggedFlagged tasks only
projectTasks from a specific project (requires project: parameter)

Options

OptionValuesDefaultDescription
viewsee aboveall-activeWhich tasks to display
formatlist, tablelistRender as checkbox list or HTML table
showcomma-separated columnsname,dueDate,project,tagsColumns to show in table format
projectproject name--Filter to a specific project (used with view: project)

Valid columns for show: name, dueDate, deferDate, project, tags, estimate, flagged.

Examples

Flagged tasks as a table:

```omnifocus
view: flagged
format: table
show: name, dueDate, project
```

Tasks from a specific project:

```omnifocus
view: project
project: Home Renovation
```

Settings

SettingDescriptionDefault
Sync folderVault folder where OmniFocus data is storedOmniFocus
Tag prefixPrefix for OmniFocus tags (e.g., #of/TagName)of
Sync intervalAuto-sync frequency: Manual, 1m, 5m, 15m, or 30mManual
Sync on startupAutomatically sync when Obsidian startsOff
Show due dateDisplay due dates on task linesOn
Show tagsDisplay OmniFocus tags on task linesOn
Show time estimateDisplay estimated time on task linesOn
Show OmniFocus linkAdd a deep link that opens the task in OmniFocusOff

How It Works

The plugin communicates with OmniFocus through its JavaScript for Automation (JXA) API via macOS osascript. It reads projects, tasks, and tags from OmniFocus, then writes them as markdown files with frontmatter metadata into your vault. Checkbox changes in the synced files are detected and written back to OmniFocus automatically.

Each task line includes an invisible HTML comment anchor (<!-- of:taskId -->) that links the markdown checkbox to its OmniFocus counterpart.

Permissions and privacy

  • Runs osascript (Node.js child_process) to talk to OmniFocus on your Mac. That is the only external program it runs. The script is passed over stdin, so nothing is written to disk outside your vault.
  • Inside your vault it only creates and updates notes in the sync folder (default OmniFocus/) and its own plugin data.
  • No network access, no telemetry, no accounts. Everything stays between OmniFocus and Obsidian on your machine.

FAQ

Q: Does this work on Windows, Linux, or mobile? A: No. OmniFocus is macOS/iOS only, and the plugin requires macOS Desktop for its Automation API. On other platforms, the plugin loads but gracefully disables itself with a notice.

Q: Do I need OmniFocus Pro? A: Yes. The free and Standard editions do not support the JavaScript automation API that this plugin uses.

Q: What happens if OmniFocus is not running? A: The plugin will show a clear error message asking you to open OmniFocus. No data is lost.

Q: Is OmniFocus the source of truth? A: Yes. OmniFocus owns the project structure, task creation, and most metadata. The plugin syncs that structure into Obsidian. You can complete tasks, toggle flags, and set dates from Obsidian, and those changes are written back immediately.

Q: Can I use this with Dataview? A: Yes. Every synced file includes frontmatter fields (omnifocus-project-id, omnifocus-status, omnifocus-last-sync) that Dataview can query.

License

MIT

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.