Lindenii Project Forge
Login

server

Lindenii Forge’s main backend daemon

ssh://forge.lindenii.org/forge/-/repos/server

Warning: Due to various recent migrations, viewing non-HEAD refs may be broken.

c12fe030 — Runxi Yu 2025-09-16 00:58:16
Refactor
29f043f9 — Runxi Yu 2025-08-12 02:57:38
Remove forge-specific functions from misc
77a4f530 — Runxi Yu 2025-08-12 02:21:16
Remove colb

Lindenii Forge

Work in progress.

Lindenii Forge aims to be an uncomplicated yet featured software forge, primarily designed for self-hosting by small organizations and individuals.

Implemented features

Planned features

License

We are currently using the GNU Affero General Public License version 3.

The forge software serves its own source at /-/source/.

Contribute

Please submit patches by pushing to contrib/... in the official repo.

Alternatively, send email to forge/-/repos/server@forge.lindenii.runxiyu.org. Note that emailing patches is still experimental.

Mirrors

We have several repo mirrors:

Architecture

We have a mostly monolithic server forged written in Go. PostgreSQL is used to store everything other than Git repositories.

Git repositories currently must be accessible via the local filesystem from the machine running forged, since forged currently uses go-git, git2d via UNIX domain sockets, and git-upload-pack/git-receive-pack subprocesses. In the future, git2d will be expanded to support all operations, removing our dependence on git-upload-pack/git-receive-pack and go-git; git2d will also be extended to support remote IPC via a custom RPC protocol, likely based on SCTP (with TLS via RFC 3436).

git2d

git2d is a Git server daemon written in C, which uses libgit2 to handle Git operations.

int cmd_index(git_repository * repo, struct bare_writer *writer);
int cmd_treeraw(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_resolve_ref(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_list_branches(git_repository * repo, struct bare_writer *writer);
int cmd_format_patch(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_merge_base(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_log(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_tree_list_by_oid(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_write_tree(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_blob_write(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_commit_tree_oid(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_commit_create(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_update_ref(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_commit_info(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
int cmd_init_repo(const char *path, struct bare_reader *reader, struct bare_writer *writer);

We are planning to rewrite git2d in Hare, using hare-git when it's ready.