Forgejo v17.0 is out, the project’s quarterly major, released on 15 October. It is non-LTS, supported until 28 January 2027, and lands with the 16.0 branch heading for end of life on 29 October. The release notes ask operators to read all breaking changes before upgrading. The webhooks need doing by hand.

The breaking changes

The widest-reaching one: absolute links (those starting with /) in rendered repository documents now resolve against the repository root, not the instance root. The project frames it as parity: “This change increases the compatibility with other Git forges and thus, makes migrations to Forgejo even easier.” Absolute links in issue and pull request descriptions and comments still resolve against the instance’s root. Two smaller ones from the notes: durations in app.ini now parse strictly, and the default log becomes forgejo.log, with gitea.log a symlink for backward compatibility.

The webhook migration

The action-required section is about Actions webhooks. Action run events are replaced by workflow run events; the old ones are deprecated for removal in a future version. The new events fire on job status changes, with statuses like “waiting” or “cancelled” selectable; the old ones signaled completions only. Existing webhooks cannot move automatically: headers (X-*-Event, X-*-Event-Type) and the action key changed, “which might break existing receivers,” and completion notifications now wait for a run’s last job. In the project’s words: “inspect existing webhooks and manually migrate them to the workflow run events after verifying that the webhook receivers can process them without issues.”

An example Forgejo Actions job summary with test results and a rendered Mermaid git graph, above the run's step list.
An example Forgejo Actions run: the job summary, with test results and a rendered Mermaid diagram, above the step list. Image: Forgejo.

What else is new

A FUNDING.yml adds a “Donate” button to repository and profile pages, web UI only for now. While writing, # autocompletes issues and pull requests; an exclamation mark narrows to pull requests. With [service].ADD_MEMBERS_BY_INVITATIONS = true, new organization members get an invitation instead of instant access; invitations expire after 14 days by default. The Git LFS overhaul is mostly under the hood, with “navigation and overview improvements in the LFS settings, new views to discover the commits that refer to a given LFS file, and better handling of pointers.”

Job summaries are the Actions headline: Markdown with tables, Mermaid diagrams and KaTeX, shown above the logs, assembled from $FORGEJO_STEP_SUMMARY with $GITHUB_STEP_SUMMARY supported for existing actions; they need Forgejo Runner 13.2 or newer. Migrations extend to Bitbucket Data Center, including pull requests with their reviews and comments; Bitbucket Cloud is not covered. The docs add a backup-and-restore guide naming the secrets restoration depends on.

The upgrade

Upgrading is replacing the binary or container image; the 17.0 tag tracks patch releases for container users. A full backup first is “strongly recommended,” and a test instance runs at v17.next.forgejo.org. Anyone not ready for the quarterly cadence still has the 15.0 LTS line, supported into July 2027.

My read

A forge release is judged by what it does to running instances, and this list is short: one rendering change, a stricter config parser, a renamed log file, and webhooks only a person can move. The webhook migration is the one real task; everything else is reading and replacing a binary.

Source: the v17.0 announcement, the v17.0.0 release and the full release notes.