Sync GitHub and GitLab issues (with comments and attachments) into your Obsidian vault as structured Markdown files.
- GitHub: Sync issues + comments from one or more repositories
- GitLab: Sync issues + comments from:
- Specific projects (by project ID)
- Groups (all projects in a group, including subgroups)
- Entire instance (all accessible projects)
- Per-target output directory: Each sync target can specify its own output folder
- Title-based filenames: Issues are saved as
{issue-title}.md
- Attachment support: Download and save images and attachments from issues
- Incremental sync: Only fetches updates since the last run
- Filter by label: Per repo/scope label filtering
- Ribbon icon + Command palette commands
- Download
main.js, manifest.json, and styles.css into your vault's .obsidian/plugins/obsidian-issues-sync/ folder
- Enable the plugin in Obsidian Settings → Community Plugins
- Configure your tokens and sync targets in the plugin settings
my-github-issues/
└── octocat-hello-world/
├── fix-login-bug.md
├── add-dark-mode.md
└── assets/
└── screenshot.png
my-gitlab-issues/
└── my-group/
└── my-project/
├── update-readme.md
├── refactor-api.md
└── assets/
└── diagram.png
Each issue file contains:
- YAML frontmatter (title, number, state, author, labels, dates, URL)
- Issue description
- All comments with author and timestamp
| Command |
Description |
| Sync all configured issues |
Sync both GitHub and GitLab |
| Sync GitHub issues only |
Only sync GitHub repos |
| Sync GitLab issues only |
Only sync GitLab scopes |
| Test GitLab connection |
Verify GitLab API connection |
| Test GitHub connection |
Verify GitHub API connection |
| Reset last sync timestamp |
Force a full resync next time |
| Setting |
Description |
| Default output folder |
Default vault folder for issues (can be overridden per target) |
| Incremental sync |
Only sync issues updated since last run |
| Download attachments |
Download images and attachments from issues |
| Setting |
Description |
| Personal access token |
GitHub PAT (optional for public repos) |
| Repositories |
List of owner/repo with optional output directory |
| Setting |
Description |
| Instance URL |
Base URL of your GitLab instance |
| Personal access token |
GitLab PAT with read_api scope |
| Scopes |
project <ID>, group <ID>, or instance with optional output directory |
- GitHub:
repo scope for private repos; no token needed for public repos
- GitLab:
read_api scope
Open Obsidian Developer Tools (Cmd+Option+I on Mac) and check the Console tab for detailed logs prefixed with [Issues Sync].