Sync, History & Backup
Your notes are plain files in a folder — these features keep that folder safe and everywhere.
Git history (local snapshots)
- Settings → History → Initialize Git History turns the workspace into a local Git repo. No account needed; nothing leaves your machine.
- With auto-commit on save on, every save becomes a snapshot. “Save Snapshot Now” commits on demand.
- The History pane shows the timeline per note; one click compares or rolls back to any snapshot.
GitHub sync — setup
- Create a Personal Access Token at
github.com → Settings → Developer settings → Personal access tokens. Two kinds work:- Fine-grained (recommended): select the sync repository (or “All repositories”), and under Repository permissions set Contents: Read and write. Mind the expiration date you pick.
- Classic: check the
reposcope.
- In SoloMD: Settings → Sync → paste the token. SoloMD verifies it and shows your GitHub user.
- Link a repository — pick an existing one, or let SoloMD create a private vault repo for you.
- Push / pull from the toolbar pill or the command palette; optional auto-push / auto-pull run in the background.
End-to-end encryption (optional)
Enable E2EE with a passphrase and SoloMD pushes an encrypted shadow copy instead of plaintext — GitHub stores ciphertext only. The passphrase never leaves your machine; without it the remote cannot be decrypted (there is no recovery). Share links are disabled for encrypted workspaces by design.
Share links
“Copy Share Link for This Note” produces a URL that renders the note via the repo — handy for sending a single note to someone without giving repo access.
Troubleshooting
| Error | Cause and fix |
|---|---|
| 401 / Bad credentials | GitHub rejected the token itself. Checklist: ① token expired — fine-grained PATs default to 30–90 days, check github.com → Settings → Developer settings; ② you pasted an account password or OAuth code instead of a PAT; ③ the token was regenerated or revoked (old value stops working immediately, and GitHub auto-revokes tokens found in public code); ④ a corporate/VPN proxy strips the Authorization header. Create a fresh token and paste it again — SoloMD trims stray spaces automatically. |
| 403 / 404 on a private repo | The token is valid but lacks access: fine-grained PAT missing Contents: Read and write or not granted to that repository; classic PAT missing the repo scope; or an organization repo behind SAML SSO where the token hasn't been authorized for the org. |
| “Remote has newer commits” | Someone (or another device) pushed first. Pull, resolve if asked, then push again. |
| “Protected branch” | The target branch has protection rules — push to a different branch or relax the rule for your vault repo. |
Syncing without GitHub
Because notes are plain files, any folder-sync tool works: iCloud Drive, Dropbox, Syncthing, OneDrive — point SoloMD at the synced folder on each device. On Android, open the same folder via the system file picker; on iOS, use a Files-app location.
Frequently asked questions
Why do I get a 401 error when connecting GitHub?
401 means GitHub rejected the token itself. In order of likelihood: the token expired (fine-grained tokens default to 30–90 days); you pasted your GitHub account password instead of a Personal Access Token (password auth was removed by GitHub in 2021); the token was revoked (regenerating a token invalidates the old one, and GitHub auto-revokes tokens it finds in leaked code); or a proxy on your network strips the Authorization header. Fix: create a fresh token (see the checklist above), paste it again in Settings → Sync, and retry.
Is my token stored safely?
The token is stored in the operating system keychain (macOS Keychain, Windows Credential Manager, libsecret on Linux) — never in a plain-text config file, and it never leaves your machine except in requests to github.com.
What does end-to-end encryption actually encrypt?
With E2EE enabled, SoloMD pushes an encrypted shadow copy of your workspace: file contents are encrypted with a key derived from your passphrase before anything leaves your machine. GitHub only ever stores ciphertext. Losing the passphrase means the remote copy cannot be decrypted — keep it safe.
Comments & feedback
Comments live on GitHub Discussions — sign in once with your GitHub account.
Comments load from GitHub Discussions. If you see this message instead, the maintainer has not finished the one-time giscus.app setup yet — see web/COMMUNITY-SETUP.md.
Open on GitHub Discussions →