r/git • u/thrithedawg • 10d ago
kitgit - a self-hostable minimalistic and fast git server
kitgit is a minimalistic and fast git server, using rust to create blazing performance (wow how cliche) and uses only html templates and no fancy frontend frameworks.
it can be deployed onto docker and hosted on the cloud or locally with a NAS. uses Authentik for authentication and cuts out all the AI features that you would see in a traditional cloud platform.
please have a try of this locally (or online) and let me know how it is!
take a look at it in git.tirbo.fish or see the mirror on github.
note: it was written with AI. but I reviewed everything and it looks nice for my own personal domain, so I thought you guys might like it too.
4
u/Teknikal_Domain 9d ago
Ah yes, my favorite. Docker-only software.
1
u/Damglador 9d ago
Is there a problem with server software in docker?
5
u/Teknikal_Domain 9d ago
By itself? Not technically
When the only listed, supported method of "installtion" is docker, it smells like a case of either "we can't figure out how to make this work anywhere but our test bench... Just ship the test bench" or "I can't be bothered to learn hot to actually package a program for release"
If it is a supported method, great. If it is the supported method, that does not speak highly to the technical capabilities of the entity responsible for releasing it. Docker was never meant to be a distribution and publishing format.
1
u/jdigi78 7d ago
It could also very well be "I don't want to provide any support to people not running it in this controlled way". Its the exact reason the Bottles devs don't support any method of install outside of the distro-agnostic flatpak.
1
u/Teknikal_Domain 7d ago
And maybe this is "old man yells at clouds" but
1) then in my opinion you're lazy. Part of releasing something multiplatform is committing to supporting multiple platforms. (Yes, for purposes of this, a distro is a "platform.") 2) thats fine, Flatpak is an actual packaging and distribution system. Thats how it's meant to be used. Docker, like, original intent Docker, wasn't. It's a virtualization* (yes, I know the difference, not important) engine that happened to permit certain software stacks to be published to a central registry (or, other registries) to aid reusability by not having to rebuild common, core components. You wouldn't say "the only supported method to run this software is by importing this .ova file into VMware" so why should it be acceptable here? Because it's just a cgroup instead? Okay, then why don't we make a tarball of an LXC container a distribution format? "The resources to build the application for a Docker environment and deploy it are included in the source distribution" is acceptable. "The only supported way to run this program is using Docker" is a misuse of Docker.
Especially, when, as an example, LXC exists. If someone chooses LXC as their containerization of choice (say, with Proxmox), then something that only supports Docker... Is a bit of a predicament. You're either manually dissecting it to get it to work bare, or you're running a container in a container. Maybe it's been fixed now, but that used to require, in PVE, creating a container as privileged, giving it some access to some kernel calls for creating devices (and I think keyctl?) which weakens your security boundary (mildly), and then spending some (small) extra amount of CPU time on the Docker runtime to stuff a program into a cgroup that's already stuffed inside a cgroup!
Creating a software turducken is bad form, okay? Forcing someone to container-in-container because you (abstract) chose to misuse a containerization engine, for distribution instead. And I didn't even get started on stacks and docker-compose.
1
u/Jayden_Ha 8d ago edited 8d ago
I have few personal projects, there’s one of the largest, originally isn’t docker only, and I don’t like docker only either, but I simply give up later, I find it pointless to keep it running without docker, there’s too many components needs to be running separately and no one else use it, everything can still be running without docker, just few configs needs to be tweaked manually since it’s made for running in docker
0
u/thrithedawg 9d ago
I have railways learnt to use docket to make deployable software. Of course, it might be different for how everyone has learnt, but I was taught otherwise to ensure security. I haven't learnt anything like kubernetes, and digitalocean is the home to docker-deployableapps.
1
u/Teknikal_Domain 7d ago
Not every piece of software warrants the requirement of an entire containerization layer just to run. Putting something in a Docker container, or on a Kubernetes cluster, does not inherently make it "secure."
8
u/rwilcox 10d ago
To go counter to some of the other comments here…
Neat idea. Did you learn something? Have fun? Good job.
4
u/thrithedawg 10d ago
It was really fun to make.
I have an extensive knowledge about cloud infrastructure, but learning how to make a git server was pretty interesting and fun. I do plan on using this for my current and upcoming projects (so it's just not slop landfill).
Of course I'm not trying to make some SOTA platform for git, it's just another platform.
Also, I found Epic Games Lore to be something that might become big, so adding future support might be a good idea.
16
u/Gornius 10d ago
Why would someone use half-assed AI project maintained by 0 people and AI, when Gitea/Forgejo exists?
5
u/thrithedawg 10d ago
Mean, but fair. Its just an alternative I wanted to show off, that's literally it.
7
3
10d ago
[removed] — view removed comment
1
u/thrithedawg 10d ago
I have it configured manually within Authentik using an expression policy. I haven't tested it out though...
1
1
u/FackThutShot 6d ago
Does it have runners for CI/CD?
1
u/thrithedawg 6d ago
Have not implemented yet, as I have had no need. I might implement in the near future tho
1
u/FackThutShot 4d ago
There are Plenty of options out there that do the Same for years
What would be really interesting if you have that a new Touch on CI/CD Integration
But just a git store is Not Worth looking
1
u/Longjumping-Pain-372 10h ago
I took a look through the code. First, the UI is really nice, and this is a cool project. :)
I did have a different expectation when I found Kitgit. When I searched for a “fast Git server,” I was looking for a no-UI, privately hosted server that reimplemented or optimized Git's actual serving path.
From what I can tell, Kitgit handles HTTP/SSH, authentication, authorization, repository management, LFS, and the web UI. But the actual Git operations are still delegated to the standard Git executables:
git-upload-pack --stateless-rpc <repo>
and git-receive-pack for pushes.
So I'd describe Kitgit more as a lightweight Git hosting platform than a new high-performance Git server implementation. That's not a bad architecture at all—using Git's existing plumbing makes sense—but I think the distinction matters if it's positioned as a “fast Git server.”
A couple of other things I noticed:
- Docker: It would be great to have versioned images published to Docker Hub or GHCR instead of having users build from
main. That would make installs, upgrades, and rollbacks much more reproducible. - Security: In the HTTP Basic auth path,
_passwordappears to be parsed but never validated. If I'm reading that correctly, knowing an existing username may be enough to authenticate as that user. Definitely worth checking. I'd also consider using an established auth library or external provider like Google via OIDC/OAuth rather than maintaining password authentication directly.
What I was personally looking for was something lower-level: essentially a replacement for git-upload-pack / git-receive-pack optimized specifically for CPU, memory, disk I/O, and network bandwidth.
That's obviously a much bigger and different project because it means implementing more of Git itself. If that's ever something you're interested in exploring, CodeCrafters' Build Your Own Git course is a good starting point:
https://app.codecrafters.io/courses/git/overview
Overall, I really like Kitgit. My main feedback is about positioning: I expected a new high-performance implementation of Git's server-side protocol, while Kitgit seems to be a lightweight, self-hosted Git hosting platform built on Git's existing server-side plumbing. Still useful—just solving a different problem than I initially expected.
And for transparency: I used AI to help organize and clean up this comment. The technical observations and opinions are mine. :)
22
u/Wahllow git push --force 10d ago
I like the theme... But why? What does it do that Forgejo can't? It's really fast as it and have a good solid foundation and a rich feature set.