Why Obsidian + S3?
Obsidian has become the go-to tool for building a personal knowledge base. Its vaults are plain Markdown files organized in a folder hierarchy, with no proprietary database, no server-side API, and no vendor lock-in. Every note, every link, every tag lives as a .md file on your local disk. That simplicity is a superpower when it comes to syncing.
S3-compatible object storage is equally simple in its own way: you upload files to a bucket, and they are available from anywhere on the planet. When you combine the two, you get a knowledge base that is portable, durable, and accessible from any device that can reach the internet. And with GoMount, the S3 bucket appears as a local folder on your Mac, so Obsidian does not even know it is talking to the cloud.
The best part? Cloudflare R2 offers a generous free tier that is more than enough for a personal Obsidian vault. You can run this entire setup at zero cost, with no subscription, no per-user fees, and no egress charges.
Prerequisites
- A Mac running macOS 13 or later.
- GoMount installed. If you have not set it up yet, start with the Getting Started guide.
- Obsidian installed on at least one device.
- A Cloudflare account (free). You will create an R2 bucket in the next steps.
How Obsidian vaults work
Before diving into sync, it helps to understand exactly what an Obsidian vault is. A vault is simply a folder on your file system. Inside that folder you will find:
- Markdown files (
.md) — your notes, organized in subfolders however you like. - A
.obsidianfolder — configuration, plugins, themes, hotkeys, and workspace layout. This is Obsidian's metadata, not your content. - An
.trashfolder — deleted notes that Obsidian keeps for recovery. - Attachments — images, PDFs, and other files you have embedded in notes, usually stored in a subfolder you designate.
Because the vault is just a folder of files, any tool that can keep a folder in sync across devices can sync an Obsidian vault. There is no database to migrate, no export step, and no format conversion. You point Obsidian at a folder, and it reads and writes Markdown files directly.
This is fundamentally different from apps like Notion or Roam Research, which store everything in a proprietary cloud database. With Obsidian, you own your data at the file level, and S3 is a natural fit for storing and retrieving those files.
The problem with existing sync options
Obsidian users typically choose from a handful of sync strategies, each with trade-offs:
| Method | Cost | Pros | Cons |
|---|---|---|---|
| Obsidian Sync | $4/month | Official, end-to-end encrypted, version history | Recurring cost; limited to 1GB vault size on the standard plan |
| iCloud Drive | Free (5GB) or included with Apple storage plans | Zero setup on Apple devices | Not available on Android or Linux; sync conflicts are opaque; no version history for individual files |
| Syncthing | Free (open source) | Peer-to-peer, no cloud needed | Requires all devices to be online simultaneously; no central backup; conflict files pile up |
| S3 + GoMount | $0/mo on R2 free tier | Central storage, versioning, works on any OS, no subscription | Requires initial setup; iOS needs a workaround |
Obsidian Sync is the easiest path, but $4 per month adds up, and the 1GB vault limit becomes a real constraint once you start embedding images. iCloud is fine if you live entirely in the Apple ecosystem, but it breaks down the moment you want to access your vault from a Windows machine or a Linux server. Syncthing is powerful but demands that every device be online at the same time, which is impractical for most people.
S3 with GoMount gives you a central, always-available storage location with built-in versioning, zero egress fees (on R2), and the flexibility to access your vault from any device that can speak S3. The setup takes about fifteen minutes.
Setting up Cloudflare R2 (free tier)
Cloudflare R2 is an S3-compatible object storage service with a standout pricing model: zero egress fees. You do not pay for downloading your own data. The free tier includes 10GB of storage and 10 million Class A (write) and Class B (read) operations per month, which is far more than a personal Obsidian vault will ever need.
Step 1: Create an R2 bucket
- Sign in to the Cloudflare Dashboard.
- Navigate to R2 Object Storage in the left sidebar.
- Click Create bucket.
- Enter a bucket name, for example
obsidian-vault. Bucket names are unique within your account, so any name works. - Leave the region at the default (automatic). Cloudflare will place your data in the closest region.
- Click Create bucket.
Step 2: Generate API credentials
- In the R2 dashboard, click Manage R2 API Tokens.
- Click Create API token.
- Give the token a name like
gomount-obsidian. - Set permissions to Object Read & Write.
- Under Specify bucket, select your vault bucket (or choose All buckets if you plan to create more later).
- Click Create API token.
- Copy the Access Key ID and Secret Access Key. The secret is shown only once.
Store the secret access key in your password manager immediately. If you lose it, you must create a new token and reconfigure GoMount.
Step 3: Note your endpoint
R2 uses a single S3-compatible endpoint for all buckets:
https://<ACCOUNT_ID>.r2.cloudflarestorage.com
You can find your Account ID in the Cloudflare Dashboard under Workers & Pages or on the R2 overview page. Copy it and keep it handy for the GoMount configuration.
Enable Object versioning on your R2 bucket for an extra layer of protection. Go to the bucket settings in the R2 dashboard and toggle versioning on. This keeps previous versions of every file, so you can recover from accidental overwrites even if Obsidian's own history fails.
Mounting R2 with GoMount
Now connect your R2 bucket to GoMount so it appears as a local folder on your Mac.
- Open GoMount and go to Settings > Cloud Storage, or click the + button to add a new connection.
- Choose S3-Compatible as the provider type.
- Fill in the fields:
| Field | Value |
|---|---|
| Display Name | Obsidian Vault |
| Endpoint | <ACCOUNT_ID>.r2.cloudflarestorage.com |
| Region | auto |
| Access Key ID | Your R2 access key |
| Secret Access Key | Your R2 secret key |
| Bucket | obsidian-vault |
| Path Style | Disabled (unchecked) |
R2 uses virtual-hosted-style addressing, so leave Path Style disabled. The region for R2 is always auto because Cloudflare handles routing automatically.
- Click Test Connection to verify the credentials.
- Once the test succeeds, click Mount. The bucket will appear as a volume in Finder.
- Set up an auto-mount rule so the bucket is available at login. Open Rules for the connection and add a rule that triggers on Any Network with Mount at Login enabled.
For more detail on auto-mount rules, see the auto-mount rules guide.
Pointing your vault to the mounted bucket
With the R2 bucket mounted, you now have a local folder that syncs to the cloud in real time. The final step is to tell Obsidian to use that folder as its vault.
Option A: Create a new vault on the mounted bucket
- Open Obsidian and click Create new vault.
- Navigate to the GoMount mount point (it will appear under Locations in Finder's sidebar, typically at
/Volumes/Obsidian Vaultor a similar path). - Name your vault and click Create.
Option B: Move an existing vault
- Close Obsidian completely (make sure it is not running in the menu bar).
- Move your existing vault folder to the mounted R2 bucket using Finder.
- Open Obsidian, click Open folder as vault, and navigate to the vault's new location inside the mount point.
Either way, Obsidian will now read and write directly to the S3-mounted folder. Every change you make is uploaded to R2 automatically by GoMount. When you open Obsidian on another device that has the same bucket mounted, your notes will be there.
If you move an existing vault, verify that the .obsidian folder was copied correctly. This hidden folder contains all your settings, plugins, and theme configuration. In Finder, press Cmd + Shift + . to toggle hidden file visibility.
Conflict handling and versioning
Sync conflicts happen when you edit the same note on two devices before the changes have propagated. With S3, the last write wins by default, which means one device's changes could silently overwrite the other's. Here is how to protect yourself:
Obsidian's built-in protection
Obsidian keeps a local file recovery cache. Go to Settings > Files & Links > File recovery and make sure it is enabled. Obsidian will snapshot your notes at regular intervals (default: every 5 minutes) and keep them for a configurable number of days. If a sync conflict overwrites a note, you can recover the previous version from this cache.
S3 versioning as double insurance
If you enabled R2 object versioning (recommended), every overwrite creates a new version of the object in S3. The previous version is not deleted; it is kept alongside the current one. You can list and restore previous versions through the Cloudflare dashboard or the S3 API. This gives you a second, independent recovery mechanism that works even if Obsidian's local cache has been cleared.
Workflow habits to avoid conflicts
- Sync before editing. When you open Obsidian, give GoMount a few seconds to pull the latest changes from R2 before you start writing.
- Sync before closing. Likewise, wait a moment after saving a note to ensure the upload has completed before you close your laptop or switch devices.
- Avoid simultaneous edits. If you are actively editing a note on your Mac, do not edit the same note on your phone at the same time. The S3 model does not merge concurrent writes.
Multi-device workflow
The S3 + GoMount approach works seamlessly on any macOS, Windows, or Linux machine where you can install GoMount. But mobile devices require a different strategy because GoMount is a desktop application.
macOS and desktop
Install GoMount on each Mac, configure the same R2 bucket, and mount it at login. Obsidian reads from the mount point just like a local folder. This is the simplest case and requires no additional tools.
iOS
iOS does not support arbitrary file system mounts, so you cannot use GoMount directly. Two practical alternatives:
- Working Copy + S3. Use the Working Copy app to clone a Git repository that mirrors your vault, then use a script or shortcut to push changes to S3 via the R2 API. This is more technical but gives you full version control on iOS.
- Obsidian Git (community plugin). The Obsidian Git plugin can push and pull your vault to a Git remote. Pair it with a Git hosting service that supports S3-backed storage, or use a lightweight server that syncs with your R2 bucket.
Android
Similar to iOS, Android does not support native S3 mounts. You can use a third-party sync app like FolderSync to keep a local folder in sync with your R2 bucket, then point Obsidian for Android at that folder. Configure FolderSync to sync on a schedule or when you open the app.
Mobile workarounds add complexity. If you only use Apple devices, iCloud may be simpler for iOS sync. The S3 approach shines when you need cross-platform access or want to avoid recurring subscription costs.
Cost breakdown
Here is what you actually pay for a personal Obsidian vault synced via Cloudflare R2:
| Resource | Free Tier | Typical Personal Use | Cost |
|---|---|---|---|
| Storage | 10 GB | 500 MB – 2 GB (text + images) | $0/mo |
| Class A operations (writes) | 10 million/month | A few thousand saves/day | $0/mo |
| Class B operations (reads) | 10 million/month | A few thousand reads/day | $0/mo |
| Egress (downloads) | Unlimited, free | Syncing across devices | $0/mo |
| GoMount license | Free tier available | Personal use | $0/mo |
For a typical personal knowledge base with a few thousand Markdown notes and embedded images, you will use well under 1GB of storage and stay comfortably within the free tier. Even if your vault grows to 5GB over several years, you are still within the 10GB free allocation. The only scenario where you would start paying is if your vault exceeds 10GB, at which point R2 charges $0.015 per GB per month — still cheaper than most subscription sync services.
Compare this to Obsidian Sync at $4/month ($48/year) or iCloud's 200GB plan at $2.99/month. The S3 approach is genuinely free for personal use.
Tips and pitfalls
- Keep attachments small. Large PDFs, high-resolution photos, and video files will eat into your 10GB free tier quickly. Resize images before embedding them in notes, and store large reference PDFs elsewhere (a separate R2 bucket or a service like Wasabi).
- Enable S3 versioning as a backup. Versioning is your safety net against accidental overwrites and sync conflicts. It costs nothing extra on R2's free tier, so there is no reason to skip it.
- Set up billing alerts. Even though you expect to stay on the free tier, configure a billing alert in Cloudflare so you are notified if usage spikes unexpectedly. This takes two minutes in the dashboard and prevents surprises.
- Do not treat the mount as a scratch disk. S3 has higher latency than a local SSD. Opening a vault with thousands of notes will be slightly slower than a purely local vault. For most users the difference is negligible, but if you notice lag, consider enabling GoMount's caching options.
- Exclude
.obsidian/pluginsfrom sync if needed. If you use different plugins on different devices, you may want to exclude the plugins folder from sync to avoid conflicts. Most users, however, will want all plugins synced. - Back up your vault periodically. S3 is durable, but it is not a substitute for a proper backup. Export your vault as a ZIP file once a month and store it on a separate service. See our Backblaze B2 guide for a cheap backup target.
- Use descriptive file names. Since your vault is just a folder of files, good naming conventions make it easy to browse outside Obsidian too. A note called
2026-08-25 S3 Obsidian Sync Setup.mdis easier to find in Finder or the Cloudflare dashboard thanuntitled 3.md. - Test on a secondary device first. Before migrating your primary vault, create a small test vault on the mounted bucket and open it from a second device. Verify that notes sync correctly, then proceed with your real vault.
Next in this series
This guide is part of a series on S3-compatible storage with GoMount. If you found this useful, here are the related guides:
- Getting Started with GoMount — the basics of installing and configuring GoMount on your Mac.
- S3-Compatible Storage vs. Cloud Drives — a comparison of object storage with traditional cloud drives to help you choose the right approach.
- Wasabi Low-Cost Object Storage Setup — configure Wasabi as an alternative S3 provider with flat-rate pricing.
- Backblaze B2 and Cloudflare R2 Setup — two more S3-compatible providers, each with unique pricing advantages.
Return to the guides index for the full list of GoMount tutorials.