Map

middleman

Toolbox toolboxgosveltegithubcode-reviewdashboardlocal-firstkenn-softwareGoMIT โ†ณ show in map Markdown
title
middleman
type
toolbox
summary
Local-first PR and issue review dashboard across GitHub, GitLab, Forgejo and Gitea
tags
go, svelte, github, code-review, dashboard, local-first, kenn-software
language
Go
license
MIT
created
2026-05-22
updated
2026-05-22

Local-first dashboard for maintainers who review pull requests and issues across many repositories and don't want to live in GitHub's notification email firehose. A single Go binary syncs PR/issue data into local SQLite and serves a fast Svelte 5 UI. Part of the kenn-software-suite.

What it does

One unified activity timeline across all your repos โ€” comments, reviews, commits โ€” in flat or threaded view, filterable by time range (24h/7d/30d/90d), event type, repository, and item type. From the same UI you can act on PRs: comment, approve, merge (choosing the commit strategy), mark a draft ready, close/reopen, and star items for quick filtering. Diffs render inline with a collapsible file tree, directory grouping, status badges, and Shiki syntax highlighting. A local kanban board moves PRs through New/Reviewing/Waiting/Awaiting-Merge columns with drag-and-drop โ€” board state is middleman's own, it doesn't touch GitHub labels.

Multi-provider: GitHub, GitHub Enterprise, GitLab, Forgejo, and Gitea. Mutating actions only appear when the provider reports it supports them.

How it works technically

Go backend (~57%) plus a Svelte 5 / TypeScript frontend embedded into the binary. SQLite via the pure-Go modernc.org/sqlite driver, so no CGO; WAL mode. The REST API is built on the Huma framework. The server binds to loopback (127.0.0.1:8091) by design โ€” this is a personal tool, not shared infrastructure โ€” with a configurable base path for reverse-proxy setups and graceful SIGINT/SIGTERM shutdown.

Config defaults to ~/.config/middleman/config.toml: sync interval (5 min default), listen address, activity-feed defaults, and per-repo provider host + token. Tokens are keyed by (provider, host), so separate credentials for distinct hosts (e.g. github.com vs. an Enterprise instance) coexist. Migrations live in internal/db/migrations/, embedded and applied on startup via golang-migrate; a dirty migration state requires deleting and recreating the database.

Embeddable two ways: as a Go library through the Instance type (which exposes an http.Handler), and the frontend ships separately as @middleman/ui for custom builds.

Basic usage

make build          # needs Go 1.26+, plus Bun or mise for the frontend
./middleman         # starts the server, syncs, opens the UI on 127.0.0.1:8091

Keyboard-first: j/k to move, 1/2 to switch views, Escape to close. Dark mode auto-detects system preference with a manual override.

Limitations

  • Loopback-only by design โ€” not meant to be exposed as a team service.
  • Local-only state (kanban columns, stars, worktree links) is non-recoverable if a migration fails and you have to recreate the database.
  • Mutating actions are gated on provider capability reporting.
  • forge โ€” Nesbitt's unified Go CLI/library over the same set of forges; forge is the scripting/agent bridge, middleman is the human review surface.
  • roborev โ€” Kenn Software's continuous code-review tool; complementary (roborev reviews your own commits locally, middleman triages others' PRs on the forge).
  • kenn-software-suite โ€” the rest of the suite.

Repo

github.com/kenn-io/middleman โ€” Go (1.26+) + Svelte 5, MIT, 110 stars, no tagged release yet. No hosted service, telemetry, or accounts.