GitHub Pull
pendingby Zhenxing Gu
Pull your vault from GitHub without Git installation. Perfect for mobile devices.
Obsidian GitHub Pull
A mobile-friendly Obsidian plugin that pulls your vault from GitHub repositories without requiring Git installation. Perfect for iOS and iPad users who want to keep their notes synchronized with a GitHub backup. Note: This is one-way sync. It only pull vaults from github to your device, doesn't support sync changes to github.
Features
Gitless Sync - No Git installation required, works entirely through GitHub API Mobile Optimized - Designed specifically for iOS and iPad Smart Sync - Only downloads changed files, preserves local-only notes Auto-Sync - Optionally sync automatically when Obsidian launches Secure - Uses GitHub Personal Access Tokens for authentication Progress Tracking - Visual feedback during sync operations Fast & Efficient - Batch downloads with parallel processing
How It Works
This plugin syncs one-way from GitHub to your vault:
- GitHub Repository → Your Obsidian Vault
- Local-only files are preserved (not deleted)
- Only changed files are downloaded
- Uses GitHub REST API (no Git required)
Installation
From Obsidian Community Plugins
- Open Obsidian Settings
- Go to Community Plugins
- Search for "GitHub Pull"
- Click Install
- Enable the plugin
Manual Installation
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Create folder
.obsidian/plugins/obsidian-github-pull/in your vault - Copy the downloaded files to this folder
- Reload Obsidian
- Enable the plugin in Settings → Community Plugins
Setup Guide
Step 1: Create a GitHub Personal Access Token
- Go to GitHub Settings → Developer settings → Personal access tokens
- Click "Generate new token (classic)"
- Give it a descriptive name (e.g., "Obsidian Sync")
- Select expiration (recommend: 90 days or No expiration)
- Select scopes:
- ✅
repo(for private repositories) - OR ✅
public_repo(for public repositories only)
- ✅
- Click "Generate token"
- Copy the token immediately (you won't see it again!)
Step 2: Configure the Plugin
- Open Obsidian Settings → GitHub Pull
- Enter your repository in
owner/repoformat- Example:
yourusername/my-vault
- Example:
- Paste your Personal Access Token
- Set the branch name (usually
mainormaster) - Enable/disable "Auto-sync on launch" as preferred
- Click "Test Connection" to verify settings
- Click "Sync Now" to perform your first sync
Step 3: Verify Sync
After the first sync:
- Check that your files appeared in the vault
- Verify the "Last sync" timestamp in settings
- Make a change on GitHub and sync again to test updates
Usage
Manual Sync
Three ways to trigger a sync:
- Ribbon Icon: Click the refresh icon in the left sidebar
- Command Palette: Press
Cmd/Ctrl + P, type "Sync from GitHub" - Settings: Go to plugin settings and click "Sync Now"
Auto Sync
Enable "Auto-sync on launch" in settings to automatically sync when Obsidian starts.
Sync Progress
During sync, you'll see notifications showing:
- "Starting sync from GitHub..."
- Progress updates for large syncs
- "✓ Sync complete! Added: X, Modified: Y"
- Error messages if something fails
How Syncing Works
┌─────────────────────────────────────┐
│ Your GitHub Repository │
│ github.com/you/my-vault │
└──────────────┬──────────────────────┘
│
│ GitHub REST API
│ (No Git required)
│
▼
┌──────────────────────────────────────┐
│ GitHub Pull Plugin │
│ • Fetches file list │
│ • Compares with local state │
│ • Downloads only changed files │
│ • Preserves local-only files │
└──────────────┬───────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ Your Obsidian Vault │
│ (iOS/iPad/Desktop) │
└──────────────────────────────────────┘
What Gets Synced?
✓ Downloaded from GitHub:
- All files in the repository
- File updates (when content changes)
- New files added to GitHub
- Preserves directory structure
✓ Preserved Locally:
- Files you create only on mobile
- Local modifications (until next sync overwrites)
- Plugin data and settings
.obsidian/configuration (except this plugin's data)
✗ NOT Synced:
- Local → GitHub (one-way only)
- File deletions from GitHub (local files kept)
FAQ
Is this bidirectional sync?
No, this is one-way sync from GitHub to your device. Changes made on your mobile device are not pushed back to GitHub. This is by design to avoid complex conflict resolution without Git.
What happens to files I create on mobile?
Files created locally that don't exist in GitHub are preserved. They won't be deleted. However, if you create a file with the same name as one in GitHub, the GitHub version will overwrite it on the next sync.
How often should I sync?
It depends on your workflow:
- Auto-sync on launch: Good for most users
- Manual sync: When you know changes were made on GitHub
- Before important work: To ensure you have the latest version
What about conflicts?
Since this is one-way sync, the GitHub version always wins. If you've made local changes and sync, they'll be overwritten by the GitHub version.
Does this use my GitHub API quota?
Yes. GitHub allows:
- 5,000 requests/hour (authenticated)
- 60 requests/hour (unauthenticated)
The plugin shows your remaining quota in the connection test. Each sync uses approximately:
- 1 request to fetch file list
- 1 request per changed file
For a typical vault, this is well within limits.
Can I sync multiple repositories?
Currently, no. You can only sync one repository per vault. If you need multiple repositories, consider creating separate vaults.
Will this work with large repositories?
Yes, but:
- Large syncs (>500 files) take longer
- First sync downloads everything
- Subsequent syncs are much faster (only changed files)
- GitHub has a 100MB file size limit via API
Is my Personal Access Token secure?
Your token is stored in Obsidian's plugin data, which is:
- Stored locally on your device
- Not transmitted anywhere except GitHub
- Protected by your device's security
However, treat your PAT like a password:
- ✅ Use minimum required permissions
- ✅ Set expiration dates
- ✅ Revoke if compromised
- ❌ Don't share your token
- ❌ Don't commit tokens to Git
What if I'm offline?
The plugin will show a network error. Your local files remain intact. Simply sync again when you're back online.
Can I exclude certain files?
Not currently. The plugin syncs the entire repository. You can:
- Use a dedicated branch for Obsidian
- Create a separate repository for your vault
- Request this feature on GitHub
Troubleshooting
Error: "Authentication failed"
Solutions:
- Verify your Personal Access Token is correct
- Check the token hasn't expired
- Ensure the token has
repoorpublic_reposcope - Generate a new token if needed
Error: "Repository not found"
Solutions:
- Check repository format is
owner/repo(not a full URL) - Verify the repository exists and you have access
- For private repos, ensure PAT has
reposcope
Error: "Rate limit exceeded"
Solutions:
- Wait for rate limit to reset (shown in error message)
- Reduce sync frequency
- Check "Rate limit" in Test Connection to see remaining quota
Error: "Network error"
Solutions:
- Check your internet connection
- Try again in a few moments
- Verify GitHub is accessible (check status.github.com)
Files not updating
Solutions:
- Check the branch name is correct
- Verify files exist in the specified branch on GitHub
- Click "Test Connection" to diagnose
- Check "Last sync" timestamp to confirm sync completed
Sync is slow
Solutions:
- First sync downloads everything (normal)
- Subsequent syncs should be much faster
- Large repositories (>1000 files) take longer
- Check your internet speed
Plugin not showing up
Solutions:
- Verify plugin is enabled in Settings → Community Plugins
- Check files are in
.obsidian/plugins/github-pull/ - Restart Obsidian
- Check for errors in Developer Console (Ctrl+Shift+I)
Supported Platforms
- ✅ iOS (iPhone) - Fully supported
- ✅ iPadOS (iPad) - Fully supported
- ✅ Android - Fully supported
- ✅ Windows - Fully supported
- ✅ macOS - Fully supported
- ✅ Linux - Fully supported
Limitations
- One-way sync only (GitHub → Vault)
- No conflict resolution (GitHub version always wins)
- Single repository per vault
- No file exclusion (syncs entire repo)
- No partial folder sync (all or nothing)
- 100MB file size limit (GitHub API limitation)
Roadmap
Potential future features (not guaranteed):
- Bidirectional sync with conflict resolution
- Multiple repository support
- Selective folder sync
- File exclusion patterns (.gitignore style)
- Sync scheduling (periodic auto-sync)
- Sync status indicators on files
- Webhook support for instant sync
- Diff preview before sync
Privacy & Security
This plugin:
- ✅ Only communicates with GitHub API
- ✅ Stores credentials locally on your device
- ✅ Does not send data to any other servers
- ✅ Is open source (audit the code yourself)
- ✅ Uses HTTPS for all API requests
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: This README
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly (especially on mobile)
- Submit a pull request
License
MIT License - see LICENSE file for details.
Acknowledgments
- Built for the Obsidian community
- Inspired by the need for Git-free mobile sync
- Uses the excellent Obsidian API
- Powered by GitHub REST API
Changelog
Version 1.0.0 (Initial Release)
- ✨ One-way sync from GitHub to vault
- 📱 Full mobile support (iOS/iPad)
- 🔒 Personal Access Token authentication
- 🔄 Smart sync (only changed files)
- 🚀 Auto-sync on launch option
- 📊 Progress notifications
- ⚡ Batch downloading with parallel processing
- 🛠️ Settings interface with connection testing
- 📝 Comprehensive error handling
Made with ❤️ for the Obsidian community
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.