Free self-hosted Obsidian sync server and web app
The InventTasks sync server is free and self-hosted. It gives you free Obsidian sync for a whole vault on hardware you control, and it serves a web app that opens your entire vault in any browser — even on a machine with no Obsidian installed. Running it costs nothing beyond the machine it runs on; there is no per-device fee and no subscription.
InventTasks remains local-first when sync is enabled: devices keep ordinary files and work offline, while your self-hosted server relays changes, keeps bounded history, provides backups, and hosts the Web app. The server is intended for one person's devices or several isolated user accounts, not simultaneous team editing of the same task.
Using the server requires the InventTasks plugin as the desktop/mobile client, and the free plugin tier is enough for whole-vault Vault sync — a Pro license governs task-manager capacity, not sync.
Deploy the server#
Download the ready-to-use server bundle from https://inventtasks.solidinvent.pl/download/inventtasks-server.zip. It includes Docker Compose, Caddy configuration, maintenance scripts, and detailed deployment instructions. The bundle pulls the published multi-architecture image ghcr.io/solidinvent-dev/inventtasks-server:latest; pin a release tag when you want predictable upgrades. The container listens on port 8480 and stores SQLite data plus file blobs in /data.
- Create a persistent volume for
/data. - On the first start, set
ADMIN_USERand anADMIN_PASSWORDof at least eight characters. These bootstrap the first account only when the database has no accounts. - Put Caddy, Traefik, Nginx, or another reverse proxy in front of the container. Use HTTPS whenever traffic leaves the local machine or a trusted private network; workspace tokens are bearer credentials.
- Open the server URL, sign in, and create a Task manager or Vault object. Its sync token is displayed once; store it in a password manager. Rotation invalidates the previous token.
The emergency ADMIN_RESET=1 option resets ADMIN_USER from ADMIN_PASSWORD on the next start; remove it and restart immediately afterwards. Set ENABLE_VAULT_SYNC=0 if new Vault objects must be disabled. Useful capacity settings include MAX_FILE_MB (50 MB by default) and MAX_WORKSPACE_MB (unlimited by default).
The dashboard can export a current-files or full-history ZIP, import a ZIP in merge or replace mode, restore deleted files, and run or schedule backups. Scheduled backups can run daily at a fixed hour or every N hours and retain a chosen number of copies below BACKUP_DIR. The deployment bundle also includes a readable-export tool that converts /data or a server backup into an ordinary Obsidian vault, with optional history, content-only output, relative links, due-time filenames, and English or Polish headings.
For a reliable infrastructure backup, use these exports/backups or take a consistent snapshot of /data while the service is stopped; do not rely on copying a live SQLite directory without snapshot consistency. Check /healthz after deployment and upgrades.
Sync an InventTasks workspace#
Create a server object of type Task manager, then open Settings → InventTasks → File sync (self-hosted) for that local workspace:
| Field | Meaning |
|---|---|
| Enable sync | Starts background reconciliation for files below this InventTasks workspace root |
| Server URL | For example, https://sync.example.com |
| API token | The one-time sync token from the server dashboard; this is not an External API key |
| Server workspace ID | The ID of the Task manager object; use the same ID on every device sharing it |
| Full check interval | Periodic full scan (1–120 minutes); local edits are queued sooner |
| Live updates | Keeps a WebSocket connection so other-device changes are discovered promptly |
| Keep conflict copies | Also writes the losing local version next to the file after a conflict |
Use Test connection, then Sync now. The first non-empty pairing asks whether to merge, overwrite the server, overwrite local files, or cancel; Merge is the safest usual choice. A new empty server accepts the first local upload directly.
When two devices change the same file, the newer modification time wins and the losing content is stashed in server version history. History is finite: defaults are 30 days and 20 versions per path, configurable by the server operator. A mass-deletion guard pauses a suspicious pull and lets you restore server files, accept the deletion locally, or decide later. Optional conflict copies provide another local safety net but are not a substitute for backups.
Browse and restore earlier versions from Settings → File sync → Version history, or use the restore command in the command palette. Restoring a version first preserves the displaced current content in history when retention permits.
Free self-hosted Obsidian vault sync#
Vault sync is independent of the task workspace and can be used even when no InventTasks workspace is configured. It provides free self-hosted Obsidian sync for the rest of a vault: notes, attachments, images, and other files. InventTasks workspace roots, .git, trash, and InventTasks runtime state are excluded so task files are not transferred twice.
- Create a server object of type Vault and copy its one-time token.
- Open Settings → InventTasks → Vault sync (self-hosted) and enter the server URL, token, and Vault object ID on every participating device.
- Review the optional inclusion and exclusion settings:
| Option | Meaning |
|---|---|
Sync Obsidian settings (.obsidian) |
Includes themes, snippets, and supported app settings; per-device workspace layout and cache files stay excluded. Off by default |
Sync community plugins (.obsidian/plugins) |
Includes other plugin code/data; InventTasks' own per-device settings and credentials stay excluded. Off by default |
| Skip new files larger than (MB) | Local upload limit for files the server has not seen; 0 means no plugin-side limit, but the server limit still applies |
| Excluded paths | One pattern per line: Folder/ skips a subtree, *.mp4 matches that extension, and # begins a comment |
Vault sync uses the same initial choices, live updates, last-write-wins resolution, bounded history, restore tools, and mass-deletion protection as task-workspace sync. Avoid syncing the same files simultaneously with InventTasks Vault sync and another bidirectional service.
Web app and Vault browser#
The same container serves the Web app at /. Sign in with an account username and password; session cookies are HttpOnly. Accounts are isolated, and each account can own multiple Task manager and Vault objects.
Because it is an ordinary web page, you reach your tasks and notes from a work computer, a borrowed laptop, or a phone browser without installing Obsidian or the plugin there. Nothing is uploaded to a third party: the pages come from your own server.
A Task manager object opens the InventTasks interface with List, Board, Calendar, Table, Gantt, Timeline, Docs, search, and editing backed by the server copy. Live updates reflect changes from other connected clients. The Web app does not currently provide external notifications, calendar sync, incremental plugin backups, or obsidian:// links, and it does not expose a raw .md editor for task resources.
A Vault object opens a file browser. It can preview Markdown, images, audio/video, and PDFs; create notes and folders; edit Markdown or text; upload, download, rename, move, and delete files; follow wiki links; and inspect or restore file versions. These operations mutate the server copy and are synchronized to configured devices.
External API#
For automations, enable the External API separately on a server object in Off, Read-only, or Full mode. It uses a dedicated ITX.… key, not the sync token; the key is shown once and stored hashed on the server. The API console is at /api-console, OpenAPI 3.1 is at /api/ext/v2/openapi.json, and the full guide is in External API guide. Keep API access off unless needed, use the narrowest mode, and rotate a key that may have been exposed.