I did my Github -> self-hosted Gitlab -> Gitea -> Forgejo journey over the years, and I haven't looked back.
Forgejo is great and it's probably going to become even greater once federation is done (having distributed forks and PRs across multiple instances solves the fragmentation problem of self-hosted solutions).
And I lost my trust in Gitea once it spun off a for-profit branch backed by VC money (which was exactly the reason why it was forked into Forgejo).
The only thing I lost from Gitlab is the out-of-the-box CI/CD platform. But I could migrate my pipelines to Drone CI and trigger them via webhooks. Just keep in mind that, depending on the complexity of your Gitlab pipelines, this may not always be an option. Anyway, for me hosting a Gitlab server that hogged up 5GB of RAM to serve a couple of small projects was a big no-no. Forgejo takes 500MB of RAM at peak.
Forgejo is great and it's probably going to become even greater once federation is done (having distributed forks and PRs across multiple instances solves the fragmentation problem of self-hosted solutions).
And I lost my trust in Gitea once it spun off a for-profit branch backed by VC money (which was exactly the reason why it was forked into Forgejo).
The only thing I lost from Gitlab is the out-of-the-box CI/CD platform. But I could migrate my pipelines to Drone CI and trigger them via webhooks. Just keep in mind that, depending on the complexity of your Gitlab pipelines, this may not always be an option. Anyway, for me hosting a Gitlab server that hogged up 5GB of RAM to serve a couple of small projects was a big no-no. Forgejo takes 500MB of RAM at peak.