Kai Liu847 downloadsSync your vault through GitHub across mobile and desktop, with a multilingual dashboard, search, favorites, history, and quizzes.
GitSync Portal is a native Obsidian plugin that syncs your vault through GitHub — no system Git, Node.js, or shell commands required — and pairs it with a multilingual dashboard for search, favorites, reading history, and interactive quizzes.
Works the same way on Android, iOS, Windows, macOS, and Linux.
GitSync Portal is an independent community project. It is not affiliated with or endorsed by Obsidian.
owner/repository, and a branch.Sync
.conflict-… file, never lostSecretStorage, never written to data.json or the vaultDashboard
Quizzes
Reading & language
Download main.js, manifest.json, and styles.css from the latest release into:
<Vault>/.obsidian/plugins/gitsync-portal/
Reload Obsidian and enable GitSync Portal under Settings → Community plugins. Don't nest the files in a subfolder or install from a ZIP.
Platform-specific steps (showing hidden folders on Windows/macOS/Android, iOS caveats) and upgrading from the plugin's earlier names (gitsync-port, obsidian-viewer) are covered in INSTALL.md.
GitSync Portal can follow Obsidian's language setting (System default) or use a language you pick explicitly, under Settings → GitSync Portal → Language. The dashboard updates immediately; reload Obsidian to also refresh Command Palette entry names.
| Coverage | Languages |
|---|---|
| Full interface | English, Simplified Chinese |
| Broad coverage (dashboard, settings, sync, quizzes) | Traditional Chinese, Japanese, Korean, Spanish, German, Italian |
| Navigation and core sync controls | French, Arabic, Bengali, Dutch, Polish, Portuguese, Portuguese (Brazil), Romanian, Russian, Swedish, Turkish, Ukrainian, Vietnamese |
Any text not yet translated for a language falls back to English automatically.
First sync. Files that exist on only one side are copied to the other — nothing is deleted on a first sync. A brand-new, empty GitHub repository is fine: the first two-way sync creates its initial commit from the local vault. Restoring a vault from scratch onto an existing repository should use Pull only.
Conflicts. If the same path changed on both sides, GitSync Portal compares the local modification time against the latest remote commit for that path. The newer version wins and becomes the main file; the older version is kept as a device- and timestamp-labeled .conflict-… copy, which is excluded from future syncs so it can't loop back in as a conflict itself.
Two-way vs. one-directional. The dashboard's primary action is two-way sync, with Pull only and Push only as secondary actions:
.gitignore. GitSync Portal reads the vault's root .gitignore on every connection test and sync.
.gitignore stays device-local, and Ignored paths becomes a separate, device-local ignore list..gitignore doesn't silently block incoming changes unless you opt in.Retries. If the remote branch changes while GitSync Portal is committing, it waits briefly, re-reads the branch head, and retries. If the change touched the same path being pushed, it re-reconciles instead of forcing the push.
Queueing. Manual, startup, save-triggered, and periodic sync requests share one queue: a request that arrives mid-sync waits for the current one to finish rather than racing it. With Sync on save enabled, favorite/history changes restart a trailing 30-second timer, so a burst of edits triggers only one sync.
Included by default:
.gitignoresync-state.json)Device-local by default:
gitsync-port/obsidian-viewer migration directoriesAlways excluded: the vault's .git/ database and .trash/ directory. The GitHub token lives in Obsidian SecretStorage, not in the vault, so it is never uploaded.
If Obsidian Git is installed in the same vault, enable automatic sync in only one of the two plugins — two engines pushing to the same branch can race each other.
Requires Node.js 18+.
npm install
npm test
npm test runs lint, a TypeScript production build, release-metadata validation, and the sync/settings/i18n test suites.
npm run dev # watch mode
Project layout:
main.ts Plugin entry point, settings, migration, lifecycle
src/github-sync.ts Cross-platform GitHub synchronization engine
src/viewer-view.ts Dashboard and file navigation
src/settings.ts Plugin settings tab
src/quiz.ts Quizzable parsing, rendering, and scoring
src/i18n.ts Language registry, translations, locale resolution
styles.css Desktop and mobile styles
scripts/ Build/release checks and test scripts
data.json, logs, release archives, or the vault.This repository originated from MorganTian886/Obsidian_Viewer; the Git history retains the original authorship. The cross-platform rewrite and all releases since are independently maintained by Kai Liu.