The missing productivity layer for GitLab boards.
GitLab Ninja is a browser extension that transforms your GitLab boards into a time-tracking powerhouse. See time estimates at a glance, set them in one click, auto-assign issues, and never lose track of your team's budget — all without leaving the board.
Zero data collection. Zero external servers. Your data stays in your browser.
Color-coded badges appear directly on every issue card showing spent / estimate (e.g. 2h / 4h). Blue means on track. Red means over budget. Supports hours, days, weeks, and minutes.
Hover over any card to reveal one-click estimate buttons — 1h, 2h, 4h, 1d. Set estimates without ever opening the issue.
Each board column gets a live summary showing total spent vs. total estimated. A
Create an issue inline on the board and it's automatically assigned to you. No more forgetting to set the assignee.
A dedicated modal to set precise time estimates on any issue, right from the board view.
Per-board settings panel lets you toggle individual features on or off. Your preferences are saved per board.
Automatically adapts to your GitLab light or dark theme.
| Platform | Support |
|---|---|
| GitLab.com | ✅ |
| Self-hosted GitLab | ✅ |
| Chrome / Edge / Brave | ✅ |
| Firefox | ✅ |
| Safari | ✅ (via converter) |
git clone https://github.com/AndreasGassmann/gitlab-ninja.git
cd gitlab-ninja
npm install
npm run build- Go to
chrome://extensions/ - Enable Developer mode (top right)
- Click Load unpacked → select the
dist/folder
- Go to
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on → select
dist/manifest_firefox.json
- Click the 🥷 icon in your toolbar
- Go to Settings and enter your GitLab URL + Personal Access Token
- Navigate to any GitLab board — features activate automatically
Once installed, just open any GitLab board. GitLab Ninja enhances it automatically:
- Time badges appear on every issue card
- Estimate buttons show on hover
- Column totals appear at the top of each list
- New issues are auto-assigned to you
- Board settings gear icon lets you toggle features per board
- Node.js 24+
- npm
| Command | Description |
|---|---|
npm run dev |
Watch mode — rebuilds on file changes |
npm run build |
Production build to dist/ |
npm run lint |
ESLint check |
npm run format |
Prettier auto-format |
npm run format:check |
Prettier check |
npm run type-check |
TypeScript type validation |
npm run package:all |
Package for Chrome, Firefox, and Safari |
npm run clean |
Remove dist/ |
npm run build
npm run package:allCreates:
gitlab-ninja-chrome-v1.0.0.zipgitlab-ninja-firefox-v1.0.0.zipgitlab-ninja-safari-v1.0.0.zip
See DEVELOPMENT.md for architecture overview, feature module pattern, and debugging tips.
gitlab-ninja/
├── src/
│ ├── content.ts # Content script — main entry point
│ ├── injected.ts # Page-context script (fetch interception)
│ ├── popup.ts # Extension popup UI
│ ├── popup.html
│ ├── options.ts # Settings page
│ ├── options.html
│ ├── background.ts # Service worker (alarms, notifications)
│ ├── types.ts # Shared TypeScript types
│ ├── styles.css # Injected styles
│ ├── features/
│ │ ├── autoAssign.ts # Auto-assignment on issue creation
│ │ ├── timeTracking.ts # Time tracking badge display
│ │ ├── columnSummary.ts # Column time totals
│ │ ├── timeEstimateModal.ts # Estimate modal UI
│ │ ├── newIssueEstimate.ts # Estimate for newly created issues
│ │ ├── editMode.ts # Board edit mode enhancements
│ │ └── boardSettings.ts # Per-board settings panel
│ └── utils/
│ ├── api.ts # API request helpers
│ ├── gitlabApi.ts # GitLab REST/GraphQL API client
│ ├── apiFallback.ts # API fallback strategies
│ ├── time.ts # Time parsing & formatting
│ ├── dom.ts # DOM utilities
│ ├── constants.ts # Shared constants
│ └── themeManager.ts # Light/dark theme detection
├── manifests/ # Browser-specific manifests
│ ├── manifest.json # Chrome (MV3)
│ ├── manifest_firefox.json # Firefox (MV2)
│ └── manifest_safari.json # Safari
├── icons/ # Extension icons (16, 48, 128px)
├── scripts/
│ └── package.sh # Packaging script for all browsers
├── store/ # Store listing assets
├── webpack.config.js
├── tsconfig.json
└── package.json
Extension not activating?
- Confirm you're on a board page (URL contains
/boards) - Check the browser console for "GitLab Ninja" log messages
- Verify your GitLab URL is configured in Settings
- Try refreshing the page
Build errors?
npm run clean && npm install && npm run buildContributions are welcome! Please read CONTRIBUTING.md before getting started.
- Fork the repo
- Create a feature branch from
main - Run
npm run lint && npm run type-check && npm run build - Test in both Chrome and Firefox
- Open a pull request
GitLab Ninja collects zero data. No analytics, no telemetry, no external servers. Your API token and settings are stored locally in your browser. API requests go only to your own GitLab instance. See the full Privacy Policy.
MIT — use it, fork it, make it your own.








