vectrum.cc · A self-hosted, multi-user GitHub built with Next.js. Repositories are real bare git repositories on disk, and you push to them with plain git over SSH or HTTPS.
C new issue, J/K move, Enter open, S/P/A/L set status, priority, assignee, labelsRequires Node.js 22.5+ (for the built-in node:sqlite) and git on the PATH.
bun install
bun dev
Open http://localhost:3000, sign up, and create a repository.
~/.ssh/id_ed25519.pub) under Settings → SSH keys.ssh -T -p 2222 git@localhostgit remote add origin ssh://git@localhost:2222/<you>/<repo>.git
git push -u origin main
Generate a token under Settings → API tokens and use it as the password when git asks (any username works):
git clone http://localhost:3000/<you>/<repo>.git
# Username: <you> Password: vec_…
Anonymous users can clone public repositories without a token.
| Variable | Default | Purpose |
|---|---|---|
DATA_ROOT | ./data | Where repositories, the database and the SSH host key live |
SSH_PORT | 2222 | Port of the built-in SSH server |
SSH_LISTEN_HOST | 0.0.0.0 | Interface the SSH server binds to |
SSH_HOST | request host | Host name shown in SSH clone URLs, e.g. vectrum.cc |
SSH_DISABLED | — | Set to 1 to not start the SSH server |
Data layout:
data/
app.db users, sessions, keys, tokens, repos, issues (SQLite)
ssh_host_ed25519_key generated on first start
repos/<owner>/<repo>.git bare git repositories
Secure when X-Forwarded-Proto: https is set.nosniff and a sandboxing CSP, so repository HTML/SVG can't run scripts in the app's origin.lib/db.ts: SQLite schema and connectionlib/users.ts, lib/auth.ts: accounts, password hashing, sessionslib/repos.ts: repository records, permissions (repoAccess), collaboratorslib/issues.ts, lib/issue-meta.ts: issue tracker data and its shared vocabulary (statuses, priorities); UI in components/issues/lib/keys.ts, lib/tokens.ts: SSH keys and API tokenslib/git.ts, lib/git-write.ts: reading from and committing to bare repositorieslib/git-http.ts, lib/ssh-server.ts: git transports (started from instrumentation.ts)app/actions/*: server actions, each re-checking the session and permissions