srwildman19 downloadsAuto-refreshing GitLab inbox showing MRs to review, your open MRs, mentions, and todos with check-off support.
Auto-refreshing Obsidian plugin that shows everything you need to address in GitLab - MRs to review, your open MRs, mentions, and todos. Runs in the background, writes a persistent checklist to your vault, and shows a sidebar panel with interactive UI.
GitLab Inbox.md note to your vault with Tasks-plugin-compatible checkboxesGL: 8) that you can click to open the sidebarAll categories are configurable - rename, reorder, or disable any section in settings.
| Default Label | What's in it |
|---|---|
| Needs Your Review | MRs where you're a reviewer and haven't interacted yet |
| Re-Review | MRs you've commented on with new activity since |
| Approved | MRs you've already approved (for awareness) |
| Your MRs | Your open MRs with approval count, pipeline status, merge readiness |
| Mentions & Todos | Direct @mentions, issue mentions, approval requests |
The sidebar is the primary way to interact with your inbox. Each item shows:
Items are auto-prioritized based on a configurable rules system. You define labels (e.g. Now, Next, Later) and rules that assign them. First matching rule wins.
Default rules:
| Condition | Label |
|---|---|
| Review request older than 5 days | Now |
| Someone @mentions me | Now |
| My pipeline is failing | Now |
| Threads waiting for me >= 2 | Now |
| Review request older than 2 days | Next |
| My MR has no reviewer activity for 3 days | Next |
| MR is a draft | Later |
Labels, rules, conditions, and thresholds are all configurable in settings. Items matching no rule get no badge.
For each MR, the plugin tracks:
threads_waiting - unresolved threads where the last comment is NOT from you (you need to reply)threads_pending - unresolved threads where the last comment IS from you (waiting on them)Your MRs show a readiness signal:
[ready::merge] - all approvals met, pipeline green, no conflicts[ready::fix pipeline] - approved but pipeline failing[ready::resolve conflicts] - approved but has merge conflicts[approved::1/2] - still needs more approvalsMRs show a size tag based on changes count:
A summary table at the bottom shows how review requests are distributed across your team. Helps spot who's overloaded and needs help.
Defer items using the Tasks plugin scheduled date syntax:
- [ ] [mcp-rdx!11 - Fix issues](https://...) [author::Nelson] ⏳ 2026-04-17 <!-- glab:mr:9647:11 -->
The item is suppressed from the count until the scheduled date, then reappears as unchecked. You can snooze from the sidebar (defers until tomorrow) or manually edit the date in the note for a specific day.
When you check off an item, it's automatically logged in today's daily note under a ### GitLab section:
### GitLab
- Reviewed [[GitLab Inbox|mcp-rdx!11]] - Fix Deployment issues
- Addressed mention in [[GitLab Inbox|create-api!185]] - Add search filters
Every refresh, the plugin automatically marks stale GitLab todos as done (todos for MRs that have been merged or closed). This prevents your GitLab todo list from growing unbounded.
api scopemain.js, manifest.json, and styles.css to .obsidian/plugins/gitlab-inbox/gitlab.company.com)api scopeobsidian-inbox (or whatever you like)The token is stored locally in .obsidian/plugins/gitlab-inbox/data.json. It never leaves your machine except to authenticate with your GitLab instance. If you sync your vault via git, add data.json to .gitignore in your .obsidian/plugins/gitlab-inbox/ directory.
This plugin connects to your configured GitLab instance (self-hosted or gitlab.com) via authenticated HTTPS requests to the GitLab REST API. It fetches merge requests, todos, approvals, and discussions. Your personal access token is sent as a PRIVATE-TOKEN header and is stored locally in your vault's plugin data. No telemetry or analytics data is collected.
| Setting | Description | Default |
|---|---|---|
| GitLab hostname | Your GitLab instance hostname | (empty) |
| Personal access token | Token with api scope |
(empty) |
| Setting | Description | Default |
|---|---|---|
| Refresh interval | How often to fetch new data (minutes) | 15 |
| Setting | Description | Default |
|---|---|---|
| Inbox filename | Name of the vault note | GitLab Inbox.md |
| Desktop notifications | Notify on new high-priority items | On |
| Daily note logging | Log checked-off items to daily note | On |
| Daily notes folder | Where your daily notes live | Daily |
| Daily note date format | Moment.js format for filenames | YYYY-MM-DD |
Each section (Needs Your Review, Re-Review, Approved, Your MRs, Mentions & Todos) can be:
Define priority labels with a name and CSS color. Default labels: Now (red), Next (orange), Later (faint).
Rules assign labels to items based on conditions. First match wins - order matters. Available conditions:
| Condition | Needs value | Description |
|---|---|---|
| Review request is older than | days | Matches review MRs by age |
| Someone @mentions me | - | Matches all todo items |
| My pipeline is failing | - | Matches your MRs with failed pipeline |
| Threads waiting for me >= | count | Matches items by unresolved thread count |
| My MR has no reviewer activity for | days | Matches your MRs with stale reviewers |
| MR is a draft | - | Matches draft MRs |
The plugin writes GitLab Inbox.md with:
- [ ] / - [x])[author::Nelson], [size::M], [priority:: now], [threads_waiting::2])^summary block reference embeddable in Home.mdAdd this to your Home.md to see the summary count:
## GitLab Inbox
![[GitLab Inbox#^summary]]
Inbox items automatically appear in any Tasks plugin query that picks up unchecked tasks. No configuration needed - the checkboxes use standard Tasks syntax including priority levels.
GitLab Inbox.md, via TODO.md, or click the check button in the sidebar### GitLab| Command | Description |
|---|---|
| Open GitLab Inbox | Opens the sidebar panel |
| Refresh GitLab Inbox | Manually triggers a refresh |
Both are available from the command palette (Cmd+P).
git clone <repo-url>
cd obsidian-gitlab-inbox
npm install
npm run dev # watch mode with sourcemaps
npm run build # production build (tsc check + minified)
After building, copy to your vault:
cp main.js manifest.json styles.css ~/path/to/vault/.obsidian/plugins/gitlab-inbox/
Then reload the plugin in Obsidian (disable/re-enable or restart).
MIT