---
title: The roundabout
source-url: https://roundabout-host.com/roundabout/roundabout
topics: ["web", "flask", "git", "software", "python", "agpl", "roundabout", "roundabout-host"]
---

The roundabout is a **git repository hosting** server software. It is designed to be a complete
alternative to GitHub, GitLab, BitBucket, Gogs/Gitea/Forgejo, and other similar services. It
is still in development and not yet ready for production use. As of version 0.3.0 development
stage, it supports:

* User registration
* Repository creation
* User access control
* Smart Git over HTTP(S) protocol
* Web interface for repository browsing
* User profiles and social features
* Forum for repositories, useful for issue tracking
* Notifications, including email notifications
* Pull requests
* Favourite repositories (subscriptions)
* Commit views and diffs
* Themeing
* Static site hosting
* Really basic search
* Markdown formatting for comments, Markdown file rendering
* Comments on commit diffs
* Partial XML API, will be expanded
* Decentralised merging
* Forum labels
* Static site hosting
* Organisations by trusting users to take actions on your behalf

For now, it doesn't support, but I won't consider it complete without:
* Decentralised social features (merging is already decentralised)
* CI/CD
* Repository metadata (licence, topics, language, etc.)
* Package distribution
* Code syntax highlighting
* Any kind of statistics
* Web-based code editing
* Users changing passwords
* Admin panel
* User mentions
* Git over SSH

It won't support:
* Wikis (why have another interface just for markdown, when you can use your own repo and publish
  it as a static site?)
* Issues (forum does it already)

I'm still not sure about:
* Project boards (what about making label grouping instead?)
* Advertising (I want a truly JS-free, libre advertising network)
* Paste service (does it really work well with Git? Couldn't you just use a repo for that?)
* Native clients (Android development is hard, iOS is hostile, and on desktop it's not needed,
  there are GUI git clients that work with any server, for social features web is fine)
* IDE plugins (sounds good, but it's hard work)

The roundabout is written in flask, a Python web framework. It uses SQLAlchemy for database
management. For light UI interactivity it uses htmx and some vanilla JS. It does some GitPython
calls for basic operations, but mostly calls git with subprocess. Repositories are non-bare
because this allows the server to understand the repository and can lead to some performance
gains since querying git is not required. The server is designed to be run on a single machine
but decentralisation will be added in the future, but it won't be automatic, you'll have to
choose a server to use.

roundabout-host.com
-------------------

The official instance of the roundabout, roundabout-host, is hosted at
[roundabout-host.com](https://roundabout-host.com). Anyone can register and create repositories
there. However, we ask that you do not rely on it and always keep your repos locally as well.
Uptime is not guaranteed, and data loss is possible. The server is not backed up.

In the future it may require payment for some features, but **the program it runs will always
be free**. Payment will not be required to lift artificial limitations, but to support
server-intensive features like CI/CD. Some free usage for useful projects will always be
provided on demand.

Additionally, we may have advertising on the site. It will be unobtrusive and not track you.
Logged-in users will be able to disable it for free. We will never have video, animation, sound,
popups, overlays, or JS ads. Ads will be relevant to the content of the site, but they won't
be personalised or use cookies. This just means no car, insurance, supermarket, or other
unrelated ads. Most likely we will use EthicalAds, which is itself free software.

The roundabout program is licensed under the AGPL licence, version 3.0 or, at your option, any
later version. Whatever I decide to do for roundabout-host, I can't pull the rug from under
you, you can always run your own instance.
