A CLI-first git forge.

cli forge git self-hosted

https://gitbay.org

Commit c1f63e67df

c1f63e67df1aa4e15fdc86a02b83fc89ad3c8cfe

parent: 2e2eeb13b3

Verified · cmc

cmc <hello@cleberg.net> · 2026-08-24T15:04:43Z

add CONTRIBUTING
CONTRIBUTING.org added +67
@@ -0,0 +1,67 @@
1#+title: contributing to gitbay
2
3Development happens on [[https://gitbay.org/krz/gitbay][gitbay.org]] — gitbay is built with gitbay. GitHub
4is not used.
5
6* Getting an account
7
8The instance is currently invite-based. Ask for an invite (hello@gitbay.org)
9and register with the SSH key you will push with:
10
11#+begin_src sh
12ssh git@gitbay.org register --username you --invite <code>
13#+end_src
14
15* The workflow
16
171. Fork and branch:
18 #+begin_src sh
19 gitbay repo fork krz/gitbay # or: ssh git@gitbay.org repo fork krz/gitbay
20 gitbay repo clone you/gitbay && cd gitbay
21 git checkout -b my-change
22 #+end_src
232. Make the change. =go build ./...= and =go test ./...= must be green —
24 the e2e suite drives real =git=, =ssh=, =sshd=, and =gpg= binaries and
25 takes about two minutes.
263. **Sign your commits.** =main= requires verified signatures: register
27 your signing key (=gitbay auth pgp add= for OpenPGP, or sign with a
28 registered SSH key) and make sure your author email is verified on
29 your account. Unsigned work cannot merge.
304. Push and open a merge request:
31 #+begin_src sh
32 git push origin my-change
33 gitbay mr create krz/gitbay --source you/gitbay:my-change --target main --title "..."
34 #+end_src
355. Merges are fast-forward only on =main=; if it moves under you, rebase
36 and re-push (your reviews go stale on force-push — that is by design).
37
38* What holds the design together
39
40Read =docs/roadmap.org= for direction. The invariants that reviews will
41hold you to:
42
43 every control command must work from bare OpenSSH; the registry test
44 enforces reachability, and the CLI stays a thin passthrough
45 one source of truth: SSH and the JSON API front the same handlers
46 the forge never executes repository content, and there is no server
47 signing key — server-created commits are honestly unsigned
48 private repositories are indistinguishable from nonexistent ones on
49 every surface
50 all git access goes through the =git= binary; no go-git
51 features land with e2e coverage against real binaries, not mocks
52
53* Style
54
55Plain, direct prose in code comments, commit messages, and docs — no
56hype, no filler. Commit messages state facts of the change. Match the
57surrounding code; keep diffs surgical.
58
59* Issues
60
61File at [[https://gitbay.org/krz/gitbay/issues][the tracker]] (=gitbay issue create= from a clone). Check
62=docs/roadmap.org= first — it maps the filed issues to phases.
63
64* License
65
660BSD. By contributing you agree your work is released under it. No CLA,
67no copyright assignment; sign-off lines are welcome but not required.