grumpydog.dev
grumpydog.dev

the non-BS, tech minimalist blog

git.grumpydog.dev

Git Self-Hosting With Gitwind

03 Jan, 2026

Using platforms like Github, Gitlab or any other have its advantages. First, your projects are relatively “safe”, in the sense you’ll prevent losing files from time to time, due to some random event.

Besides if you consider the social factor and project discoverability, Github is probably your best bet.

However, I feel that most of the time we’re trapped by complex terms of service, rules and policies. Honestly, who reads these ever-changing documents?

As a developer, you probably also feels the need to customize things a little. A color here and there, another logo, controlling who sees what, and so on.

Maybe you’re just looking for a simple solution, like a portfolio site. Something more private, that you can share only with companies or acquaintances.

In this case, you should consider a self-hosting Git server.

How hard it can be?… It depends. Not really.

I’d say that is easy, and you can start with the Git documentation itself. It provides all the steps to properly create your system user and configure the right permissions.

In short, everything starts with the following command to create a “bare” repository in Git:

$ git init --bare

After setting up your repos on the server, you may want to share your code with the world.

Then comes Gitwind.

A couple months ago, I decided to code something myself using a modern CSS framework, Tailwind.

Like it or not, Tailwind helps on abstracting most of the gritty details of handling responsiveness and many other things.

But most importantly, Tailwind is a “utility first” framework, so we can avoid dealing with CSS all the time. It makes me more productivity, abstracting a lot of compatibility details.

Also, I’ve chosen Sinatra as my backend, which is lean and extensible.

Sinatra is lightweight and simple, which allows us to run under very limited memory constraints. Plus, if an ORM is required at some moment we can use Sequel (it integrates easily with Sinatra).

Gitwind is still on the early stages, and do not provide all the features as the traditional platforms. Some will not even exist in a near future.

For now, it works in the following way:

  • You clone the Gitwind repo
  • Install dependencies running “bundle install”
  • You run it with REPOS_DIR=/my-public-repos bin/prod

And that’s it.

Just remember that your public repos directory shouln’t be a bare repo, or Rugged (the Git Ruby lib) will fail (I’ll need to handle that more adequately soon).

If you need to perform some customization, just run it the the bin/dev command. It’ll listen for changes in files.