{"id":50379337,"url":"https://github.com/psimaker/vaultsync","last_synced_at":"2026-05-30T11:02:32.146Z","repository":{"id":350105352,"uuid":"1202972452","full_name":"psimaker/vaultsync","owner":"psimaker","description":"Self-hosted Obsidian vault sync for iOS — powered by Syncthing.","archived":false,"fork":false,"pushed_at":"2026-05-17T21:50:25.000Z","size":2103,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-17T23:39:06.366Z","etag":null,"topics":["homelab","ios","notes","obsidian","privacy","self-hosted","swift","syncthing"],"latest_commit_sha":null,"homepage":"https://apps.apple.com/app/vaultsync/id6761845197","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/psimaker.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-06T15:38:12.000Z","updated_at":"2026-05-17T21:39:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/psimaker/vaultsync","commit_stats":null,"previous_names":["psimaker/vaultsync"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/psimaker/vaultsync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psimaker%2Fvaultsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psimaker%2Fvaultsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psimaker%2Fvaultsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psimaker%2Fvaultsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/psimaker","download_url":"https://codeload.github.com/psimaker/vaultsync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psimaker%2Fvaultsync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33689564,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["homelab","ios","notes","obsidian","privacy","self-hosted","swift","syncthing"],"created_at":"2026-05-30T11:02:27.654Z","updated_at":"2026-05-30T11:02:32.140Z","avatar_url":"https://github.com/psimaker.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/psimaker/vaultsync/main/ios/VaultSync/Resources/AppIcon.svg\" width=\"108\" height=\"108\" alt=\"VaultSync\"\u003e\n\n# [VaultSync](https://apps.apple.com/app/vaultsync/id6761845197)\n\n**Self-hosted Obsidian vault sync for iPhone and iPad — powered by Syncthing.**\u003cbr\u003e\nYour notes, your devices, your server. No managed note-sync cloud required.\n\n\u003ca href=\"https://apps.apple.com/app/vaultsync/id6761845197\"\u003e\n  \u003cimg src=\"https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg\" height=\"44\" alt=\"Download on the App Store\"\u003e\n\u003c/a\u003e\n\n\u003cbr\u003e\n\n[![Stars](https://img.shields.io/github/stars/psimaker/vaultsync?style=flat-square\u0026logo=github\u0026color=2AB5B3\u0026label=Stars)](https://github.com/psimaker/vaultsync/stargazers)\n[![Forks](https://img.shields.io/github/forks/psimaker/vaultsync?style=flat-square\u0026logo=github\u0026color=2AB5B3\u0026label=Forks)](https://github.com/psimaker/vaultsync/network)\n[![Contributors](https://img.shields.io/github/contributors/psimaker/vaultsync?style=flat-square\u0026logo=github\u0026color=2AB5B3\u0026label=Contributors)](https://github.com/psimaker/vaultsync/graphs/contributors)\n[![License: MPL-2.0](https://img.shields.io/badge/License-MPL_2.0-blue.svg?style=flat-square)](LICENSE)\n\n[![CI](https://img.shields.io/github/actions/workflow/status/psimaker/vaultsync/ci.yml?style=flat-square\u0026logo=github-actions\u0026logoColor=white\u0026label=Build)](https://github.com/psimaker/vaultsync/actions/workflows/ci.yml)\n[![Last Commit](https://img.shields.io/github/last-commit/psimaker/vaultsync?style=flat-square\u0026label=Last+Commit)](https://github.com/psimaker/vaultsync/commits)\n\n[![iOS 18+](https://img.shields.io/badge/iOS-18%2B-007AFF?style=flat-square\u0026logo=apple\u0026logoColor=white)](https://developer.apple.com/ios/)\n[![Swift 6](https://img.shields.io/badge/Swift-6-FA7343?style=flat-square\u0026logo=swift\u0026logoColor=white)](https://swift.org)\n[![Xcode 26+](https://img.shields.io/badge/Xcode-26%2B-147EFB?style=flat-square\u0026logo=xcode\u0026logoColor=white)](https://developer.apple.com/xcode/)\n[![Open Issues](https://img.shields.io/github/issues/psimaker/vaultsync?style=flat-square\u0026label=Issues)](https://github.com/psimaker/vaultsync/issues)\n[![Open PRs](https://img.shields.io/github/issues-pr-raw/psimaker/vaultsync?style=flat-square\u0026label=PRs)](https://github.com/psimaker/vaultsync/pulls)\n\n\u003c/div\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/screenshot-welcome.png\" width=\"30%\" alt=\"VaultSync welcome screen\"\u003e\n  \u003cimg src=\"docs/images/screenshot-home.png\" width=\"30%\" alt=\"VaultSync home screen\"\u003e\n\u003c/p\u003e\n\n---\n\n## Why VaultSync?\n\nVaultSync is the missing iOS bridge for people who already trust Syncthing with their Obsidian vault.\n\nIf your notes already live on your own Mac, Linux machine, NAS, or homeserver, VaultSync lets your iPhone or iPad join that setup without moving your vault into iCloud, Dropbox, or a managed note-sync cloud.\n\nVaultSync syncs directly into Obsidian’s iOS sandbox, so your vault appears where Obsidian expects it.\n\n**Built for:**\n\n- Obsidian users who want self-hosted iOS sync\n- Syncthing users who already sync notes across desktop and server\n- Homelab and NAS setups\n- Privacy-conscious Markdown users\n- People who want their notes on their own devices\n\nVaultSync is independent and is not affiliated with Obsidian or Syncthing.\n\n---\n\n## The honest sync promise\n\niOS does not allow third-party apps to run an always-on sync daemon in the background.\n\nVaultSync is designed around that limitation instead of hiding it.\n\n**What you can expect:**\n\n- **Server → iPhone/iPad:** near-realtime incoming sync when Cloud Relay silent pushes are delivered\n- **iPhone/iPad → Server:** most reliable when VaultSync is opened\n- **Background refresh:** may help opportunistically, but iOS controls when and whether it runs\n\nThe honest product promise is:\n\n\u003e **Near-realtime incoming sync to iPhone. Reliable outgoing sync when VaultSync is opened.**\n\n---\n\n## What VaultSync does\n\n- Syncs Obsidian vaults directly into Obsidian’s iOS folder\n- Uses Syncthing under the hood\n- Pairs with your desktop/server via QR code\n- Works with Mac, Linux, NAS, and homelab Syncthing setups\n- Includes Markdown conflict resolution\n- Shows sync activity, diagnostics, and common setup issues\n- Supports optional Cloud Relay wake-ups for faster server-to-iPhone updates\n- Requires no account, no analytics SDK, and no tracking\n\n---\n\n## What VaultSync is not\n\nVaultSync is not a hosted note-sync service.\n\nIt does not store your notes, index your vault, or proxy your Markdown files through a cloud backend.\n\nVaultSync is also not a magic always-on Syncthing daemon for iOS. Apple’s background execution model does not allow that. Instead, VaultSync combines foreground sync, iOS background refresh, and optional silent push wake-ups to make Syncthing-based Obsidian sync practical on iPhone and iPad.\n\n---\n\n## What’s New — v1.4.0\n\n\u003e **Quiet conflict notifications — and a switch to turn them off** ([#10](https://github.com/psimaker/vaultsync/issues/10)) — VaultSync no longer re-posts the same \"N conflicts\" banner on every background sync. It now replaces a single notification in place, only alerts when the count actually grows, and adds a Settings toggle so you can mute conflict banners without disabling iOS notifications — which no longer makes Cloud Relay look \"broken\". Background sync is more reliable too, the Cloud Relay price now displays correctly in every region, and you can optionally support development with a one-time contribution. This release also adds full **Spanish** localization, alongside English, German, and Simplified Chinese.\n\nSee [CHANGELOG.md](CHANGELOG.md) for full details.\n\n---\n\n## Features\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n### Syncthing-powered sync\n\nVaultSync uses Syncthing to sync your vault between your own devices over LAN or the Internet.\n\n### Obsidian-first design\n\nVaultSync syncs directly into Obsidian’s iOS sandbox. Open Obsidian and your vault is where it should be.\n\n### Calm onboarding, real setup\n\nA short first-run onboarding explains the flow, and the actual setup happens on the home screen where you can connect Obsidian, pair devices, accept shares, and monitor sync.\n\n### Markdown conflict resolver\n\nWhen files conflict, VaultSync shows side-by-side Markdown diffs so you can choose the right version with confidence.\n\n### Sync activity timeline\n\nSee what is syncing, when it synced, and where issues may have happened.\n\n### No note cloud\n\nYour notes sync between your own devices. VaultSync does not require a managed note-sync cloud, account, analytics SDK, or tracking.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n### Optional Cloud Relay\n\nCloud Relay can wake your iPhone when your server has changes, making incoming server-to-iPhone sync feel near-realtime.\n\n### vaultsync-notify sidecar\n\nA lightweight Docker container watches Syncthing on your server and signals the relay when your iPhone should wake up.\n\n### Sync issues panel\n\nActionable diagnostics help you understand and fix common setup and runtime issues without guessing.\n\n### Relay diagnostics\n\nBuilt-in checks help you confirm whether Cloud Relay, APNs, and your notify sidecar are working correctly.\n\n### iOS background-aware sync\n\nVaultSync supports iOS background execution where available, but never claims to run permanently in the background.\n\n### Accessibility\n\nVoiceOver and Dynamic Type support are included throughout the app.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## How it works\n\n```text\n┌──────────────┐     Syncthing protocol      ┌──────────────────┐\n│  Your Mac /  │◄───────────────────────────►│    VaultSync     │\n│  Linux / NAS │     LAN or Internet         │    iOS / iPadOS  │\n│  + Syncthing │                             │                  │\n└──────┬───────┘                             │  Syncs directly  │\n       │                                     │  into Obsidian’s │\n       │                                     │  iOS sandbox     │\n       │                                     └────────▲─────────┘\n       │                                               │\n       │  Optional                                     │\n       │  vaultsync-notify                             │\n       │  Docker sidecar                               │\n       │                                               │\n       ▼                                               │\n┌──────────────────┐        APNs silent push           │\n│ relay.vaultsync  │───────────────────────────────────┘\n│      .eu         │        wake-up signal only\n└──────────────────┘\n```\n\n1. **Syncthing** runs on your desktop, server, NAS, or homelab device.\n2. **VaultSync** runs on your iPhone or iPad and syncs files into Obsidian’s iOS sandbox.\n3. **vaultsync-notify** is an optional Docker sidecar that watches your Syncthing instance for real outgoing change markers.\n4. **Cloud Relay** sends a silent push wake-up to your iPhone when your server has new changes.\n5. **VaultSync wakes up** and pulls changes from your own Syncthing device.\n6. **Local iPhone edits** sync most reliably when you open VaultSync.\n\n---\n\n## Cloud Relay privacy\n\nCloud Relay is not a note cloud.\n\nIt does not sync, store, read, proxy, or index your Markdown files. It only helps wake your iPhone when your own server has changes waiting.\n\nThe relay never receives:\n\n- note content\n- Markdown text\n- filenames\n- folder names\n- vault structure\n- vault metadata\n\nThe relay only handles the minimum routing information required to deliver wake-up signals, such as device registration and push delivery data.\n\nFor details, see [PRIVACY.md](PRIVACY.md).\n\n---\n\n## Cloud Relay vs. no relay\n\nVaultSync works without Cloud Relay.\n\nWithout Cloud Relay, you can open VaultSync to trigger sync manually. iOS background refresh may also run opportunistically, but it is not guaranteed and does not run on a fixed schedule.\n\nCloud Relay improves the experience for server-side changes:\n\n| Scenario | Without Cloud Relay | With Cloud Relay |\n|---|---|---|\n| Server changes while iPhone is locked | Syncs when VaultSync is opened or iOS refreshes opportunistically | Relay can wake VaultSync via silent push |\n| iPhone edits need to go back to server | Most reliable when VaultSync is opened | Still most reliable when VaultSync is opened |\n| Notes pass through VaultSync servers | No | No |\n| File names pass through VaultSync servers | No | No |\n| Requires subscription | No | Yes, via in-app purchase |\n\n---\n\n## Getting started\n\n### 1. Install VaultSync\n\nDownload VaultSync from the [App Store](https://apps.apple.com/app/vaultsync/id6761845197).\n\n### 2. Connect your Syncthing device\n\nOpen VaultSync and scan your desktop/server Syncthing Device ID via QR code, or enter it manually.\n\nThen accept the connection on your desktop/server Syncthing instance.\n\n### 3. Sync your vault\n\nVaultSync detects Obsidian vaults on iOS. Select the vault you want to sync, connect it to your Syncthing share, and let the initial sync complete.\n\nOnce files are synced, open Obsidian on iOS. Your vault should appear where Obsidian expects it.\n\n### 4. Enable Cloud Relay\n\nCloud Relay is optional, but recommended if you want faster server-to-iPhone updates.\n\nSubscribe inside the app, then set up the notify container on your homeserver:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/psimaker/vaultsync/main/notify/scripts/bootstrap.sh | bash\n```\n\nThe script auto-detects your Syncthing instance, configures the container, and starts it.\n\n---\n\n## Manual Docker Compose setup\n\nIf you prefer to configure the notify sidecar manually, add this to your existing `docker-compose.yml`:\n\n```yaml\nvaultsync-notify:\n  image: ghcr.io/psimaker/vaultsync-notify:latest\n  environment:\n    SYNCTHING_API_URL: http://syncthing:8384\n    SYNCTHING_API_KEY: your-syncthing-api-key\n    RELAY_URL: https://relay.vaultsync.eu\n    RELAY_API_KEY: your-relay-api-key\n```\n\nSee [notify/README.md](notify/README.md) for full configuration options.\n\n---\n\n## Requirements\n\n| Requirement | Details |\n|---|---|\n| iPhone or iPad | iOS/iPadOS 18 or later |\n| Obsidian | Installed on iOS/iPadOS |\n| Syncthing | Running on a Mac, Linux machine, NAS, or homeserver |\n| Cloud Relay | Optional, available via in-app purchase |\n| vaultsync-notify | Optional Docker sidecar for server-side wake-ups |\n\n---\n\n## iOS background limitation\n\niOS does not allow third-party apps like VaultSync to run an always-on sync daemon in the background.\n\nThat means:\n\n- **Server → iPhone/iPad** can be near-realtime when Cloud Relay silent pushes are delivered.\n- **iPhone/iPad → Server** should be treated as foreground-first.\n- **Opening VaultSync** is the reliable way to push local iPhone edits back to your homeserver.\n- **Background App Refresh** may help sometimes, but iOS controls when it runs.\n- **Silent pushes** can be throttled or delayed by iOS depending on battery, network, system state, and usage patterns.\n\nVaultSync is built to be honest about those constraints.\n\n---\n\n## Self-hosted relay\n\nA fully self-hosted relay option, replacing `relay.vaultsync.eu` with your own relay server, is planned for a future release.\n\nUntil then, VaultSync works in two modes:\n\n1. **Without relay:** open VaultSync to sync manually, with opportunistic iOS background refresh where available.\n2. **With hosted Cloud Relay:** use silent push wake-ups for faster server-to-iPhone sync.\n\n---\n\n## Technical details\n\n| | |\n|---|---|\n| Platform | iOS/iPadOS 18+ |\n| Language | Swift 6, SwiftUI |\n| Sync engine | Syncthing v2.x via Go/gomobile `.xcframework` |\n| Background execution | `BGAppRefreshTask` + `BGContinuedProcessingTask` (iOS 26+ when available) |\n| Push wake-ups | APNs silent notifications via Cloud Relay |\n| Notify sidecar | Docker container for homeserver/NAS setups |\n| License | MPL-2.0 |\n\n---\n\n## Building from source\n\n### Requirements\n\n- Xcode 26+\n- Go 1.26+\n- gomobile\n- XcodeGen\n- Make\n\n### Build\n\n```bash\ngit clone https://github.com/psimaker/vaultsync.git\ncd vaultsync\n\n# Patch vendored dependencies and build the Go xcframework\ncd go\nmake patch\nmake xcframework\ncd ..\n\n# Generate and open the Xcode project\ncd ios\nxcodegen generate\nopen VaultSync.xcodeproj\n```\n\nSee [docs/setup.md](docs/setup.md) for detailed build instructions.\n\n---\n\n## Project structure\n\n```text\n├── ios/                  # Swift/SwiftUI iOS app\n├── go/                   # Go bridge: gomobile → .xcframework\n├── notify/               # vaultsync-notify Docker container\n├── docs/                 # Architecture, setup, and troubleshooting docs\n└── .github/workflows/    # CI pipeline\n```\n\n---\n\n## Troubleshooting\n\nCommon issues are documented here:\n\n- [docs/troubleshooting.md](docs/troubleshooting.md) — Common runtime failures and exact fixes\n- [notify/README.md](notify/README.md) — Notify sidecar setup and diagnostics\n- [docs/setup.md](docs/setup.md) — Build and development setup\n\nIf you find a bug, please open an issue with:\n\n- iOS/iPadOS version\n- VaultSync version\n- Syncthing version on your server/desktop\n- Whether Cloud Relay is enabled\n- Whether `vaultsync-notify` is running\n- Relevant logs or screenshots\n\n---\n\n## Contributing\n\nContributions are welcome.\n\nPlease follow the project conventions:\n\n- Swift API Design Guidelines\n- Swift strict concurrency where applicable\n- Standard Go conventions\n- Conventional Commits\n- Clear PR descriptions\n\nUseful docs:\n\n- [docs/setup.md](docs/setup.md) — Build instructions\n- [docs/architecture.md](docs/architecture.md) — Codebase structure\n- [docs/troubleshooting.md](docs/troubleshooting.md) — Common runtime failures and exact fixes\n\n---\n\n## Acknowledgments\n\nVaultSync is built on top of these projects:\n\n| Project | Description |\n|---|---|\n| [Syncthing](https://syncthing.net/) | The open-source file synchronization program powering VaultSync |\n| [gomobile](https://github.com/golang/mobile) | Go on mobile, enabling the embedded sync engine |\n\nVaultSync is designed for [Obsidian](https://obsidian.md), the powerful knowledge base for local Markdown files.\n\nVaultSync is an independent project and is not affiliated with, endorsed by, or sponsored by Obsidian or Syncthing.\n\n---\n\n## License\n\n[MPL-2.0](LICENSE) — You may freely use, modify, and distribute this software under the terms of the Mozilla Public License 2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsimaker%2Fvaultsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpsimaker%2Fvaultsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsimaker%2Fvaultsync/lists"}