There's a particular kind of satisfaction that comes from contributing to an open source project and then using the feature yourself. Not from a fork you maintain in a corner, but from the upstream — shipped, in the App Store, on your phone.
That's what happened with Forji.
What Forji Is
If you self-host Forgejo — the community-driven, privacy-respecting Git forge — you probably know the pain of the mobile story. The web interface works, barely, on a phone. There's no official app. Forji fills that gap: a native iOS app, written in Swift, that gives you a proper mobile interface for your Forgejo instance.
I use Forgejo as my personal forge. Forji is one of those apps I genuinely depend on.
The Missing Piece
Forgejo Actions is the CI/CD system — Forgejo's equivalent of GitHub Actions. You define workflows in YAML, they run on your runners, and you get that familiar green/red pipeline feedback. I use it for builds, lints, deployments.
Forji didn't have Actions support. You could browse repos, issues, and pull requests from your phone, but if you wanted to check whether a pipeline passed, you had to open a browser. That small friction adds up when you're just trying to confirm a deploy didn't blow up.
So I decided to add it.
Two Repositories, One Feature
Adding Actions support turned out to involve two separate repositories, which made the contribution more interesting than a typical one-repo patch.
ForgejoKit is the Swift SDK that wraps the Forgejo API. It's what Forji uses to talk to a Forgejo instance. Before the app could show Actions data, the SDK needed to know how to fetch it — workflow runs, job statuses, step logs. This was PR #1 for me in that repo: extending the Swift package to cover the Actions API endpoints.
Forji is the iOS app itself. Once the SDK spoke Actions, the app needed UI to show it — PR #28. A view for listing workflow runs, drilling into jobs and their steps, seeing the status at a glance.
The two-repo split meant getting the foundation right in ForgejoKit first, then building on top of it in Forji. It's a clean separation and the maintainer had clearly thought about it, but it also meant two pull requests, two review cycles, and making sure the abstraction in the SDK made sense before the app code was written.
What the Experience Was Like
Contributing to someone else's codebase is always a bit of a translation exercise. You're not just writing code — you're reading a style, understanding conventions, figuring out how the maintainer thinks about structure. With Forji and ForgejoKit, the code was clean and the patterns were consistent, which made it easier to slot in without creating a mess.
The maintainer was responsive and genuinely helpful. That matters more than people acknowledge. A maintainer who reviews thoughtfully and communicates clearly makes the difference between a contribution that lands and one that sits open for months going stale. This was the former.
I kept my own synced forks on Codeberg (ForgejoKit, Forji) while iterating, which let me test the full stack — SDK changes through app UI — before proposing anything upstream.
Seeing It Ship
Both PRs got merged. And then, not long after, the feature was on the App Store.
That specific sequence — write the code, see it reviewed, see it merged, open the App Store, see it in the release notes, open the app, use the feature — is something I hadn't felt in a while. It's different from shipping something at work, where the context is professional and the audience is customers you may never interact with. This was a small app for a niche platform, maintained by a developer who cared about it, and the feature is one I actually needed.
I can now check my Forgejo Actions runs from my phone without leaving the app.
Why It's Worth It
Open source projects like Forji exist because someone decided to build a thing that scratched their itch and then decided to share it. Contributing back — even a single feature — is how that ecosystem stays healthy. The maintainer gets a feature they didn't have time to build. Users get a better app. You get the odd satisfaction of shipping something real.
If you use Forgejo and have an iPhone, Forji is worth trying (source on Codeberg). And if you see something missing that you know how to build, the maintainer is clearly open to it.