Daniel Simpson205 downloadsSync references/links to Google Tasks, Gmail Starred, Microsoft To Do, Outlook flagged mail, Azure DevOps work items, Firefox Bookmarks, and Todoist into your vault.
Obsidian plugin to sync references/links to Google Tasks, Gmail Starred, Microsoft To Do, Microsoft Outlook, Azure DevOps, Firefox Bookmarks, and Todoist into your vault.
Site: obsidiansyncer.com · Privacy Policy · Terms of Service
This plugin fetches data from external sources and syncs references/links to them into a target Markdown document under a configurable heading. Supported sources are Google Tasks, Gmail Starred, Microsoft To Do, Microsoft Outlook (flagged mail), Azure DevOps (assigned work items), Firefox Bookmarks (desktop), and Todoist. Inspired by Getting Things Done (GTD), but equally suited to any workflow based on to-do lists or Kanban boards. Designed to integrate well with the Obsidian Kanban plugin and the Obsidian Tasks plugin.

oauth-clients.prod.jsonsqlite3 or Python is available to merge the places WAL; otherwise close Firefox briefly and sync againInstall Syncer from Obsidian’s Community plugins browser, or from the Community directory.
Use BRAT in a dedicated vault (not one with Community Plugin Syncer already enabled — same plugin id). Add desimpson/syncer in latest mode; BRAT installs the highest semver release including prereleases (e.g. 0.5.0-beta.1), not GitHub’s “Latest” stable badge.
Vault/.obsidian/plugins/syncer/manifest.jsonmain.jsstyles.cssOpen Obsidian settings and navigate to Community plugins → Syncer.
GTD tip: The plugin ships with sensible defaults for a GTD-style setup—GTD.md as the target file and ## Inbox as the heading. You can keep these for a classic capture inbox, or change them to suit your workflow.
## …)[x] to write back before Syncer reconciles against the incomplete remote feed (otherwise a still-open remote task can uncheck the card in place).build:dev needs oauth-clients.dev.json)POST https://api.todoist.com/oauth/register (token_endpoint_auth_method: none, scope data:read_write, grant types authorization_code + refresh_token). Include logo_uri (https://obsidiansyncer.com/logo.png) and client_uri (https://obsidiansyncer.com). The App Management Console only creates confidential clients, which require a client_secret Syncer cannot ship, and it cannot brand DCR clients.http://localhost:27855/, http://localhost:27856/, http://localhost:27857/tdd_… client ID in oauth-clients.prod.json. Use oauth-clients.dev.json (copied from oauth-clients.dev.json.example) for local build:dev only. After changing a client ID, Disconnect and Connect again.logo_uri, then swap the client ID. There is no Todoist CLI for this.One mark, reused on every consent screen. Do not invent a second logo.
| File | Size | Use |
|---|---|---|
site/favicon.svg |
vector | Source / tab icon |
site/logo.png |
512×512 | Google OAuth consent (120×120 minimum), Microsoft Entra branding, and Todoist logo_uri (https://obsidiansyncer.com/logo.png) |
docs/branding/logo-300.png |
300×300 | Local 300² export if a console asks for that size |
https://dev.azure.com/your-org, or paste the full URL and Syncer will extract the name)profiles.ini (this reads files outside the vault — see Privacy and disclosures)~/.mozilla/firefox/<profile>/ or ~/.config/mozilla/firefox/<profile>/~/Library/Application Support/Firefox/Profiles/<profile>/%APPDATA%\Mozilla\Firefox\Profiles\<profile>\sqlite3 CLI so the plugin can merge the live database)Manual sync: Triggers a once-off sync and restarts the schedulerOpen sync document: Opens the configured sync note, revealing an existing pane if it is already openContributor/agent notes for architecture and sync rules live in docs/kb/.
For contribution guidelines, see CONTRIBUTING.md.
Install dependencies, then build with esbuild.
npm clean-install
npm run build:dev
Build scripts set BUILD_ENV automatically (dev, staging, prod). If you invoke esbuild.config.mjs directly, set BUILD_ENV explicitly.
Set OAuth client IDs for local build:dev to enable Connect. build:dev now requires a local oauth-clients.dev.json; copy oauth-clients.dev.json.example → oauth-clients.dev.json first (empty IDs are allowed and simply disable matching Connect actions). Google Connect needs your own Desktop client (ID and secret) — dev creds are never committed; obsidiansyncer-dev is the maintainer’s personal project (see docs/kb/gotchas.md). After changing Google client ID or secret, Disconnect and Connect again.
Run tests with coverage (floor + report): npm run test:coverage.
Sync to your vault with:
npm run sync
You will need to create a dev Obsidian vault and set the OBSIDIAN_VAULT_PLUGIN_DIR_DEV variable in a .envrc file to use the sync script. See .envrc.example for an example.
It is also recommended to install the Hot-Reload plugin for automatic reloads.
This section is for Obsidian developer policy review and for users who want to know what the plugin contacts before installing.
Hosted copies used for Google OAuth verification: homepage, Privacy Policy, and Terms of Service.
Syncer is a local plugin: it does not run a Syncer backend, proxy, or hosted API. Data access is limited to the integrations you enable:
accounts.google.com, oauth2.googleapis.com, www.googleapis.com, tasks.googleapis.com, gmail.googleapis.comlogin.microsoftonline.com, graph.microsoft.comapp.todoist.com, api.todoist.comdev.azure.com[!WARNING] Outside-vault filesystem access (Firefox Bookmarks). Community plugins are expected to stay inside the vault. Firefox stores bookmarks in the browser profile, so this desktop integration must read
profiles.ini,places.sqlite, and WAL sidecars outside the vault: the selected path, or auto-detect under~/.mozilla/firefox,~/.config/mozilla/firefox, Snap, Flatpak, and the macOS/Windows folders listed in Firefox Bookmarks. Copies go to a temporary directory only. Syncer does not write back to the live Firefox database. See SECURITY.md for details.
No third-party UI components are currently bundled in the settings tab.
Release tags match [0-9]* (no v prefix), e.g. 0.2.1 or 0.5.0-beta.1.
Stable release (x.y.z): prod build (oauth-clients.prod.json), GitHub Environment prod approval gate, non-prerelease publish.
Staging prerelease (tag contains -beta., e.g. 0.5.0-beta.1): staging build (oauth-clients.staging.json), no prod gate, GitHub prerelease flag.
Do not tag stable 0.5.0 until #121 approves Google OAuth verification. An accidental stable outranks staging betas in BRAT latest; tell testers to switch to frozen at the last good beta until the mistake is fixed.
npm version patch|minor|major (or npm version x.y.z / npm version x.y.z-beta.n). This updates package.json / manifest.json / versions.json, commits, and creates an annotated git tag (required). Do not use git tag x.y.z without -a — git push --follow-tags only pushes annotated tags.npm run build (prod); beta → npm run build:stagingnpm run release:check (fails if the version tag exists but is lightweight)git cat-file -t x.y.z must print tag (not commit). If you ever need a manual tag: git tag -a x.y.z -m "x.y.z".git push --follow-tags. If --follow-tags skips the tag, push it explicitly: git push origin x.y.z.main.js, manifest.json, styles.css, and the generated attestation bundle