Skip to content
1 min read

fj CLI

fj does for Forgejo what gh does for GitHub: open PRs, triage issues, ship releases, tail Actions logs, drive workflows, all from one signed binary. It tracks the Forgejo /api/v1 surface, is multi-host from day one, and keeps tokens in your OS keychain rather than on disk.

Install

Signed and notarized binaries for macOS and Linux x86_64:

brew tap rasterandstate/tap
brew install fj

Then authenticate once; the token is stored in the macOS Keychain, Linux Secret Service, or Windows Credential Manager:

fj auth login

What it does

  • Repo auto-detection from your git remote. Inside any Forgejo clone, fj pr list knows the repo and host, with no -R plumbing.
  • Pull requests & issues: list, create, view, merge, and comment.
  • Releases: create and update releases and upload assets.
  • Actions: list and watch runs, read logs, and trigger workflow_dispatch.
  • A raw API escape hatch with retry, pagination, and a jq-ish projector:
fj api /repos/foo/bar/issues --paginate -q '.[].title'

On a runner

Install fj inside a workflow with setup-fj-action (checksum-pinned, from your Forgejo releases), then script your forge from CI. fj-fanout-dispatch-action uses it to fan a workflow_dispatch out across many repos.

For agents

fj ships a Claude Code plugin so AI agents can drive it from natural-language requests, plus a --json --json-fields name,number projection mode for scripts. (These very docs were built and shipped with fj.)

Note
Coming from `gh`? The repo's `docs/gh-to-fj.md` maps every command you reach for.
Contributors
  • Stephen Way