Leaving
You can leave at any time, on any plan. Nothing here is a paid feature, a support ticket, or a conversation you have to have with us first.
This page is referenced by section 10.9 of the Terms of Service and forms part of them.
The short version
- Export your whole organisation yourself, whenever you like, from Settings > Export. No approval, no ticket.
- Or ask us, and the switch completes within 30 days.
- Your data stays retrievable for at least 30 days afterwards.
- It costs nothing. There is no exit fee, egress charge, or migration fee, and there will not be one.
What you get, and what format it is in
| What | Format | Moves cleanly to |
|---|---|---|
| Repositories, all history, branches, tags | Standard Git | Anything that speaks Git |
| Issues, pull requests, comments, labels, milestones, releases | One set of YAML files per repository, inside the export archive | Forgejo or Gitea, with restore-repo |
| Container images | OCI, pulled with any OCI client | Any OCI registry |
| Other packages (npm, Maven, PyPI, and the rest) | Each ecosystem's own format, pulled with its own client | Any registry for that ecosystem |
| CI workflows | YAML in your repository, already yours | Anything that runs Actions-style workflows |
| Teams, members and permissions | Described in the archive's manifest.yml | Nothing automatically. You read the file and recreate them |
What does not transfer cleanly
Being straight about this is more useful than a promise.
- Git history always moves. It is the one thing we can say without qualification. A clone is a complete copy, and it is complete the moment you make it.
- The platform layer is messier, and that is true of every forge, not only us. Gitea's own documentation is blunt about it. An instance must be shut down while a backup is taken. There is no recovery command, so restore is manual. Converting between database types on restore is not well tested. Budget time for it.
- A description or release note that starts with a blank line or a space breaks the restore. The export still writes the file; it is the import at the other end that rejects it. The bug is in the YAML library both Forgejo and Gitea use, so it is upstream of both of us, and we will tell you if your data trips it.
- CI run history and logs do not move. Neither do build caches. Your workflows do; their past output does not.
- Access tokens, deploy keys and webhook secrets do not move, by design. You reissue them at the other end.
- Anything that depends on our runners (the
codebahn-small,-mediumand-largelabels, andubuntu-latest, which is an alias forcodebahn-small) needs itsruns-onchanged to whatever the new host calls its runners.
Doing it yourself
- Clone every repository, or add the new host as a second remote and push to it. This alone rescues all your code and history.
- For everything around the code, export the organisation from Settings > Export and restore each repository at the destination with Forgejo's
restore-repo. Forgejo's migration tool can also pull from us instead, but it works one repository at a time. - Pull any container images and packages you want to keep.
- Cancel from your billing page when you are done. Cancelling does not delete anything; see the retention table below.
Asking us to do it
Email hello@codebahn.net with where you are going. Within 30 days we will produce a full export, help you land it at the destination, and tell you about anything we expect to go wrong on the way. If something makes 30 days impossible we will say so in writing within 14 working days of your request, explain why, and agree a new date with you rather than let it drift.
We do not charge for this.
What happens to your data afterwards
| When | What |
|---|---|
| Day 0 | Subscription ends or the switch completes. Your organisation goes read-only. You can still clone and export everything. |
| Days 0-30 | Retrieval window. Everything stays readable. |
| After 30 days | We delete Customer Data within 90 days. |
| Within 90 days of deletion | Backups containing your data are rotated out. |
Why this page exists
Partly because the EU Data Act has applied to cloud providers since September 2025. It requires us to tell you how switching works and which formats your data comes out in, to finish a switch within 30 days, and to keep your data retrievable for 30 days after that. So the first three promises above are not generosity; they are the floor.
Charging is the part where the law has not caught up yet. Until 12 January 2027 a provider may still bill you the cost of switching, data egress included. After that date charging is prohibited outright. We do not charge today, and we will not start in the months we are still allowed to.
Mostly because a page that only appears once you are trying to leave is not worth much. This one is written on the assumption you are reading it before you buy.