strider-ape48 downloadsReview your changes and sync your vault with a GitLab repository in one press.
Review your changes and sync your Obsidian vault with a GitLab repository in one press.
SyncLab does one job: keep a vault (or one folder of it) and one GitLab branch identical, without ever losing a note. It talks to GitLab's API directly, so there's no git to install and it works on desktop and mobile.

You need Obsidian 1.11.4 or newer and a GitLab account. That's all: no git, no command line, no SSH keys.
In Obsidian, open Settings → Community plugins and choose Turn on community plugins if you see it. Obsidian asks for this once per vault before any plugin can run.
Until SyncLab is listed in Obsidian's plugin directory, install it with BRAT, a plugin for installing plugins straight from GitHub. This works on desktop and mobile:
https://github.com/strider-ape/SyncLab.Once SyncLab is in the directory, search for it under Community plugins → Browse and install it like any other plugin.
Click the SyncLab icon (two circular arrows) in the left ribbon, or press Ctrl/Cmd+P and run SyncLab: Open sidebar. Then press Connect GitLab and follow the five steps:
api permission already filled in.The sidebar lists everything that differs between your vault and the project. Press Sync.
Edit as usual. When you want to sync, open the sidebar, optionally type a message, and press Sync. Notes changed on another device show up under From GitLab and are pulled in the same press.
Create or open an empty vault, install SyncLab and connect it to that project. The first sync downloads every note.
If the vault isn't empty:
Repeat steps 1 and 2 on each device and pick the same project and branch. The token isn't copied between devices, so you paste one on each. A separate token per device is best: if you lose a phone, you revoke just that one.
.obsidian folder is never synced, and neither are other dot-files such as .gitignore. Themes, plugins and settings stay per device, and files like that in the repository are left alone.SyncLab needs a GitLab account and connects only to the GitLab server you configure. It sends requests there to list, read and write files in the project and branch you chose. It has no telemetry, no analytics and no other network requests. The font it uses is bundled with the plugin.
Vault access. To know what changed, SyncLab lists and reads the files in the folder you sync (or the whole vault, if that's what you chose) and compares them with GitLab. It writes or trashes files only when a sync brings in a change. It never touches the .obsidian folder or other dot-folders.
Base64, and only for uploads. GitLab's commit API takes file contents as base64 text, so SyncLab encodes each file it uploads. That's what keeps images, PDFs and other binary files byte-exact. It's the only place SyncLab uses base64, and it never decodes or runs anything.
Release files you can verify. Each release's main.js, styles.css and manifest.json carry a signed GitHub build attestation, so you can check they were built from this repository. Use gh attestation verify main.js --repo strider-ape/SyncLab.
npm install
npm run dev # watch build into main.js and styles.css
npm run build # type checks + production build
npm test # unit, engine, property-based and contrast tests
npm run lint # ESLint with Obsidian's plugin rules
npm run preview # browser preview of the sidebar in dev/preview
npm run install-plugin -- "<vault path>" # copy a build into a test vault
npm run test:contract # opt-in checks against a real GitLab project (see the test file)
Releasing:
npm version patch (or minor). This updates manifest.json and versions.json and creates a tag.git push --follow-tags. GitHub Actions then checks, builds and publishes the release with main.js, manifest.json and styles.css.The design and the reasoning behind it are in docs/PLAN.md.
SyncLab is free and unencumbered software released into the public domain under The Unlicense. Copy it, change it, build your own version or sell it. No permission or credit needed.
It ships with a few open source pieces that keep their own permissive licenses:
Their notices are in THIRD-PARTY-NOTICES.md and at the top of the release files.