<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Forgejo News</title><description>Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.</description><link>https://forgejo.org/</link><item><title>Forgejo monthly report - January 2026</title><link>https://forgejo.org/2026-01-monthly-report/</link><guid isPermaLink="true">https://forgejo.org/2026-01-monthly-report/</guid><description>Forgejo v14 was released on time. Some regressions were quickly escalated and fixed. A security release was published for v11 and v13. A lot of work has been done around the runner – new features and QA. There are ongoing discussions about improving the issue reporting workflow and the license and copyright attribution in the codebase. Work on federation is progressing. The website was moved to our own infrastructure.</description><pubDate>Sat, 31 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is intended to provide an overview of activities in the Forgejo space over the past month.
Additionally, this report covers the previous month, December 2025, as well.
If you would like to help, please get in touch via &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or take part in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo v14&lt;/h3&gt;
&lt;p&gt;As planned, &lt;a href=&quot;/2026-01-release-v14-0&quot;&gt;Forgejo v14.0.0&lt;/a&gt; was released on January 15.
However, the days following the release were busy for contributors as regressions and upgrade problems escalated quickly.&lt;/p&gt;
&lt;p&gt;The new &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9830&quot;&gt;stateless CSRF protection&lt;/a&gt; in Forgejo v14 caused incompatibility issues when Forgejo was accessed via non-HTTPS connections.
This issue &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/10849&quot;&gt;was discovered on the day&lt;/a&gt; of the release.
The referrer policy in the HTML template was set to &lt;code&gt;no-referrer&lt;/code&gt;, which prevented the browser from sending the &lt;code&gt;Origin&lt;/code&gt; header when posting to Forgejo pages.
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10851&quot;&gt;A patch&lt;/a&gt; that changed the referrer policy to &lt;code&gt;strict-origin&lt;/code&gt; was included in Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v14.0.1&quot;&gt;v14.0.1&lt;/a&gt;, released on January 17.&lt;/p&gt;
&lt;p&gt;Unfortunately, a few Forgejo administrators experienced issues with Forgejo v14 database upgrades.
One database mysteriously &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/10848&quot;&gt;contained no primary keys&lt;/a&gt;, and another had an &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/10887&quot;&gt;unexpected SQLite table definition format&lt;/a&gt;.
Such database quirks tend to be common with self-hosted systems, and Forgejo can learn from these situations to make administration easier in the future.
Forgejo will soon issue warnings for &lt;a href=&quot;https://code.forgejo.org/xorm/xorm/pulls/60&quot;&gt;primary key schema configuration mismatches&lt;/a&gt; and use &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10888&quot;&gt;more typical SQLite tools&lt;/a&gt; to decrease the risk of these issues.&lt;/p&gt;
&lt;p&gt;Forgejo v14 introduced the ability for a Forgejo Runner to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10602&quot;&gt;fetch multiple tasks with one API call&lt;/a&gt;.
However, following its deployment on Codeberg, it was discovered that various Forgejo CI jobs were &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/1302&quot;&gt;stuck in the &quot;Set up job&quot; phase&lt;/a&gt; and did not execute.
The root cause was an intermittent bug in the new multiple task implementation that caused some jobs to be sent to the runner, which the runner then ignored.
The Forgejo Runner &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/1303&quot;&gt;was patched&lt;/a&gt; to support the unexpected output, and version 12.5.3 was released.
In addition, Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10899&quot;&gt;was patched&lt;/a&gt; to not provide the unexpected output from v14.0.2 onwards.&lt;/p&gt;
&lt;p&gt;On January 29, Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v14.0.2&quot;&gt;v14.0.2&lt;/a&gt; was released with general bug fixes and dependency updates.&lt;/p&gt;
&lt;h3&gt;Security releases: Forgejo v11 and v13&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues/49&quot;&gt;Security releases&lt;/a&gt; were published: &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v11.0.9&quot;&gt;v11.0.9&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v13.0.4&quot;&gt;v13.0.4&lt;/a&gt; on January 8.&lt;/p&gt;
&lt;p&gt;The security team fixed multiple low-severity vulnerabilities.
Among other things, there was a fix for instances where email notifications were disabled which could cause a panic when a new commit was made to a PR against a protected branch.
Another fix addressed the privacy of user-configured pronouns.
Previously, the &lt;code&gt;/repos/{owner}/{repo}&lt;/code&gt; API on public repositories allowed unauthenticated users to access the repository owner&apos;s configured pronouns, even when access was limited to authenticated users.&lt;/p&gt;
&lt;h3&gt;Forgejo runner v12&lt;/h3&gt;
&lt;p&gt;Over the past two months the Forgejo runner received five minor updates and nine patch releases.
These releases include multiple new features and bug fixes.&lt;/p&gt;
&lt;h4&gt;LXC Logging Enhancements&lt;/h4&gt;
&lt;p&gt;Forgejo relies heavily on Forgejo Runner&apos;s ability to run LXC containers for testing purposes.
Efforts have been made to address an issue where CI logs occasionally lack critical information necessary for understanding a CI failure.
This typically manifests as a test failure where the failure log content is missing at the end.
A technical investigation revealed two issues.&lt;/p&gt;
&lt;p&gt;The simpler issue was that Forgejo Runner had a race condition when shutting down logging in LXC and host-based executor modes.
This could cause the end of the logs to be trimmed.
&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/1270&quot;&gt;A patch&lt;/a&gt; that addresses this issue was included in Runner &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v12.5.1&quot;&gt;v12.5.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The second issue was that, when executing a command in an LXC container via lxc-attach, the command is subject to rare &quot;short writes&quot; as lxc-attach forwards the log data through the involved pseudo-terminals.
This causes brief periods where the logs disappear if the target command writes too quickly for the output buffers to remain available for writing.
Forgejo Runner has an in-place workaround that improves but doesn&apos;t completely eliminate the problem.
Forgejo is not the first to identify this issue, and it has helped validate two proposed LXC patches.
&lt;a href=&quot;https://github.com/lxc/lxc/pull/4633&quot;&gt;A patch&lt;/a&gt; has landed in LXC that will address the problem fully when it is available for Debian systems.&lt;/p&gt;
&lt;h3&gt;Forgejo Helm chart v16 and v15&lt;/h3&gt;
&lt;p&gt;The v15 version of the Forgejo Helm chart received one &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v15.0.4&quot;&gt;patch release&lt;/a&gt;, which corresponds to the Forgejo v13.0.4 release.
Additionally, a &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v15.1.0&quot;&gt;minor release&lt;/a&gt; was made, adding the dnsPolicy configuration option to the Helm chart and setting the Recreate strategy as the default for restarts.&lt;/p&gt;
&lt;p&gt;Following the release of Forgejo v14, the Forgejo Helm chart received a &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v16.0.0&quot;&gt;new major release&lt;/a&gt; to update the default Forgejo version.
Two patch releases followed for the corresponding v14 patch releases: &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v16.0.1&quot;&gt;v16.0.1&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v16.0.2&quot;&gt;v16.0.2&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Discussions&lt;/h2&gt;
&lt;h3&gt;Mentions of all users in the main chat room&lt;/h3&gt;
&lt;p&gt;In the main chat room on Matrix, users expressed their dislike of room mentions for announcements (new Forgejo releases, the monthly report, etc).
A discussion &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/435&quot;&gt;has been opened&lt;/a&gt; to further investigate this issue and hopefully find a solution.&lt;/p&gt;
&lt;p&gt;If you use Matrix and are part of the main chat room, &lt;strong&gt;please participate&lt;/strong&gt; in the discussion to help find a solution.
&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/435#issuecomment-10239146&quot;&gt;Your vote on how you feel&lt;/a&gt; about it and what you would like to happen is especially appreciated.&lt;/p&gt;
&lt;h3&gt;License and copyright attributions in Forgejo&apos;s codebase&lt;/h3&gt;
&lt;p&gt;A discussion &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/431&quot;&gt;has been opened&lt;/a&gt; regarding improving the copyright attributions and license assertions in the Forgejo codebase.&lt;/p&gt;
&lt;p&gt;Due to the variety of copyright attributions and licenses in Forgejo&apos;s codebase, it could be difficult to determine the correct attributions and licenses in some cases.
In the discussion, it was proposed that &lt;a href=&quot;https://reuse.software/&quot;&gt;REUSE&lt;/a&gt; could be used to solve this issue.
Implementing REUSE would require every file to have a license and copyright attribution.
If this is not possible for a file, e.g., if it is binary or test data, then the license and copyright attribution must be defined in a separate file.
This strategy could also be enforced via CI checks.&lt;/p&gt;
&lt;p&gt;Making the entire Forgejo codebase REUSE compliant will be a significant undertaking.
Therefore, the suggestion was made to start with a smaller codebase if the proposal is accepted.&lt;/p&gt;
&lt;p&gt;If you are familiar with REUSE or similar tools and are motivated to support this effort, feel free to participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/431&quot;&gt;discussion&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Improving issue to implementation workflow&lt;/h3&gt;
&lt;p&gt;Over the past month, work has continued on improving the issue-to-implementation workflow.
To implement a feature, it is crucial first to understand the problem and then to design a solution that addresses it.
Only then can the implementation start.&lt;/p&gt;
&lt;p&gt;The current issue creation workflow caused a lot of confusion for reporters and often lacked the necessary information to fully understand the problem.
Therefore, new templates have been designed over the last few months in the hope of improving the workflow.
To continue improving the workflow, a corresponding &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/415&quot;&gt;discussion&lt;/a&gt; exists.&lt;/p&gt;
&lt;p&gt;If you have reported issues to Forgejo and would like to help improve the workflow, please participate in the &lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues/71&quot;&gt;feedback gathering process&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Notable Pull Requests&lt;/h2&gt;
&lt;h3&gt;Actions: Reusable workflow expansion&lt;/h3&gt;
&lt;p&gt;Reusable workflows are a Forgejo Actions capability that is often used to replicate a common CI job across multiple repositories.
This allows one workflow to include another.
For example, one workflow can run a different workflow from another repository:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;jobs:
  caller:
    uses: my-org/workflow-library/.forgejo/workflows/reusable.yml@main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However, since this capability was implemented, it has been limited.
The &lt;code&gt;runs-on&lt;/code&gt; field was required, which prevented the target workflow from having multiple jobs with different runners.
Additionally, all of the logs from the target workflow were displayed in the UI as a single &quot;Set up job&quot; log entry.
This made the capability functional for some cases, but difficult to use and unable to meet more complex needs.&lt;/p&gt;
&lt;p&gt;In December, a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/9768#issuecomment-8828016&quot;&gt;significant rework&lt;/a&gt; was completed across Forgejo and Forgejo Runner to make these workflows more usable and function more in line with users&apos; expectations.
This feature has been merged into the next major release, Forgejo 15, and will be enabled by removing the top-level &lt;code&gt;runs-on&lt;/code&gt; field.&lt;/p&gt;
&lt;h3&gt;Forgejo Runner: Unsupported Platforms&lt;/h3&gt;
&lt;p&gt;Although Forgejo Runner officially supports execution on Linux, a wide range of projects use it in environments that Forgejo does not officially support.
Contributors have attempted to incorporate patches to ensure the runner builds on these systems, but that support has frequently regressed unintentionally.&lt;/p&gt;
&lt;p&gt;Currently, Forgejo Runner is &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/1295&quot;&gt;built on a set of unsupported platforms&lt;/a&gt; during CI workflows.
These platforms remain unsupported because no tests are executed on them during Forgejo Runner CI, and no release builds are provided.
However, this allows contributors to determine whether a change will cause support to regress for other projects and make informed decisions.
The goal of this change is to minimize disruption to users on unsupported platforms without burdening contributors&apos; resources.&lt;/p&gt;
&lt;p&gt;The unsupported platforms on which Forgejo Runner is built are: DragonFly BSD, FreeBSD, Illumos, NetBSD, OpenBSD, macOS, and Windows.&lt;/p&gt;
&lt;h3&gt;Auto-linking container images to repositories&lt;/h3&gt;
&lt;p&gt;Packages in the package registry are uploaded to either an organization or a user.
Previously, packages had to be manually linked to a repository in order to be visible in it.&lt;/p&gt;
&lt;p&gt;To simplify this process, the handling of packages &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10617&quot;&gt;has been improved&lt;/a&gt;.
Now, when a package is created, it is automatically linked to a repository based on either the package name or the &lt;code&gt;org.opencontainers.image.source&lt;/code&gt; Docker label.&lt;/p&gt;
&lt;p&gt;This feature will be available with the upcoming major release, Forgejo v15.&lt;/p&gt;
&lt;h3&gt;Generate merge commit message in non-mergeable PRs&lt;/h3&gt;
&lt;p&gt;Previously, merge commit messages generated from the defined template could not be displayed if the pull request was in a non-mergeable state.
This meant that, for example, if the conflict was resolved locally and the pull request then underwent manual merging, the merge message also had to be created manually.&lt;/p&gt;
&lt;p&gt;This issue has now been &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10022&quot;&gt;resolved with the integration&lt;/a&gt; of a new feature that allows the generation of the merge message in the pull request, making it easily accessible for copying.&lt;/p&gt;
&lt;p&gt;This feature will also be available with Forgejo v15.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Progress has been made on improving the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10074&quot;&gt;handling of HTTP message signatures&lt;/a&gt;.
The goal is to to improve scalability and reduce resource consumption by preventing the redundant saving of public keys.&lt;/p&gt;
&lt;p&gt;Additionally, steady progress is being made on integrating &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10206&quot;&gt;support for RFC9421 signatures&lt;/a&gt;.
RFC9421 is used for creating, encoding and verifying digital signatures or message authentication codes over components of an HTTP message.
It is an Internet standard that supersedes the commonly used draft version of the same standard on the Fediverse.&lt;/p&gt;
&lt;p&gt;Work has also begun on federated searching for remote actors.
It uses the WebFinger protocol under the hood, which is a standard for discovering remote actors.
This foundational work enables the search for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10107&quot;&gt;remote repositories&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10929&quot;&gt;other remote content&lt;/a&gt; in the Forgejo explore page.&lt;/p&gt;
&lt;p&gt;Overall, federation-related work is steadily progressing, but will still take a lot of time.
If you plan to try the existing federation features, please carefully read the &lt;a href=&quot;https://forgejo.org/faq/#what-about-forge-federation&quot;&gt;warning section in the FAQ&lt;/a&gt; first.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;Some maintenance work has been done on the translations.&lt;/p&gt;
&lt;p&gt;Indentation in the JSON files &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10661&quot;&gt;has been changed&lt;/a&gt; from spaces to tabs.&lt;/p&gt;
&lt;p&gt;Additionally, some strings &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10979&quot;&gt;have been migrated&lt;/a&gt; from the legacy INI components.
This means that the associated history, comments, screenshots, and approval status of these strings are now lost.
However, this also marks the beginning of slowly phasing out the legacy components.
Notably, the new translation component provides improved plural support for relevant strings.
To avoid overwhelming contributing translators with several thousand migrated strings at once, the plan is to distribute the migration in smaller steps over the year.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;h3&gt;Website moved to own infrastructure&lt;/h3&gt;
&lt;p&gt;Until now, the Forgejo website was hosted on Uberspace.&lt;/p&gt;
&lt;p&gt;Since the Forgejo infrastructure has proven to be reliable and is already in place, the website has been moved to the Kubernetes cluster within the Forgejo infrastructure.
This allows saving money by using existing resources and gives Forgejo complete control.&lt;/p&gt;
&lt;p&gt;If you&apos;re interested in how the deployment process works, you can find some documentation in &lt;a href=&quot;https://codeberg.org/forgejo/website/src/branch/main/README.md#hosting&quot;&gt;the README file&lt;/a&gt; of the Forgejo website repository.&lt;/p&gt;
&lt;h3&gt;Renovate for website and docs&lt;/h3&gt;
&lt;p&gt;Renovate is used to track dependency updates.
It automatically opens pull requests and depending on the &lt;a href=&quot;https://codeberg.org/forgejo/website/src/branch/main/.forgejo/renovate.json&quot;&gt;configuration&lt;/a&gt;, auto-merges dependency updates.
Renovate is already used in many parts of the Forgeio Space and it has now also been added to the &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/688&quot;&gt;website&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/docs/issues/1696&quot;&gt;documentation&lt;/a&gt; repo to help maintain dependencies.&lt;/p&gt;
&lt;h3&gt;Database of code.forgejo.org grew unexpectedly fast&lt;/h3&gt;
&lt;p&gt;In November, it was discovered that the code.forgejo.org database was growing much faster than expected.
Investigations revealed that this was due to bugs in Forgejo.
On the one hand, logs from the Forgejo Runner &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/9999&quot;&gt;remained in the database&lt;/a&gt; even though they should have been moved to the file system.
Secondly, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/10671&quot;&gt;it was found&lt;/a&gt; that excessive &lt;code&gt;commit_status&lt;/code&gt; entries were being created in the database.&lt;/p&gt;
&lt;p&gt;Both problems were fixed in Forgejo v14.
A new doctor command was also integrated to delete the excess entries from the database.
Due to these two bug fixes, the database size dropped from 33GB to 5.8GB.&lt;/p&gt;
&lt;h3&gt;Full disk on CI server&lt;/h3&gt;
&lt;p&gt;On January 16, the Forgejo Runner Server &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/436&quot;&gt;ran out of disk space&lt;/a&gt; because the Runner Cache fully occupied all available storage.
More specifically, the artifacts cache caused the issue.
This is probably due to the large Go cache resulting from the many open PRs, which cannot share the cache for security reasons.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/issues/69&quot;&gt;disk layout was restructured&lt;/a&gt;, and the cache was moved to a separate 1TB XFS volume.&lt;/p&gt;
&lt;p&gt;In the future, it is also &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/issues/71&quot;&gt;planned to add monitoring&lt;/a&gt; for the runner to detect issues faster.&lt;/p&gt;
&lt;h3&gt;Release automation improved&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#releases&quot;&gt;Release Manager team&lt;/a&gt; is responsible for creating Forgejo releases.
To simplify the process, the team has &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager&quot;&gt;implemented extensive automation&lt;/a&gt;.
Over the last two months, improvements have been made to release automation, and bugs have been fixed.&lt;/p&gt;
&lt;p&gt;If activated, the automatic check for new releases uses a DNS-based approach for privacy reasons.
The release automation includes a step for updating the domain record automatically, but a &lt;a href=&quot;https://code.forgejo.org/forgejo/ovh-dns-update/pulls/34&quot;&gt;crucial step was missing&lt;/a&gt;, causing the need for manual interaction.&lt;/p&gt;
&lt;p&gt;As part of the release process, the next instance and &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;code.forgejo.org&lt;/a&gt; are updated as an additional safeguard to prevent the release of faulty binaries.
This update must be done manually by a &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#devops&quot;&gt;DevOps member&lt;/a&gt;.
A &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/src/commit/50b13a2ddfd1eb65acdd0fbea95b7eba92c654cf/bin/backup-forgejo-code.sh&quot;&gt;script has been written&lt;/a&gt; to create a full backup of the instance before updating it to simplify this manual process.&lt;/p&gt;
&lt;h3&gt;HTML and JSON compression&lt;/h3&gt;
&lt;p&gt;Compression of HTML and JSON content &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/4c54dc2f4106054866ea87de2f3609a3c9897301&quot;&gt;has been enabled&lt;/a&gt; for hosted Forgejo instances and &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/50b13a2ddfd1eb65acdd0fbea95b7eba92c654cf&quot;&gt;websites&lt;/a&gt;.
This is done to save bandwidth and improve performance by reducing response sizes.&lt;/p&gt;
&lt;h2&gt;Moderation&lt;/h2&gt;
&lt;p&gt;The Forgejo Moderation Team would like to thank everyone who participated in the Forgejo space.
It&apos;s refreshing to see that most participants strive to be nice and helpful.
This not only means that the moderation team has less to do, but also that the Forgejo space is a welcoming environment for all.&lt;/p&gt;
&lt;p&gt;We have also updated the Code of Conduct page in the documentation.
If you&apos;re interested in learning more about the community values or the Code of Conduct, please visit the &lt;a href=&quot;https://forgejo.org/docs/next/contributor/coc/&quot;&gt;documentation page&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;FOSDEM&lt;/h3&gt;
&lt;p&gt;Codeberg and Forgejo are collaborating again this year and have a &lt;a href=&quot;https://fosdem.org/2026/stands/#:~:text=Forgejo&quot;&gt;joint booth&lt;/a&gt; at FOSDEM.
Some contributors from the Forgejo community are present at FOSDEM.
If you&apos;re attending FOSDEM, come by and say hi!
Of course, there are stickers available at the stand.
NLnet has probably some &lt;a href=&quot;https://nlnet.nl/project/Forgejo/&quot;&gt;different Forgejo stickers&lt;/a&gt;, too (hex variant).&lt;/p&gt;
&lt;h3&gt;Matrix security disclosure&lt;/h3&gt;
&lt;p&gt;On 16 July 2025, &lt;a href=&quot;https://matrix.org/blog/2025/07/security-predisclosure/&quot;&gt;Matrix announced in a predisclosure&lt;/a&gt; that a security vulnerability had been found in the current room versions, which had been fixed.
This means for us that all rooms on Matrix must be updated.&lt;/p&gt;
&lt;p&gt;All rooms except the main chat room &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/372#issuecomment-6953408&quot;&gt;were updated&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The main chat room will be updated in the next few days.
An announcement will be made before the room is updated.&lt;/p&gt;
&lt;h2&gt;We forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.&lt;/p&gt;
&lt;p&gt;The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past two months.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0xllx0&quot;&gt;https://codeberg.org/0xllx0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0xlogn&quot;&gt;https://codeberg.org/0xlogn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/11xx&quot;&gt;https://codeberg.org/11xx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/2franix&quot;&gt;https://codeberg.org/2franix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/5t0n3&quot;&gt;https://codeberg.org/5t0n3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/_rvidal&quot;&gt;https://codeberg.org/_rvidal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aahlenst&quot;&gt;https://codeberg.org/aahlenst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aartaka&quot;&gt;https://codeberg.org/aartaka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/achyrva&quot;&gt;https://codeberg.org/achyrva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/acidbong&quot;&gt;https://codeberg.org/acidbong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adamcharnock&quot;&gt;https://codeberg.org/adamcharnock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adamperkowski&quot;&gt;https://codeberg.org/adamperkowski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AdamWill&quot;&gt;https://codeberg.org/AdamWill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adelaar&quot;&gt;https://codeberg.org/adelaar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adoyle-h&quot;&gt;https://codeberg.org/adoyle-h&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adriand&quot;&gt;https://codeberg.org/adriand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AdrianVollmer&quot;&gt;https://codeberg.org/AdrianVollmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/agusdallalba&quot;&gt;https://codeberg.org/agusdallalba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aindriu80&quot;&gt;https://codeberg.org/aindriu80&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Albii&quot;&gt;https://codeberg.org/Albii&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alex3305&quot;&gt;https://codeberg.org/alex3305&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex619829&quot;&gt;https://codeberg.org/Alex619829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alexohneander&quot;&gt;https://codeberg.org/alexohneander&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alexramallo&quot;&gt;https://codeberg.org/alexramallo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alexrp&quot;&gt;https://codeberg.org/alexrp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/althi&quot;&gt;https://codeberg.org/althi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amadaluzia&quot;&gt;https://codeberg.org/amadaluzia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amessina&quot;&gt;https://codeberg.org/amessina&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Amparose&quot;&gt;https://codeberg.org/Amparose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andrew_low&quot;&gt;https://codeberg.org/andrew_low&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andrewrk&quot;&gt;https://codeberg.org/andrewrk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andyg&quot;&gt;https://codeberg.org/andyg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/annaesvensson&quot;&gt;https://codeberg.org/annaesvensson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anvme&quot;&gt;https://codeberg.org/anvme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aral&quot;&gt;https://codeberg.org/aral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arichtman&quot;&gt;https://codeberg.org/arichtman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Arrillo&quot;&gt;https://codeberg.org/Arrillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arthurzam&quot;&gt;https://codeberg.org/arthurzam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Astrak&quot;&gt;https://codeberg.org/Astrak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atalanttore&quot;&gt;https://codeberg.org/Atalanttore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/atarwn&quot;&gt;https://codeberg.org/atarwn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/atiq&quot;&gt;https://codeberg.org/atiq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/atluxity&quot;&gt;https://codeberg.org/atluxity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AverageHelper&quot;&gt;https://codeberg.org/AverageHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AYT04&quot;&gt;https://codeberg.org/AYT04&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Baempaieo&quot;&gt;https://codeberg.org/Baempaieo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/balint&quot;&gt;https://codeberg.org/balint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bapt&quot;&gt;https://codeberg.org/bapt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Bastrabun&quot;&gt;https://codeberg.org/Bastrabun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/baukevdw&quot;&gt;https://codeberg.org/baukevdw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BaumiCoder&quot;&gt;https://codeberg.org/BaumiCoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Begus001&quot;&gt;https://codeberg.org/Begus001&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benjaoming&quot;&gt;https://codeberg.org/benjaoming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benscobie&quot;&gt;https://codeberg.org/benscobie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bespinas&quot;&gt;https://codeberg.org/bespinas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BKehayov&quot;&gt;https://codeberg.org/BKehayov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/blinry&quot;&gt;https://codeberg.org/blinry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bpycinski&quot;&gt;https://codeberg.org/bpycinski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bramh&quot;&gt;https://codeberg.org/bramh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brenard&quot;&gt;https://codeberg.org/brenard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BtbN&quot;&gt;https://codeberg.org/BtbN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bugmaker&quot;&gt;https://codeberg.org/bugmaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buhtz&quot;&gt;https://codeberg.org/buhtz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Bullbagaren&quot;&gt;https://codeberg.org/Bullbagaren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buti&quot;&gt;https://codeberg.org/buti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/butterflyoffire&quot;&gt;https://codeberg.org/butterflyoffire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/calmh&quot;&gt;https://codeberg.org/calmh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/camlafit&quot;&gt;https://codeberg.org/camlafit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/captainstack&quot;&gt;https://codeberg.org/captainstack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/catgirlQueer&quot;&gt;https://codeberg.org/catgirlQueer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ccmtaylor&quot;&gt;https://codeberg.org/ccmtaylor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cdatoai&quot;&gt;https://codeberg.org/cdatoai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cgzones&quot;&gt;https://codeberg.org/cgzones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Chai&quot;&gt;https://codeberg.org/Chai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ChillerDragon&quot;&gt;https://codeberg.org/ChillerDragon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chmouel&quot;&gt;https://codeberg.org/chmouel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christopher-besch&quot;&gt;https://codeberg.org/christopher-besch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/claudep&quot;&gt;https://codeberg.org/claudep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cnx&quot;&gt;https://codeberg.org/cnx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/come_744&quot;&gt;https://codeberg.org/come_744&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/corentin-pro&quot;&gt;https://codeberg.org/corentin-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cornelius.roemer&quot;&gt;https://codeberg.org/cornelius.roemer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/coyote&quot;&gt;https://codeberg.org/coyote&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crueter&quot;&gt;https://codeberg.org/crueter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cs96and&quot;&gt;https://codeberg.org/cs96and&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cuynu&quot;&gt;https://codeberg.org/cuynu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cve&quot;&gt;https://codeberg.org/cve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyer&quot;&gt;https://codeberg.org/Cyer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cyrneko&quot;&gt;https://codeberg.org/cyrneko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dane-io&quot;&gt;https://codeberg.org/dane-io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danez&quot;&gt;https://codeberg.org/danez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/daniele&quot;&gt;https://codeberg.org/daniele&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danielsiepmann&quot;&gt;https://codeberg.org/danielsiepmann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/deckstose&quot;&gt;https://codeberg.org/deckstose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/deepakdinesh1123&quot;&gt;https://codeberg.org/deepakdinesh1123&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dejected4138&quot;&gt;https://codeberg.org/dejected4138&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/delroth&quot;&gt;https://codeberg.org/delroth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Demeanor9154&quot;&gt;https://codeberg.org/Demeanor9154&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/derat&quot;&gt;https://codeberg.org/derat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/des&quot;&gt;https://codeberg.org/des&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/devrandom&quot;&gt;https://codeberg.org/devrandom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dexgs&quot;&gt;https://codeberg.org/dexgs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dexrn&quot;&gt;https://codeberg.org/Dexrn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DickerDackel&quot;&gt;https://codeberg.org/DickerDackel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/diraneyya&quot;&gt;https://codeberg.org/diraneyya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Displace4490&quot;&gt;https://codeberg.org/Displace4490&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmho&quot;&gt;https://codeberg.org/dmho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/doasu&quot;&gt;https://codeberg.org/doasu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dobrvlskyi&quot;&gt;https://codeberg.org/dobrvlskyi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/doesnm&quot;&gt;https://codeberg.org/doesnm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/domi41&quot;&gt;https://codeberg.org/domi41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dsseng&quot;&gt;https://codeberg.org/dsseng&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dunklecat&quot;&gt;https://codeberg.org/dunklecat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dwrz&quot;&gt;https://codeberg.org/dwrz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eigood&quot;&gt;https://codeberg.org/eigood&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eIKpaSrnMoKI&quot;&gt;https://codeberg.org/eIKpaSrnMoKI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eli-schwartz&quot;&gt;https://codeberg.org/eli-schwartz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ellpeck&quot;&gt;https://codeberg.org/Ellpeck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emersion&quot;&gt;https://codeberg.org/emersion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emilycares&quot;&gt;https://codeberg.org/emilycares&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eNBeWe&quot;&gt;https://codeberg.org/eNBeWe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/enderice2&quot;&gt;https://codeberg.org/enderice2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/enriqueesanchz&quot;&gt;https://codeberg.org/enriqueesanchz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Epic_Null&quot;&gt;https://codeberg.org/Epic_Null&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eriksjolund&quot;&gt;https://codeberg.org/eriksjolund&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Esbeeb&quot;&gt;https://codeberg.org/Esbeeb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/esmenard&quot;&gt;https://codeberg.org/esmenard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/esoteric_programmer&quot;&gt;https://codeberg.org/esoteric_programmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FabioWidmer&quot;&gt;https://codeberg.org/FabioWidmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/faoquad&quot;&gt;https://codeberg.org/faoquad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/farooqkz&quot;&gt;https://codeberg.org/farooqkz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fauno&quot;&gt;https://codeberg.org/fauno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/felix-schindler&quot;&gt;https://codeberg.org/felix-schindler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fg_xd&quot;&gt;https://codeberg.org/fg_xd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fiesh&quot;&gt;https://codeberg.org/fiesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fina&quot;&gt;https://codeberg.org/fina&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fisipjm&quot;&gt;https://codeberg.org/fisipjm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FizzyKombucha&quot;&gt;https://codeberg.org/FizzyKombucha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjox&quot;&gt;https://codeberg.org/Fjox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FloEdelmann&quot;&gt;https://codeberg.org/FloEdelmann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fpallas&quot;&gt;https://codeberg.org/fpallas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Frankkkkk&quot;&gt;https://codeberg.org/Frankkkkk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fupicat&quot;&gt;https://codeberg.org/fupicat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fuzzy76&quot;&gt;https://codeberg.org/fuzzy76&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fzwoch&quot;&gt;https://codeberg.org/fzwoch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gamerik&quot;&gt;https://codeberg.org/gamerik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gauss-lvs-dev&quot;&gt;https://codeberg.org/gauss-lvs-dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/giantmollusk&quot;&gt;https://codeberg.org/giantmollusk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/giggio&quot;&gt;https://codeberg.org/giggio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gingerale&quot;&gt;https://codeberg.org/gingerale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/goestav&quot;&gt;https://codeberg.org/goestav&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gridhead&quot;&gt;https://codeberg.org/gridhead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Grzesiek11&quot;&gt;https://codeberg.org/Grzesiek11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hanklank&quot;&gt;https://codeberg.org/hanklank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HarHarLinks&quot;&gt;https://codeberg.org/HarHarLinks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/harryxi&quot;&gt;https://codeberg.org/harryxi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hedefalk&quot;&gt;https://codeberg.org/hedefalk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hedius&quot;&gt;https://codeberg.org/Hedius&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/henderkes&quot;&gt;https://codeberg.org/henderkes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hertg&quot;&gt;https://codeberg.org/hertg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hexa&quot;&gt;https://codeberg.org/hexa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/heyvito&quot;&gt;https://codeberg.org/heyvito&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hollowaykeanho&quot;&gt;https://codeberg.org/hollowaykeanho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/holongate&quot;&gt;https://codeberg.org/holongate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hra42&quot;&gt;https://codeberg.org/hra42&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hu5ky&quot;&gt;https://codeberg.org/hu5ky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hugoalh&quot;&gt;https://codeberg.org/hugoalh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hwipl&quot;&gt;https://codeberg.org/hwipl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/i-Moony&quot;&gt;https://codeberg.org/i-Moony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iacore&quot;&gt;https://codeberg.org/iacore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iamyaash&quot;&gt;https://codeberg.org/iamyaash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ilkkah&quot;&gt;https://codeberg.org/ilkkah&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Illinois_Roadbuff&quot;&gt;https://codeberg.org/Illinois_Roadbuff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/infinoid&quot;&gt;https://codeberg.org/infinoid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iustin&quot;&gt;https://codeberg.org/iustin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JadedBlueEyes&quot;&gt;https://codeberg.org/JadedBlueEyes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JamesOakley&quot;&gt;https://codeberg.org/JamesOakley&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JasperSurmont&quot;&gt;https://codeberg.org/JasperSurmont&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jaylinski&quot;&gt;https://codeberg.org/jaylinski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jdeu42&quot;&gt;https://codeberg.org/jdeu42&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jeffective&quot;&gt;https://codeberg.org/jeffective&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jelu&quot;&gt;https://codeberg.org/jelu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jf_archer&quot;&gt;https://codeberg.org/jf_archer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jimkats&quot;&gt;https://codeberg.org/jimkats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jiriks74&quot;&gt;https://codeberg.org/jiriks74&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JK-Effects&quot;&gt;https://codeberg.org/JK-Effects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JoeHenzi&quot;&gt;https://codeberg.org/JoeHenzi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JoergSachse&quot;&gt;https://codeberg.org/JoergSachse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/johnlorentzson&quot;&gt;https://codeberg.org/johnlorentzson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/joneshf&quot;&gt;https://codeberg.org/joneshf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jornfranke&quot;&gt;https://codeberg.org/jornfranke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jplatte&quot;&gt;https://codeberg.org/jplatte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jrtcdbrg&quot;&gt;https://codeberg.org/jrtcdbrg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwla&quot;&gt;https://codeberg.org/jwla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kad-hollac1&quot;&gt;https://codeberg.org/kad-hollac1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kampka&quot;&gt;https://codeberg.org/kampka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kbruen&quot;&gt;https://codeberg.org/kbruen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kernald&quot;&gt;https://codeberg.org/kernald&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kiara&quot;&gt;https://codeberg.org/kiara&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kickbut101&quot;&gt;https://codeberg.org/Kickbut101&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/killawabbit&quot;&gt;https://codeberg.org/killawabbit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kladky&quot;&gt;https://codeberg.org/Kladky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/klausfyhn&quot;&gt;https://codeberg.org/klausfyhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Klenje&quot;&gt;https://codeberg.org/Klenje&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kronzoew&quot;&gt;https://codeberg.org/kronzoew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ktaraszk&quot;&gt;https://codeberg.org/ktaraszk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KWik&quot;&gt;https://codeberg.org/KWik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kytta&quot;&gt;https://codeberg.org/kytta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kyush&quot;&gt;https://codeberg.org/Kyush&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/landynmj&quot;&gt;https://codeberg.org/landynmj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lanticy&quot;&gt;https://codeberg.org/lanticy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/laydros&quot;&gt;https://codeberg.org/laydros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leap&quot;&gt;https://codeberg.org/leap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lepiku&quot;&gt;https://codeberg.org/lepiku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/liberty&quot;&gt;https://codeberg.org/liberty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lilyvex&quot;&gt;https://codeberg.org/lilyvex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/limiting-factor&quot;&gt;https://codeberg.org/limiting-factor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/linos&quot;&gt;https://codeberg.org/linos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/linus&quot;&gt;https://codeberg.org/linus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/linuxpython&quot;&gt;https://codeberg.org/linuxpython&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/litchipi&quot;&gt;https://codeberg.org/litchipi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lmtr0&quot;&gt;https://codeberg.org/lmtr0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LostLuma&quot;&gt;https://codeberg.org/LostLuma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lucaguth_tesat&quot;&gt;https://codeberg.org/lucaguth_tesat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/luisadame&quot;&gt;https://codeberg.org/luisadame&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LunarLambda&quot;&gt;https://codeberg.org/LunarLambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/m-casanova&quot;&gt;https://codeberg.org/m-casanova&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/m_eiman&quot;&gt;https://codeberg.org/m_eiman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MaddinM&quot;&gt;https://codeberg.org/MaddinM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahiso&quot;&gt;https://codeberg.org/mahiso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maikelthedev&quot;&gt;https://codeberg.org/maikelthedev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maks1mS&quot;&gt;https://codeberg.org/Maks1mS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mallory_re&quot;&gt;https://codeberg.org/mallory_re&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maniues&quot;&gt;https://codeberg.org/Maniues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maribu&quot;&gt;https://codeberg.org/maribu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matklad&quot;&gt;https://codeberg.org/matklad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Matlib&quot;&gt;https://codeberg.org/Matlib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matthewrfennell&quot;&gt;https://codeberg.org/matthewrfennell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MaxLPM&quot;&gt;https://codeberg.org/MaxLPM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maymeow&quot;&gt;https://codeberg.org/maymeow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mbaranski&quot;&gt;https://codeberg.org/mbaranski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mdk&quot;&gt;https://codeberg.org/mdk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mecamic123&quot;&gt;https://codeberg.org/mecamic123&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meenachisundaram&quot;&gt;https://codeberg.org/meenachisundaram&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MerlijnWajer&quot;&gt;https://codeberg.org/MerlijnWajer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MexHigh&quot;&gt;https://codeberg.org/MexHigh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mez&quot;&gt;https://codeberg.org/Mez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfechner&quot;&gt;https://codeberg.org/mfechner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mganter&quot;&gt;https://codeberg.org/mganter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micw&quot;&gt;https://codeberg.org/micw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micxer&quot;&gt;https://codeberg.org/micxer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mihalicyn&quot;&gt;https://codeberg.org/mihalicyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/milahu&quot;&gt;https://codeberg.org/milahu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/minimalmatt&quot;&gt;https://codeberg.org/minimalmatt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mj0nez&quot;&gt;https://codeberg.org/mj0nez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mk12&quot;&gt;https://codeberg.org/mk12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlugg&quot;&gt;https://codeberg.org/mlugg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Morwenn&quot;&gt;https://codeberg.org/Morwenn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mpminardi&quot;&gt;https://codeberg.org/mpminardi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mrus&quot;&gt;https://codeberg.org/mrus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MrWatt&quot;&gt;https://codeberg.org/MrWatt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MultisampledNight&quot;&gt;https://codeberg.org/MultisampledNight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mvdkleijn&quot;&gt;https://codeberg.org/mvdkleijn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/myers&quot;&gt;https://codeberg.org/myers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mylloon&quot;&gt;https://codeberg.org/Mylloon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nabaxo&quot;&gt;https://codeberg.org/nabaxo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nachtjasmin&quot;&gt;https://codeberg.org/nachtjasmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nadirs&quot;&gt;https://codeberg.org/nadirs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/narodr&quot;&gt;https://codeberg.org/narodr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neamtim&quot;&gt;https://codeberg.org/neamtim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NeatNit&quot;&gt;https://codeberg.org/NeatNit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neuschaefer&quot;&gt;https://codeberg.org/neuschaefer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NickP&quot;&gt;https://codeberg.org/NickP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nikee&quot;&gt;https://codeberg.org/nikee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nimplex&quot;&gt;https://codeberg.org/Nimplex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nirik&quot;&gt;https://codeberg.org/nirik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nobodyinperson&quot;&gt;https://codeberg.org/nobodyinperson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nolan&quot;&gt;https://codeberg.org/nolan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nschloe&quot;&gt;https://codeberg.org/nschloe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nykula&quot;&gt;https://codeberg.org/nykula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/obale&quot;&gt;https://codeberg.org/obale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/occ&quot;&gt;https://codeberg.org/occ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oidq&quot;&gt;https://codeberg.org/oidq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oled&quot;&gt;https://codeberg.org/oled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/omenos&quot;&gt;https://codeberg.org/omenos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oneshot&quot;&gt;https://codeberg.org/oneshot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/OriHoch&quot;&gt;https://codeberg.org/OriHoch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/OrislavK&quot;&gt;https://codeberg.org/OrislavK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ospalh&quot;&gt;https://codeberg.org/ospalh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/otaconix&quot;&gt;https://codeberg.org/otaconix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/outloudvi&quot;&gt;https://codeberg.org/outloudvi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/p3aga&quot;&gt;https://codeberg.org/p3aga&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pastk&quot;&gt;https://codeberg.org/pastk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patricus&quot;&gt;https://codeberg.org/patricus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pemensik&quot;&gt;https://codeberg.org/pemensik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pietervdvn&quot;&gt;https://codeberg.org/pietervdvn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pixelcode&quot;&gt;https://codeberg.org/pixelcode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pluk77&quot;&gt;https://codeberg.org/pluk77&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Porkepix&quot;&gt;https://codeberg.org/Porkepix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pwbriggs&quot;&gt;https://codeberg.org/pwbriggs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/qarmin&quot;&gt;https://codeberg.org/qarmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rahil627&quot;&gt;https://codeberg.org/rahil627&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ralokt&quot;&gt;https://codeberg.org/ralokt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/randysimons&quot;&gt;https://codeberg.org/randysimons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/reivilibre&quot;&gt;https://codeberg.org/reivilibre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/retarded-beast&quot;&gt;https://codeberg.org/retarded-beast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/reynir&quot;&gt;https://codeberg.org/reynir&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RGBCube&quot;&gt;https://codeberg.org/RGBCube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rigrig&quot;&gt;https://codeberg.org/rigrig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rivenbryan&quot;&gt;https://codeberg.org/rivenbryan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RogerSmith&quot;&gt;https://codeberg.org/RogerSmith&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RokeJulianLockhart&quot;&gt;https://codeberg.org/RokeJulianLockhart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/romanzipp&quot;&gt;https://codeberg.org/romanzipp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rory.gay&quot;&gt;https://codeberg.org/rory.gay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/roshless&quot;&gt;https://codeberg.org/roshless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Routhinator&quot;&gt;https://codeberg.org/Routhinator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rumpl&quot;&gt;https://codeberg.org/rumpl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvillablanca&quot;&gt;https://codeberg.org/rvillablanca&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rwv37&quot;&gt;https://codeberg.org/rwv37&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryanlerch&quot;&gt;https://codeberg.org/ryanlerch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RysultSet&quot;&gt;https://codeberg.org/RysultSet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sa-dd&quot;&gt;https://codeberg.org/sa-dd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sarge&quot;&gt;https://codeberg.org/sarge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sbew&quot;&gt;https://codeberg.org/sbew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Schmerling&quot;&gt;https://codeberg.org/Schmerling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scMarkus&quot;&gt;https://codeberg.org/scMarkus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scy&quot;&gt;https://codeberg.org/scy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sdomi&quot;&gt;https://codeberg.org/sdomi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SecareLupus&quot;&gt;https://codeberg.org/SecareLupus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/seccentral&quot;&gt;https://codeberg.org/seccentral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/senyai&quot;&gt;https://codeberg.org/senyai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SequentialDesign&quot;&gt;https://codeberg.org/SequentialDesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sgoth&quot;&gt;https://codeberg.org/sgoth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shadowmaru&quot;&gt;https://codeberg.org/shadowmaru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ShalokShalom&quot;&gt;https://codeberg.org/ShalokShalom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shinmera&quot;&gt;https://codeberg.org/shinmera&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shuppy&quot;&gt;https://codeberg.org/shuppy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/silverpill&quot;&gt;https://codeberg.org/silverpill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/simonhammes&quot;&gt;https://codeberg.org/simonhammes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SirHerpDerp&quot;&gt;https://codeberg.org/SirHerpDerp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sjmulder&quot;&gt;https://codeberg.org/sjmulder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skyper&quot;&gt;https://codeberg.org/Skyper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slink&quot;&gt;https://codeberg.org/slink&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smartclip_tim&quot;&gt;https://codeberg.org/smartclip_tim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smichel17&quot;&gt;https://codeberg.org/smichel17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smlxdesign&quot;&gt;https://codeberg.org/smlxdesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smowtenshi&quot;&gt;https://codeberg.org/smowtenshi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/soslan&quot;&gt;https://codeberg.org/soslan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sparchatus&quot;&gt;https://codeberg.org/sparchatus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stead&quot;&gt;https://codeberg.org/stead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/steelman1&quot;&gt;https://codeberg.org/steelman1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stefangehn&quot;&gt;https://codeberg.org/stefangehn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/steko&quot;&gt;https://codeberg.org/steko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/syncstack&quot;&gt;https://codeberg.org/syncstack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Syntax3rror404&quot;&gt;https://codeberg.org/Syntax3rror404&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tace16&quot;&gt;https://codeberg.org/tace16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Tak&quot;&gt;https://codeberg.org/Tak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tebriel&quot;&gt;https://codeberg.org/tebriel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/techokami&quot;&gt;https://codeberg.org/techokami&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/The-EG&quot;&gt;https://codeberg.org/The-EG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/theseal&quot;&gt;https://codeberg.org/theseal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ThomasBoom89&quot;&gt;https://codeberg.org/ThomasBoom89&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ThomasHiliol&quot;&gt;https://codeberg.org/ThomasHiliol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tibfulv&quot;&gt;https://codeberg.org/tibfulv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Tilian&quot;&gt;https://codeberg.org/Tilian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tim-krehan&quot;&gt;https://codeberg.org/tim-krehan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tipragot&quot;&gt;https://codeberg.org/tipragot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Toast003&quot;&gt;https://codeberg.org/Toast003&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tobru&quot;&gt;https://codeberg.org/tobru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tomried&quot;&gt;https://codeberg.org/tomried&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tranquil117&quot;&gt;https://codeberg.org/tranquil117&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/transitory&quot;&gt;https://codeberg.org/transitory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/traumweh&quot;&gt;https://codeberg.org/traumweh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/trypsynth&quot;&gt;https://codeberg.org/trypsynth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ttyS0&quot;&gt;https://codeberg.org/ttyS0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tusooa&quot;&gt;https://codeberg.org/tusooa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmain&quot;&gt;https://codeberg.org/tuxmain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmaster&quot;&gt;https://codeberg.org/tuxmaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Unfinished632&quot;&gt;https://codeberg.org/Unfinished632&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/urda&quot;&gt;https://codeberg.org/urda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/UweSauter&quot;&gt;https://codeberg.org/UweSauter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VagabondAzulien&quot;&gt;https://codeberg.org/VagabondAzulien&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/valentinegb&quot;&gt;https://codeberg.org/valentinegb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VewDev&quot;&gt;https://codeberg.org/VewDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vincib&quot;&gt;https://codeberg.org/vincib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vmtj&quot;&gt;https://codeberg.org/vmtj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voidcontext&quot;&gt;https://codeberg.org/voidcontext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voidspacexyz&quot;&gt;https://codeberg.org/voidspacexyz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VoidStarKat&quot;&gt;https://codeberg.org/VoidStarKat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vsdl&quot;&gt;https://codeberg.org/vsdl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Weissnix4711&quot;&gt;https://codeberg.org/Weissnix4711&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wejdross&quot;&gt;https://codeberg.org/wejdross&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wemutran&quot;&gt;https://codeberg.org/wemutran&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/whosit&quot;&gt;https://codeberg.org/whosit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wild-Turtles&quot;&gt;https://codeberg.org/Wild-Turtles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/WithLithum&quot;&gt;https://codeberg.org/WithLithum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolftune&quot;&gt;https://codeberg.org/wolftune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wurt&quot;&gt;https://codeberg.org/Wurt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wvffle&quot;&gt;https://codeberg.org/wvffle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xDarkmanx&quot;&gt;https://codeberg.org/xDarkmanx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/XeroX&quot;&gt;https://codeberg.org/XeroX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xlionjuan&quot;&gt;https://codeberg.org/xlionjuan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xrstf&quot;&gt;https://codeberg.org/xrstf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xyz00777&quot;&gt;https://codeberg.org/Xyz00777&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Yatis&quot;&gt;https://codeberg.org/Yatis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeager&quot;&gt;https://codeberg.org/yeager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yookoala&quot;&gt;https://codeberg.org/yookoala&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Yushu&quot;&gt;https://codeberg.org/Yushu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zimoun&quot;&gt;https://codeberg.org/zimoun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zockicookie&quot;&gt;https://codeberg.org/zockicookie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zokki&quot;&gt;https://codeberg.org/zokki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo v14.0 is available</title><link>https://forgejo.org/2026-01-release-v14-0/</link><guid isPermaLink="true">https://forgejo.org/2026-01-release-v14-0/</guid><description>Forgejo v14.0 is available. Issues search now has inline filters. Web file editor was replaced with CodeMirror. CSRF protection is now stateless. Forgejo actions gained new features and better trust management. Foreign keys are now supported to ensure database consistency.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v14.0&lt;/a&gt;, the lightweight, community-developed, self-hosted platform for code collaboration, was released on 15 January 2026. You will find a short selection of the changes it introduces below and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/27583&quot;&gt;complete list in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://v14.next.forgejo.org/&quot;&gt;dedicated test instance&lt;/a&gt; is available to try it out. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v14.0/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/27583&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;in the chat room&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Forgejo v14.0 improves everyday usability while strengthening reliability and safety.&lt;/p&gt;
&lt;p&gt;Issue and pull request search gains simple inline filters, the web editor switches to a lighter experience, and more parts of the interface work smoothly without JavaScript. In addition, a new stateless CSRF protection allows keeping tabs open for a long time and to resume work without interruptions.&lt;/p&gt;
&lt;p&gt;Forgejo Actions adds finer-grained trust controls, better visibility for queued jobs and advanced concurrency and dynamic matrix support. Forgejo&apos;s operational reliability has also been enhanced with database deadlock fixes and foreign‑key improvements.&lt;/p&gt;
&lt;p&gt;Administrators are recommended to review &lt;a href=&quot;#commit-status-cleanup&quot;&gt;Commit Status Cleanup&lt;/a&gt; for information about an optional post-upgrade data cleanup procedure.&lt;/p&gt;
&lt;h2&gt;UI features&lt;/h2&gt;
&lt;h3&gt;Search syntax support for Issues and PRs&lt;/h3&gt;
&lt;p&gt;Several simple search filters are now available in Issue/PR search.
Information about usage of these filters is accessible through in-app documentation (click the question mark located adjacent to the search bar) and via the &lt;a href=&quot;https://forgejo.org/docs/v14.0/user/issue-search/#filters&quot;&gt;dedicated documentation page&lt;/a&gt;.
Dropdown filters are compatible with the new simple search filters.
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9109&quot;&gt;[PR]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;New file editor&lt;/h3&gt;
&lt;p&gt;The previous web file editor, Monaco by Microsoft, was overly complex for single-file edits and had issues with performance, loading times, accessibility and mobile usability. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10697&quot;&gt;It has been replaced&lt;/a&gt; with a lighter-weight editor CodeMirror, which is better suited to this use case and resolves the previously mentioned issues.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Switch between formats when previewing CITATION.{cff,bib} files&lt;/h3&gt;
&lt;p&gt;When previewing a CITATION file (CFF or BIB), a switch allows for switching between formats (other formats could be added, though some libraries have &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4595&quot;&gt;incompatible licenses&lt;/a&gt;).
The &quot;Cite repository&quot; menu item now links directly to this preview page instead of opening a popup.
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9103&quot;&gt;[PR]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Interact with UI without JavaScript&lt;/h3&gt;
&lt;p&gt;Work has progressed on making the Forgejo web UI functional without JS. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9614&quot;&gt;A bug has been fixed&lt;/a&gt;, making it possible to post comments without JS enabled. Several ellipsis menus &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=all&amp;amp;labels=209916&amp;amp;milestone=27583&amp;amp;q=JS-less&quot;&gt;have been made accessible&lt;/a&gt;, including the user menu in the navbar. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=all&amp;amp;labels=209916&amp;amp;milestone=27583&amp;amp;q=JS-free&quot;&gt;There are now more&lt;/a&gt; expandable elements that work without JS.&lt;/p&gt;
&lt;h2&gt;Improvements to Forgejo actions&lt;/h2&gt;
&lt;h3&gt;Pull Request Trust Management&lt;/h3&gt;
&lt;p&gt;Forgejo&apos;s ability to &quot;Approve&quot; actions execution from a pull request has been enhanced with new options to &lt;a href=&quot;https://forgejo.org/docs/v14.0/user/actions/security-pull-request/&quot;&gt;approve once, always, and deny&lt;/a&gt; execution. Once a user is approved for execution, abuse can also be managed by revoking access for execution. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9397&quot;&gt;[PR]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Commit Status Cleanup&lt;/h3&gt;
&lt;p&gt;During the Forgejo 14 development cycle, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/10671&quot;&gt;a bug was discovered&lt;/a&gt; in Actions that caused many redundant records to be added to the &lt;code&gt;commit_status&lt;/code&gt; table while an action was running. In most cases, these records have accumulated since Actions was first developed, affecting all users. A &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10678&quot;&gt;fix for that defect&lt;/a&gt; has been introduced in Forgejo 14.&lt;/p&gt;
&lt;p&gt;The Forgejo CLI has been augmented with a &lt;a href=&quot;https://forgejo.org/docs/v14.0/admin/command-line/#doctor-cleanup-commit-status&quot;&gt;&lt;code&gt;doctor cleanup-commit-status&lt;/code&gt;&lt;/a&gt; command which can be used to cleanup redundant records. When the Forgejo Devops team executed this tool on the code.forgejo.org instance, 14.9 million out of 15.2 million records (97%) were identified as redundant records caused by this bug.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ forgejo doctor cleanup-commit-status --dry-run
2026/01/13 10:43:29 ...git/commit_status.go:527:CleanupCommitStatus() [I] Reviewed 15297011 records in commit_status, and would delete 14916470
2026/01/13 10:43:29 ...git/commit_status.go:531:CleanupCommitStatus() [I] Cleanup commit status took 488488 milliseconds
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two options for the tool allow the administrator to control the memory usage as records are inspected (&lt;code&gt;--buffer-size 100000&lt;/code&gt;) and the number of records deleted in each &lt;code&gt;DELETE&lt;/code&gt; query (&lt;code&gt;--delete-chunk-size 1000&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Forgejo instances running on SQLite may experiencing locking errors while the &lt;code&gt;cleanup-commit-status&lt;/code&gt; command is running due to two processes accessing the same SQLite database files. For a typical SQLite-based instance with few users and light load, this is likely to be short-lived. For a larger SQLite-based instance, it is recommended to run with a smaller delete chunk size, or to run the command while Forgejo is offline.&lt;/p&gt;
&lt;h3&gt;&quot;Waiting&quot; status Display&lt;/h3&gt;
&lt;p&gt;Actions that are waiting for a runner with a specific configuration will display this information in the UI, enabling users to easily diagnose why jobs may not be running as expected. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9966&quot;&gt;[PR]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Concurrency Groups&lt;/h3&gt;
&lt;p&gt;Forgejo Actions now supports the &lt;a href=&quot;https://forgejo.org/docs/v14.0/user/actions/reference/#concurrency&quot;&gt;&lt;code&gt;concurrency&lt;/code&gt; block&lt;/a&gt; in order to either permit or restrict concurrent execution of a Forgejo Actions workflow. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9434&quot;&gt;[PR]&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;jobs:
  rust-checks:
    runs-on: debian-latest
    steps:
      - run: sleep 300

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: false
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Dynamic Matrices &amp;amp; Runs-On&lt;/h3&gt;
&lt;p&gt;Forgejo Actions now supports matrix jobs and &lt;code&gt;runs-on&lt;/code&gt; fields that are defined by earlier jobs in the workflow, allowing a workflow to apply custom logic to determine how and where its jobs will run. In this example, the &lt;code&gt;define-matrix&lt;/code&gt; job would be a placeholder for custom logic, such as inspecting the changes in a pull request, to determine which jobs to spawn in the &lt;code&gt;runs-on-dynamic-matrix&lt;/code&gt; job:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;jobs:
  define-matrix:
    runs-on: docker
    steps:
      - id: define
        run: |
          echo &apos;array=[&quot;debian-bookworm&quot;, &quot;debian-trixie&quot;]&apos; &amp;gt;&amp;gt; &quot;$FORGEJO_OUTPUT&quot;
    outputs:
      array-value: ${{ steps.define.outputs.array }}

  runs-on-dynamic-matrix:
    needs: define-matrix
    strategy:
      matrix:
        my-runners: ${{ fromJSON(needs.define-matrix.outputs.array-value) }}
    runs-on: ${{ matrix.my-runners }}
    steps:
      - run: uname -a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10244&quot;&gt;[PR 1]&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10308&quot;&gt;[PR 2]&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Security features&lt;/h2&gt;
&lt;h3&gt;Validation of the &lt;code&gt;authorized_keys&lt;/code&gt; file&lt;/h3&gt;
&lt;p&gt;When Forgejo is configured to use the &lt;code&gt;authorized_keys&lt;/code&gt; file for SSH, upon startup this file will be read and its contents will be validated. If any unexpected keys are found in the file, Forgejo will terminate its startup in order to signal to the server administrator that a security risk is present that must be addressed. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10010&quot;&gt;[PR]&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2025/11/07 10:13:50 modules/ssh/init.go:86:Init() [F] An unexpected ssh public key was discovered. Forgejo will shutdown to require this to be fixed. Fix by either:
Option 1: Delete the file /home/forgejo/.ssh/authorized_keys, and Forgejo will recreate it with only expected ssh public keys.
Option 2: Permit unexpected keys by setting [server].SSH_ALLOW_UNEXPECTED_AUTHORIZED_KEYS=true in Forgejo&apos;s config file.
        Unexpected key on line 1 of /home/forgejo/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Stateless CSRF protection&lt;/h3&gt;
&lt;p&gt;CSRF attacks are now prevented via a stateless method that uses &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Sec-Fetch-Site&quot;&gt;browser fetch metadata request headers&lt;/a&gt;. Because it is stateless, you can now submit work on tabs that have been open for more than 24 hours. Forgejo instances that are hosted on a subpath are no longer protected against CSRF attacks from services that are hosted on the same origin (same scheme, host/domain and port). Anti-CSRF tokens are therefore no longer used and the &lt;code&gt;CSRF_COOKIE_HTTP_ONLY&lt;/code&gt; option was removed. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9830&quot;&gt;[PR]&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Database improvements&lt;/h2&gt;
&lt;h3&gt;Goodbye &quot;Pull requests -1&quot; caused by DB Deadlocks&lt;/h3&gt;
&lt;p&gt;Forgejo maintains statistics on repos, labels, and milestones which have been subject to internal deadlocks when being updated, often surfacing to the user as an indicator that they have &quot;-1&quot; pull requests on a repository. Following scalability work on these calculations, the number of database deadlocks resulting in incorrect statistics or even interrupting merge operations has been effectively reduced to zero.
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=deadlocks&amp;amp;labels=209916&amp;amp;state=closed&amp;amp;milestone=27583&quot;&gt;[6 related PRs]&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Database foreign keys&lt;/h3&gt;
&lt;p&gt;Forgejo now implements a limited number of foreign keys in the database. About 5% of the cross-table references that Forgejo uses are protected from data inconsistencies by database foreign keys, which will be created automatically while upgrading to Forgejo 14.
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&amp;amp;milestone=27583&amp;amp;q=%22add+foreign+keys%22+%22foreign+key+migrations%22&quot;&gt;[6 related PRs]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Records that previously should have been deleted due to removal of their relationship are considered to be data inconsistencies, and may prevent the creation of a foreign key. For example, if an access token exists in the &lt;code&gt;access&lt;/code&gt; table which references a user who was previously deleted, this record should have been removed when the user was deleted but this was never guaranteed by the database due to the lack of foreign keys.&lt;/p&gt;
&lt;p&gt;Forgejo will automatically identify these data inconsistencies and correct them to create the necessary foreign keys, deleting the inconsistent records. This will not have any functional impact to your Forgejo instance.&lt;/p&gt;
&lt;p&gt;The affected tables and the number of records are reported in the logs during the database migration if any are found.&lt;/p&gt;
&lt;h3&gt;Distributed database queries&lt;/h3&gt;
&lt;p&gt;In Forgejo v12 a new feature was introduced to distribute read queries over multiple databases. During testing conducted by Codeberg it was found that this behavior was almost never used. This has been fixed in this release and distributing read queries over multiple databases is now effective. We should note that this is not a high availability feature, there&apos;s no mechanism to stop sending queries to a database that is offline. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10140&quot;&gt;[PR]&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Release schedule and Long Term Support&lt;/h2&gt;
&lt;p&gt;Based on &lt;a href=&quot;/docs/v14.0/admin/release-schedule/&quot;&gt;the release schedule&lt;/a&gt;, major releases are published every three months. Patch releases are published more frequently, depending on the severity of the bug or security fixes they contain. Forgejo v14.0 is a non-LTS release that replaces the previous non-LTS release, Forgejo v13.0. It will be supported until &lt;strong&gt;16 April 2026&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;11.0 (LTS)&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2026&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.0&lt;/td&gt;
&lt;td&gt;16 October 2025&lt;/td&gt;
&lt;td&gt;15 January 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14.0&lt;/td&gt;
&lt;td&gt;15 January 2026&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 April 2026&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15.0 (LTS)&lt;/td&gt;
&lt;td&gt;16 April 2026&lt;/td&gt;
&lt;td&gt;15 July 2027&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;14.0-test daily releases&lt;/h3&gt;
&lt;p&gt;Releases are built daily from the latest changes found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v14.0/forgejo&quot;&gt;v14.0/forgejo&lt;/a&gt; development branch. They are deployed to the &lt;a href=&quot;https://v14.next.forgejo.org&quot;&gt;https://v14.next.forgejo.org&lt;/a&gt; instance for manual verification in case a bug fix is of particular interest ahead of the next patch release. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/14.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/14.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v14.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their names are staying the same but they are replaced by new builds every day.&lt;/p&gt;
&lt;h2&gt;Get Forgejo v14.0&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&quot;/download/&quot;&gt;download page&lt;/a&gt; for instructions on how to install Forgejo,
and read the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/27583&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/27583&quot;&gt;breaking bug fixes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v14.0.0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/14.0.0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/14.0&quot;&gt;&lt;code&gt;14.0&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;14.0.Y&lt;/code&gt; patch release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v14.0/admin/upgrade&quot;&gt;Forgejo upgrade documentation&lt;/a&gt;
for recommendations on how to properly backup your instance before the upgrade.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
&lt;h3&gt;Donate&lt;/h3&gt;
&lt;p&gt;Forgejo is proud to be &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/&quot;&gt;funded transparently&lt;/a&gt;. Additionally, it accept donations &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;through Liberapay&lt;/a&gt;. It is also possible to &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donate to Codeberg e.V.&lt;/a&gt; in case the Liberapay option does not work out for you, and part of the funding is used to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/#forgejo-resources-per-year&quot;&gt;compensate for work on Forgejo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, the Liberapay team allows for money to go directly to developers without a round-trip to Codeberg. Additionally, Liberapay allows for a steady and reliable funding stream next to other options, a crucial aspect for the project. The distribution of funds through Liberapay is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;transparently controlled using the decision-making process&lt;/a&gt;, and Forgejo contributors are encouraged to consider applying to benefit from this funding opportunity.&lt;/p&gt;
&lt;p&gt;Thank you for using Forgejo and considering a donation, in case your financial situation allows you to.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - November 2025</title><link>https://forgejo.org/2025-11-monthly-report/</link><guid isPermaLink="true">https://forgejo.org/2025-11-monthly-report/</guid><description>A security release was published for Forgejo v13 and v11 LTS. There is another way to report accessibility issues that lowers the barrier. User research is still seeking your help. A lot of work has been done regarding federation, and the Dutch government has expressed interest in Forgejo.</description><pubDate>Tue, 02 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo v13.0.3&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#security&quot;&gt;security team&lt;/a&gt; has been busy fixing multiple security issues and has published &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v13.0.3&quot;&gt;v13.0.3&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v11.0.8&quot;&gt;v11.0.8&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These releases &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/release-notes-published/13.0.3.md&quot;&gt;fix security issues and some bugs&lt;/a&gt;.
We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations be upgraded to the latest version.&lt;/p&gt;
&lt;h3&gt;Forgejo runner v12&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v12.0.0&quot;&gt;Forgejo runner v12&lt;/a&gt; has been released.
This is a major version update due to a change in system requirements, requiring a Git installation.
This requirement is included in Forgejo runner&apos;s OCI containers.
However, binary users may need to install a Git package, and packaging redistributors may need to update for the new system requirement.&lt;/p&gt;
&lt;p&gt;Since the last major release noted in the &lt;a href=&quot;https://forgejo.org/2025-09-monthly-report/#forgejo-runner-v11&quot;&gt;September update&lt;/a&gt;, Forgejo runner has received 31 minor bug fixes and seven feature enhancements.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users may note improved job startup times, reduced resource usage, and more accurate remote tag resolution after remote Git operations were overhauled: &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/1156&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/1160&quot;&gt;2&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/1162&quot;&gt;3&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/1002&quot;&gt;Git pre-commit hook&lt;/a&gt; was added to allow users to validate their Forgejo Actions files before committing them to their repositories.&lt;/li&gt;
&lt;li&gt;Forgejo runner now builds on &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/1135&quot;&gt;OpenBSD, DragonFly BSD, and Illumos&lt;/a&gt; (with host-executor support only).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Forgejo Helm chart v15.0.3&lt;/h3&gt;
&lt;p&gt;As usual, the Forgejo Helm chart received a &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v15.0.3&quot;&gt;new patch release&lt;/a&gt; to update the default Forgejo version to the latest released one.&lt;/p&gt;
&lt;h2&gt;Accessibility&lt;/h2&gt;
&lt;p&gt;To provide Forgejo users with disabilities with an &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/124&quot;&gt;easy way to report issues&lt;/a&gt; if they cannot navigate to the issue tracker, a second contact point was established through the Matrix channel &lt;a href=&quot;https://matrix.to/#/#forgejo-accessibility:matrix.org&quot;&gt;#forgejo-accessibility:matrix.org&lt;/a&gt;.
All Forgejo users with disabilities and those interested in addressing them are encouraged to join the chat.&lt;/p&gt;
&lt;p&gt;Going forward, the channel can be used to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;report accessibility issues with Forgejo instances, shifting the responsibility of issue tracking from impaired users to Forgejo contributors.&lt;/li&gt;
&lt;li&gt;discuss accessible design and requirements between contributors and users.&lt;/li&gt;
&lt;li&gt;invite potentially affected users to participate in the design process early on via user testing and feedback.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The chat does not replace the issue tracker.
Advanced users are still encouraged to use the tracker to report accessibility problems.&lt;/p&gt;
&lt;h2&gt;User research&lt;/h2&gt;
&lt;p&gt;The user research team looks for input not only from Forgejo users but also from people who could show us their workflow from other software solutions, such as dealing with moderation reports on social media instances and forums or developing software using other forges.
Please help the team by &lt;a href=&quot;https://cloud.splvs.net/apps/calendar/appointment/cHr5MB2PoZDp&quot;&gt;scheduling a 45 minutes research session&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The insights will help &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/131&quot;&gt;improving the contribution workflow&lt;/a&gt;, improving instance&apos;s moderation tools and provide valuable insights into other topics that are currently in the process of being (re-)designed.&lt;/p&gt;
&lt;p&gt;Additionally, there is an ongoing discussion about &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/415&quot;&gt;improving the user research and design workflow&lt;/a&gt;.
An effective user research and design workflow is essential for developing and implementing features that are relevant to users, easy to understand and intuitive to use.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;During the analysis of &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4767&quot;&gt;federated user activities&lt;/a&gt;, it was determined that Mastodon requires an outbox and that it signs incoming activities differently compared to GoToSocial.
Although these issues have been resolved, further analysis is required.&lt;/p&gt;
&lt;p&gt;In the meantime, work started on &quot;Enhance Signature Handling for Actors&quot;.
This will enable signature handling to support more types of actors.
Currently, only user and instance actors are supported.
Implementation of signature handling for actors began with the addition of support for users and instances.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Handle federated key material as first-class citizens instead of attaching them to their actors: &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10074&quot;&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Simplify signature validation to the least common denominator: &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10189&quot;&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Add support for RFC9421 signatures, which Mastodon may implement soon: &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10206&quot;&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Furthermore, work is underway on the implementation of &quot;Federated Search&quot;.
The first pull request in progress is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enhance Webfinger for upcoming actor types, such as repository or organization: &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/10107&quot;&gt;PR&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;Six months ago, distributed crawling &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320&quot;&gt;hit code.forgejo.org&lt;/a&gt;, and the mitigation measures put in place then held until a few weeks ago.
The mitigation measures relied on JavaScript-based proof-of-work, but the crawling software learned to resolve the measures, allowing the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/421&quot;&gt;attack to return&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since November 24, a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/421#issuecomment-8540487&quot;&gt;new blocking strategy&lt;/a&gt; has been implemented and successfully blocked around one million unique IPs daily.
Only 5,000 unique IP addresses reach code.forgejo.org daily, and no reports of legitimate traffic being blocked have been received.&lt;/p&gt;
&lt;p&gt;Furthermore, transparent Nginx servers were &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/76bb5823ed842d0c17404d745dbf8996cd380419&quot;&gt;added to act as caching proxies&lt;/a&gt; for the &lt;code&gt;/avatars&lt;/code&gt; and &lt;code&gt;/assets&lt;/code&gt; routes, in order to reduce the load on all Forgejo instances running in the Kubernetes cluster.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;Dutch government shows interest in Forgejo&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/412&quot;&gt;Dutch government has expressed interest&lt;/a&gt; in using Forgejo for its national code platform.
Currently, they rely on GitHub, but they are looking for alternatives for storing, collaborating and building government code.
This is part of the Open Source Program Office (OSPo)&apos;s efforts to regain digital sovereignty.
Throughout the month, &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2025/dutch-ospo/2025-11-11-initial-call.pdf&quot;&gt;a call&lt;/a&gt; also took place between a representative from the office and some Forgejo contributors.&lt;/p&gt;
&lt;p&gt;Moreover, it is pleasing to hear that the office expressed interest in exploring ways to contribute back to the project.&lt;/p&gt;
&lt;h3&gt;Matrix security disclosure&lt;/h3&gt;
&lt;p&gt;On 16 July 2025, &lt;a href=&quot;https://matrix.org/blog/2025/07/security-predisclosure/&quot;&gt;Matrix announced in a predisclosure&lt;/a&gt; that a security vulnerability had been found in the current room versions, which had been fixed.
This means for us that all rooms on Matrix must be updated.&lt;/p&gt;
&lt;p&gt;The development room &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/372#issuecomment-6953408&quot;&gt;was updated on November 23&lt;/a&gt; due to unexpected state behavior.
The last rooms to be updated are the Federation and Chat room.&lt;/p&gt;
&lt;p&gt;We are monitoring the adoption of the security fix and plan to complete the remaining updates soon.
An announcement will be made in each room before it is updated.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.&lt;/p&gt;
&lt;p&gt;The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0xllx0&quot;&gt;https://codeberg.org/0xllx0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/2franix&quot;&gt;https://codeberg.org/2franix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aahlenst&quot;&gt;https://codeberg.org/aahlenst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/abbra&quot;&gt;https://codeberg.org/abbra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/abma&quot;&gt;https://codeberg.org/abma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/acidbong&quot;&gt;https://codeberg.org/acidbong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adorable&quot;&gt;https://codeberg.org/adorable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex2761&quot;&gt;https://codeberg.org/Alex2761&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alexrp&quot;&gt;https://codeberg.org/alexrp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andreuz&quot;&gt;https://codeberg.org/andreuz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anorprogrammer&quot;&gt;https://codeberg.org/anorprogrammer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anvme&quot;&gt;https://codeberg.org/anvme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aral&quot;&gt;https://codeberg.org/aral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aravindh-murugesan&quot;&gt;https://codeberg.org/aravindh-murugesan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arthurzam&quot;&gt;https://codeberg.org/arthurzam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aspiring-learner&quot;&gt;https://codeberg.org/aspiring-learner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atthaphinya&quot;&gt;https://codeberg.org/Atthaphinya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AverageHelper&quot;&gt;https://codeberg.org/AverageHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aviallon&quot;&gt;https://codeberg.org/aviallon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ay-Run&quot;&gt;https://codeberg.org/Ay-Run&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/beewoolie&quot;&gt;https://codeberg.org/beewoolie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benjaoming&quot;&gt;https://codeberg.org/benjaoming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bespinas&quot;&gt;https://codeberg.org/bespinas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/blob42&quot;&gt;https://codeberg.org/blob42&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bngs&quot;&gt;https://codeberg.org/bngs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brenard&quot;&gt;https://codeberg.org/brenard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BtbN&quot;&gt;https://codeberg.org/BtbN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Bullbagaren&quot;&gt;https://codeberg.org/Bullbagaren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buttle&quot;&gt;https://codeberg.org/buttle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/carmenbianca&quot;&gt;https://codeberg.org/carmenbianca&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cdotnow&quot;&gt;https://codeberg.org/cdotnow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christopher-besch&quot;&gt;https://codeberg.org/christopher-besch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/circlebuilder&quot;&gt;https://codeberg.org/circlebuilder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cobak78&quot;&gt;https://codeberg.org/cobak78&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/codeberg_occupancy201&quot;&gt;https://codeberg.org/codeberg_occupancy201&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/codecat&quot;&gt;https://codeberg.org/codecat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Conduitry&quot;&gt;https://codeberg.org/Conduitry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/corentin-pro&quot;&gt;https://codeberg.org/corentin-pro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cpernot&quot;&gt;https://codeberg.org/cpernot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crueter&quot;&gt;https://codeberg.org/crueter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ctflora&quot;&gt;https://codeberg.org/ctflora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/daniele&quot;&gt;https://codeberg.org/daniele&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danielsy&quot;&gt;https://codeberg.org/danielsy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/depeo&quot;&gt;https://codeberg.org/depeo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dgkf&quot;&gt;https://codeberg.org/dgkf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dharsanb&quot;&gt;https://codeberg.org/dharsanb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dieg666&quot;&gt;https://codeberg.org/dieg666&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/diraneyya&quot;&gt;https://codeberg.org/diraneyya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dovah-kiin&quot;&gt;https://codeberg.org/dovah-kiin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/drewcassidy&quot;&gt;https://codeberg.org/drewcassidy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dulanic&quot;&gt;https://codeberg.org/Dulanic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/El_Brigos&quot;&gt;https://codeberg.org/El_Brigos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eli-schwartz&quot;&gt;https://codeberg.org/eli-schwartz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eloy&quot;&gt;https://codeberg.org/eloy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emilylange&quot;&gt;https://codeberg.org/emilylange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/erkia&quot;&gt;https://codeberg.org/erkia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/erkinalp&quot;&gt;https://codeberg.org/erkinalp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eutampieri&quot;&gt;https://codeberg.org/eutampieri&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/evrial&quot;&gt;https://codeberg.org/evrial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Familiar3500&quot;&gt;https://codeberg.org/Familiar3500&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fetnak&quot;&gt;https://codeberg.org/Fetnak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fg_xd&quot;&gt;https://codeberg.org/fg_xd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fhimpe&quot;&gt;https://codeberg.org/fhimpe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fhuberts&quot;&gt;https://codeberg.org/fhuberts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fiesh&quot;&gt;https://codeberg.org/fiesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fina&quot;&gt;https://codeberg.org/fina&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fluere&quot;&gt;https://codeberg.org/fluere&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnoopv&quot;&gt;https://codeberg.org/fnoopv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/freelock&quot;&gt;https://codeberg.org/freelock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fuse314&quot;&gt;https://codeberg.org/fuse314&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/futsuuu&quot;&gt;https://codeberg.org/futsuuu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gamepro110&quot;&gt;https://codeberg.org/gamepro110&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/geek-andi&quot;&gt;https://codeberg.org/geek-andi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gen_angry&quot;&gt;https://codeberg.org/gen_angry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gina020&quot;&gt;https://codeberg.org/Gina020&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gingermusketeer&quot;&gt;https://codeberg.org/gingermusketeer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/glossolalia&quot;&gt;https://codeberg.org/glossolalia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gridhead&quot;&gt;https://codeberg.org/gridhead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hails&quot;&gt;https://codeberg.org/hails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HarHarLinks&quot;&gt;https://codeberg.org/HarHarLinks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HarisDotParis&quot;&gt;https://codeberg.org/HarisDotParis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/helge&quot;&gt;https://codeberg.org/helge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hinara&quot;&gt;https://codeberg.org/Hinara&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hntin&quot;&gt;https://codeberg.org/hntin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hutch79&quot;&gt;https://codeberg.org/Hutch79&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iacore&quot;&gt;https://codeberg.org/iacore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iay&quot;&gt;https://codeberg.org/iay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iQ&quot;&gt;https://codeberg.org/iQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jA_cOp&quot;&gt;https://codeberg.org/jA_cOp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jacobsvante&quot;&gt;https://codeberg.org/jacobsvante&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JadedBlueEyes&quot;&gt;https://codeberg.org/JadedBlueEyes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jaller94&quot;&gt;https://codeberg.org/jaller94&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/johanneskastl&quot;&gt;https://codeberg.org/johanneskastl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/johnmoon&quot;&gt;https://codeberg.org/johnmoon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jrtcdbrg&quot;&gt;https://codeberg.org/jrtcdbrg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/juef&quot;&gt;https://codeberg.org/juef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kad-hollac1&quot;&gt;https://codeberg.org/kad-hollac1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kevinschoon&quot;&gt;https://codeberg.org/kevinschoon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kindlerw&quot;&gt;https://codeberg.org/kindlerw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Klampfradler&quot;&gt;https://codeberg.org/Klampfradler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/klausfyhn&quot;&gt;https://codeberg.org/klausfyhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kropotkin&quot;&gt;https://codeberg.org/Kropotkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/krosylight&quot;&gt;https://codeberg.org/krosylight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lapo&quot;&gt;https://codeberg.org/lapo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leana8959&quot;&gt;https://codeberg.org/leana8959&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/liilliil&quot;&gt;https://codeberg.org/liilliil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/limiting-factor&quot;&gt;https://codeberg.org/limiting-factor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lolen&quot;&gt;https://codeberg.org/lolen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ltning&quot;&gt;https://codeberg.org/ltning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lucaweiss&quot;&gt;https://codeberg.org/lucaweiss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lunar8982&quot;&gt;https://codeberg.org/Lunar8982&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/luthkur&quot;&gt;https://codeberg.org/luthkur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/m13o&quot;&gt;https://codeberg.org/m13o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/magj&quot;&gt;https://codeberg.org/magj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahiso&quot;&gt;https://codeberg.org/mahiso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mainboarder&quot;&gt;https://codeberg.org/mainboarder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MalcolmMielle&quot;&gt;https://codeberg.org/MalcolmMielle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/malik&quot;&gt;https://codeberg.org/malik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maymeow&quot;&gt;https://codeberg.org/maymeow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mcrmonkey&quot;&gt;https://codeberg.org/mcrmonkey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mdc_systems&quot;&gt;https://codeberg.org/mdc_systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Menelion&quot;&gt;https://codeberg.org/Menelion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mganter&quot;&gt;https://codeberg.org/mganter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mhoffrog&quot;&gt;https://codeberg.org/mhoffrog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micxer&quot;&gt;https://codeberg.org/micxer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MidnightRocket&quot;&gt;https://codeberg.org/MidnightRocket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MingcongBai&quot;&gt;https://codeberg.org/MingcongBai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/minimalmatt&quot;&gt;https://codeberg.org/minimalmatt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mizah&quot;&gt;https://codeberg.org/Mizah&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlugg&quot;&gt;https://codeberg.org/mlugg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mrus&quot;&gt;https://codeberg.org/mrus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mshcherbyna99&quot;&gt;https://codeberg.org/mshcherbyna99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MultisampledNight&quot;&gt;https://codeberg.org/MultisampledNight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mvdkleijn&quot;&gt;https://codeberg.org/mvdkleijn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nachtjasmin&quot;&gt;https://codeberg.org/nachtjasmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/narodr&quot;&gt;https://codeberg.org/narodr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nawan&quot;&gt;https://codeberg.org/nawan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/newgreenshoot&quot;&gt;https://codeberg.org/newgreenshoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nightfirecat&quot;&gt;https://codeberg.org/Nightfirecat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nihklas&quot;&gt;https://codeberg.org/nihklas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nilsph&quot;&gt;https://codeberg.org/nilsph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nitromelon&quot;&gt;https://codeberg.org/nitromelon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/noreng-br&quot;&gt;https://codeberg.org/noreng-br&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Omar007&quot;&gt;https://codeberg.org/Omar007&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ombrelin&quot;&gt;https://codeberg.org/ombrelin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/only-a-user&quot;&gt;https://codeberg.org/only-a-user&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pboguslawski&quot;&gt;https://codeberg.org/pboguslawski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/polyfloyd&quot;&gt;https://codeberg.org/polyfloyd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PowerUser&quot;&gt;https://codeberg.org/PowerUser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/proton-ab&quot;&gt;https://codeberg.org/proton-ab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RahulGautamSingh&quot;&gt;https://codeberg.org/RahulGautamSingh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RaymondKroon&quot;&gt;https://codeberg.org/RaymondKroon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rchk&quot;&gt;https://codeberg.org/rchk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/retarded-beast&quot;&gt;https://codeberg.org/retarded-beast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rfc2549&quot;&gt;https://codeberg.org/rfc2549&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rienafairefr&quot;&gt;https://codeberg.org/rienafairefr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RockWolf&quot;&gt;https://codeberg.org/RockWolf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RokeJulianLockhart&quot;&gt;https://codeberg.org/RokeJulianLockhart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/romainreignier&quot;&gt;https://codeberg.org/romainreignier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvba&quot;&gt;https://codeberg.org/rvba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryanlerch&quot;&gt;https://codeberg.org/ryanlerch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s3lph&quot;&gt;https://codeberg.org/s3lph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/schulzer&quot;&gt;https://codeberg.org/schulzer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sinsky&quot;&gt;https://codeberg.org/sinsky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sjsadowski&quot;&gt;https://codeberg.org/sjsadowski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skyper&quot;&gt;https://codeberg.org/Skyper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smartclip_tim&quot;&gt;https://codeberg.org/smartclip_tim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smichel17&quot;&gt;https://codeberg.org/smichel17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smlxdesign&quot;&gt;https://codeberg.org/smlxdesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/spubs&quot;&gt;https://codeberg.org/spubs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stefangehn&quot;&gt;https://codeberg.org/stefangehn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/StevanMiladinovic&quot;&gt;https://codeberg.org/StevanMiladinovic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strk&quot;&gt;https://codeberg.org/strk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Stunkymonkey&quot;&gt;https://codeberg.org/Stunkymonkey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/syncstack&quot;&gt;https://codeberg.org/syncstack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/t-h-i-s&quot;&gt;https://codeberg.org/t-h-i-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TaaviE&quot;&gt;https://codeberg.org/TaaviE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tace16&quot;&gt;https://codeberg.org/tace16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tct123&quot;&gt;https://codeberg.org/tct123&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timedout&quot;&gt;https://codeberg.org/timedout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TomGudman&quot;&gt;https://codeberg.org/TomGudman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tseeker&quot;&gt;https://codeberg.org/tseeker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tushev&quot;&gt;https://codeberg.org/tushev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unmixable163&quot;&gt;https://codeberg.org/unmixable163&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Utsav-Ladani&quot;&gt;https://codeberg.org/Utsav-Ladani&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VadZ&quot;&gt;https://codeberg.org/VadZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/victordargallo&quot;&gt;https://codeberg.org/victordargallo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VioletLul&quot;&gt;https://codeberg.org/VioletLul&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voidcontext&quot;&gt;https://codeberg.org/voidcontext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/volkan&quot;&gt;https://codeberg.org/volkan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/waldyrious&quot;&gt;https://codeberg.org/waldyrious&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/whitequark&quot;&gt;https://codeberg.org/whitequark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wkoszek&quot;&gt;https://codeberg.org/wkoszek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/X1SystemError0X&quot;&gt;https://codeberg.org/X1SystemError0X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/XeroX&quot;&gt;https://codeberg.org/XeroX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeager&quot;&gt;https://codeberg.org/yeager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/YoshikageKira&quot;&gt;https://codeberg.org/YoshikageKira&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Yushu&quot;&gt;https://codeberg.org/Yushu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo monthly report - October 2025</title><link>https://forgejo.org/2025-10-monthly-report/</link><guid isPermaLink="true">https://forgejo.org/2025-10-monthly-report/</guid><description>Forgejo is 3 years old and was made possible by over 1,930 people and and many other free projects. Forgejo v13 was released and security vulnerabilities were fixed. Forgejo-contrib incubated new projects.</description><pubDate>Sat, 08 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo v13&lt;/h3&gt;
&lt;p&gt;The release and security teams were exceptionally busy this month.
As planned, &lt;a href=&quot;https://forgejo.org/2025-10-release-v13-0/&quot;&gt;Forgejo v13.0.0&lt;/a&gt; was published 16 October and the problems discovered during release candidate phase were dealt with in time.
There was no last minute surprise.&lt;/p&gt;
&lt;p&gt;However, in the hours that followed the release, a serious regression was discovered and a warning was posted to the release notes discouraging anyone to upgrade.
It was fixed the next day and a new version published immediately as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/29090&quot;&gt;Forgejo v13.0.1&lt;/a&gt;.
This was an exceptional combination of bad luck (the root cause is a bug that has been lurking in the codebase for years) and good luck (a fix was discovered a few days before).
For more information, please read the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/404&quot;&gt;postmortem that contains all the details&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On 16 October the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#security&quot;&gt;security team&lt;/a&gt; received a detailed vulnerability report that required immediate attention.
It was about a new critical vulnerability that was fixed in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/29156&quot;&gt;Forgejo v13.0.2&lt;/a&gt; published 26 October.
Originally planned to be published 7 November, it had to be expedited because it was leaked publicly, putting Forgejo users and admins at risk.&lt;/p&gt;
&lt;p&gt;This cascade of unforeseeable events that required urgent attention is luckily extremely rare.
The last critical security fix was &lt;a href=&quot;https://forgejo.org/2023-11-release-v1-20-5-1/#api-and-web-endpoint-vulnerable-to-manually-crafted-identifiers&quot;&gt;two years ago&lt;/a&gt; and there never was a regression so severe that it turned out to be necessary to discourage admins to upgrade.&lt;/p&gt;
&lt;p&gt;It takes a toll on volunteer team members who were forced to reconsider their priorities to deal with the emergencies.
It is also a reminder that releasing a software such as Forgejo requires significant work.
If you are reading this, &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/411&quot;&gt;please consider participating&lt;/a&gt; to ensure Forgejo releases are both reliable and secure.&lt;/p&gt;
&lt;h3&gt;Helm chart&lt;/h3&gt;
&lt;p&gt;Helm chart &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v15.0.0&quot;&gt;v15&lt;/a&gt; was released on 16 October.
This release is the companion release to Forgejo v13.
The version contains two breaking changes, please check the release notes before upgrading.&lt;/p&gt;
&lt;p&gt;Additionally a new &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v14.0.4&quot;&gt;minor version (v14.0.4)&lt;/a&gt; was also published allowing &lt;code&gt;-rootless&lt;/code&gt; suffix in &lt;code&gt;image.tag&lt;/code&gt; and updating dependencies.&lt;/p&gt;
&lt;h2&gt;Forgejo is 3 years old&lt;/h2&gt;
&lt;p&gt;In October 2022, &lt;a href=&quot;https://gitea-open-letter.coding.social/&quot;&gt;Forgejo was announced&lt;/a&gt; in reaction to the takeover of Gitea.
After a two months of preparation, &lt;a href=&quot;https://forgejo.org/2022-12-26-monthly-update/&quot;&gt;the first release&lt;/a&gt; was published and &lt;a href=&quot;https://blog.codeberg.org/codeberg-launches-forgejo.html&quot;&gt;Codeberg announced&lt;/a&gt; using it.&lt;/p&gt;
&lt;p&gt;In March 2024, the &lt;a href=&quot;https://forgejo.org/2024-02-monthly-update/#implementation-of-the-hard-fork&quot;&gt;hard fork&lt;/a&gt; from Gitea happened after weeks of hard work.
Later in August 2024, the license of Forgejo was changed to &lt;a href=&quot;https://forgejo.org/2024-08-gpl/&quot;&gt;GPLv3+&lt;/a&gt;, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Copyleft&quot;&gt;Copyleft license&lt;/a&gt;, to further manifest and guarantee freedoms to users of the software.&lt;/p&gt;
&lt;p&gt;In these past three years, Forgejo matured and transformed into an independent project, with a solid user base and a lively community of contributors.
It involved a lot of coding and other time consuming technical work.
But it was first and foremost a human adventure, with its share of plot twists and drama.&lt;/p&gt;
&lt;p&gt;In the past three years, not only &lt;a href=&quot;#we-forge---since-three-years&quot;&gt;over 1,930 users&lt;/a&gt; contributed to Forgejo by reporting a bug, voicing an idea in the chatroom or implementing a new feature, there are also many other projects making Forgejo possible.&lt;br /&gt;Forgejo is built on top of a large Free Software ecosystem involving thousands of people and hundreds of projects.
It would not exist without it and, more importantly, it would not be able to move forward without the effort to maintain and develop those dependencies.
At this point, we would also like to express our gratitude to many of these projects.
Some projects that have particularly influenced Forgejo are listed below.
Otherwise, you can gain a deeper insight by &lt;a href=&quot;https://code.forgejo.org/assets/licenses.txt&quot;&gt;reading the license file&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/go-ap/activitypub&quot;&gt;activitypub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/blevesearch/bleve&quot;&gt;bleve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chartjs/chartjs-plugin-zoom&quot;&gt;chartjs-plugin-zoom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alecthomas/chroma&quot;&gt;chroma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/djlint/djLint&quot;&gt;djlint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/superseriousbusiness/exif-terminator&quot;&gt;exif-terminator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://f3.forgefriends.org/&quot;&gt;friendly forge format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/go-gitea/gitea&quot;&gt;gitea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gobwas/glob&quot;&gt;glob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/go-chi&quot;&gt;go-chi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/go-openapi&quot;&gt;go-openapi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://go.dev/&quot;&gt;golang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yuin/goldmark&quot;&gt;goldmark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/grpc/grpc-go&quot;&gt;grpc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/capricorn86/happy-dom&quot;&gt;happy-dom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/katex&quot;&gt;katex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mermaid.js.org/&quot;&gt;mermaid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nektos/act&quot;&gt;netktos/act&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://playwright.dev/&quot;&gt;playwright&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://primer.style/octicons/&quot;&gt;primer/octicons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/renovatebot/renovate&quot;&gt;renovate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SortableJS/Sortable&quot;&gt;sortablejs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stretchr/testify&quot;&gt;stretchr/testify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tailwindcss.com/&quot;&gt;tailwindcss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vitest.dev/&quot;&gt;vitest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weblate.org/&quot;&gt;weblate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webpack.js.org/&quot;&gt;webpack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Contrib Projects&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib&quot;&gt;forgejo-contrib&lt;/a&gt; is a collection of projects that are related to Forgejo, but not under Forgejo&apos;s governance.
Projects in this space can be supported by Forgejo&apos;s &lt;a href=&quot;https://codeberg.org/forgejo/code-of-conduct&quot;&gt;Code of Conduct&lt;/a&gt; while continuing independent development.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-cli&quot;&gt;forgejo-cli&lt;/a&gt; has been incorporated into forgejo-contrib, &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/400&quot;&gt;by request&lt;/a&gt; of its author Cyborus.
forgejo-cli interacts with Forgejo&apos;s API from the command-line, allowing for easier access to many capabilities like creating a pull request.
This project also brings some Rust into the Forgejo-adjacent ecosystem.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-e2e-report&quot;&gt;forgejo-e2e-report&lt;/a&gt; has also been incorporated into forgejo-contrib.
It is a development tool for Forgejo that tracks the failure rate of our end-to-end (e2e) test suite and provides a regularly generated report on flaky tests and which browsers generate them.
For analyzing the raw logs the project uses DuckDB.
In October, the success rate in e2e tests on the &lt;code&gt;forgejo&lt;/code&gt; branch dropped as low as 27% in a week, as updated browsers and unreliable tests have combined to make e2e testing frustrating.
With the guidance of this analysis, their is the hope to reduce false-positives test failures.&lt;/p&gt;
&lt;h2&gt;User research&lt;/h2&gt;
&lt;p&gt;The user research team prepared for another series of user interviews in November, the first one successfully conducted by the end of October.
We are looking for input not only from Forgejo users but also from people who could show us their workflow from other software solutions, such as dealing with moderation reports on social media instances and forums or developing software using other forges.
Please help us by &lt;a href=&quot;https://cloud.splvs.net/apps/calendar/appointment/cHr5MB2PoZDp&quot;&gt;scheduling a 45 minutes research session with us&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The insights will help &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/131&quot;&gt;improving the contribution workflow&lt;/a&gt;, improving instance&apos;s moderation tools and provide valuable insights into other topics that are currently in the process of being (re-)designed.&lt;/p&gt;
&lt;p&gt;The user research team currently consists of only one person.
Following a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/323&quot;&gt;call for help from several months ago&lt;/a&gt;, the user research is for the first time assisted by a second user researcher with the goal to reduce the dependence on individuals going forward.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Work on improving the federation related test suite continued.
A &lt;a href=&quot;https://code.forgejo.org/famfo/end-to-end/pulls/2&quot;&gt;pull request&lt;/a&gt; is in progress to run Mastodon, GoToSocial and Forgejo via HTTPS on the default ports in the end-to-end test.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;Forgejo largely profits from its many volunteer contributors.
A minority of Forgejo contributors earn a living by developing features or fixes.
However, large changes such as improving LFS support or &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/131&quot;&gt;reworking the fundamental workflow for contributions to repositories&lt;/a&gt; are usually hard to complete with volunteers only.&lt;/p&gt;
&lt;p&gt;In April 2025, a &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2025/2025-04-01-nlnet-ngi0-commons&quot;&gt;grant application was created&lt;/a&gt; and NLnet agreed to compensate Forgejo contributors for a total of € 50,000 for working on various topics.
The formalities have been settled by the end of October and the beneficiaries of the grant are now able to start the work.&lt;/p&gt;
&lt;p&gt;The grant will wrap up &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8716&quot;&gt;pending work on moderation tooling&lt;/a&gt;, improve Git LFS support, do changes to the contribution workflow and fix contrast issues in the themes by creating a semantic set of colors that are supposed to be used with each other.
The &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/commit/dbfc1e25ce0a81bdd4f6ae11983f1d5aafc52cda/2025/2025-04-01-nlnet-ngi0-commons/MoU.takentaal&quot;&gt;full list of milestones as agreed by NLnet&lt;/a&gt; can be found in the sustainability repository.&lt;/p&gt;
&lt;p&gt;Any Forgejo contributor with reasonable experience is encouraged to participate in the grants and can ask to be added as a beneficiary for ongoing or future grants.
If this sounds interesting to you, make sure to introduce yourself in the &lt;a href=&quot;https://matrix.to/#/#forgejo-sustainability:matrix.org&quot;&gt;#forgejo-sustainability:matrix.org&lt;/a&gt; chatroom.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/&quot;&gt;Forgejo infrastructure&lt;/a&gt; hosts &lt;a href=&quot;https://data.forgejo.org&quot;&gt;https://data.forgejo.org&lt;/a&gt; which is used by default to checkout the most commonly used actions (e.g. &lt;a href=&quot;https://code.forgejo.org/actions/checkout&quot;&gt;actions/checkout&lt;/a&gt;, &lt;a href=&quot;https://code.forgejo.org/actions/cache&quot;&gt;actions/cache&lt;/a&gt;, etc.).
It was setup early 2025 to be a more available alternative to pulling them from &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;https://code.forgejo.org/&lt;/a&gt;.
For instance during the release candidate phase in the Forgejo development cycle, it could be upgraded rather frequently or even be unavailable when a bug is discovered that causes it to unexpectedly shutdown.&lt;/p&gt;
&lt;p&gt;And it has been successful with a 99.99% availability for data.forgejo.org in the past 30 days which is better than the 99.95% availability for code.forgejo.org.
But it has been suffering from a non fatal issue from the beginning that was only identified and fixed this month.
Once per hour on average, sometime more often, &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/908&quot;&gt;cloning an action would take up to three minutes&lt;/a&gt;.
It never was fatal within the Forgejo infrastructure itself and rare enough to not raise any suspicion.
And by the time someone else reported the problem it was gone and assumed to be due to environmental factors unrelated to the Forgejo infrastructure.&lt;/p&gt;
&lt;p&gt;For some unknown reason, those delays started to cause rather frequent errors in the Forgejo infrastructure for the first time this month.
A series of experiments were conducted and the NFS backend was suspected to be the root cause, although all attempts to obtain actual evidence failed.
As the devops team ran out of ideas, the storage backend was &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/10bf675e10a3245424141d5309d42eb4d38618b7&quot;&gt;replaced with local storage&lt;/a&gt;.
It rarely is a good idea to try fix a problem without understanding the root cause but it was also a chance to rule out NFS and continue the investigation.&lt;/p&gt;
&lt;p&gt;As it turns out switching to local storage solved the problem entirely.
The mystery of the occasional NFS slowness is unlikely to be solved as future distributed storage is more likely to be based on either GlusterFS or Ceph.&lt;/p&gt;
&lt;h2&gt;Moderation&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#moderation&quot;&gt;moderation team&lt;/a&gt; is watching Forgejo spaces and used the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6977&quot;&gt;new v13 moderation tool&lt;/a&gt; for the first time, to quickly report spam to the Codeberg Moderation Team.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/346&quot;&gt;user was warned&lt;/a&gt; and another user was &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/344&quot;&gt;banned from Forgejo spaces&lt;/a&gt;, which was more work.
The decision to ban a user is not taken lightly and only happens after repeated attempts to find an acceptable solution through private discussions, over an extended period of time.
Moderation is rare (four times only in the past two years) despite a growing number of participant.
It suggests that having a zero tolerance policy for behavior going against the &lt;a href=&quot;https://codeberg.org/forgejo/code-of-conduct&quot;&gt;Code of Conduct&lt;/a&gt; is an effective deterrent.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;Matrix security disclosure&lt;/h3&gt;
&lt;p&gt;On 16 July 2025, &lt;a href=&quot;https://matrix.org/blog/2025/07/security-predisclosure/&quot;&gt;Matrix announced in a predisclosure&lt;/a&gt; that a security vulnerability had been found in the current room versions and that it had been fixed.
For us, this means that all rooms on Matrix must be updated.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/372#issuecomment-6953408&quot;&gt;Eight rooms have been updated so far&lt;/a&gt;, and this work is ongoing.
We are monitoring the adoption of the security fix and plan to complete the remaining updates soon.
An announcement will be made in every room before it is updated.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.&lt;/p&gt;
&lt;p&gt;The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0x00cl&quot;&gt;https://codeberg.org/0x00cl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0xllx0&quot;&gt;https://codeberg.org/0xllx0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/2franix&quot;&gt;https://codeberg.org/2franix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/5225225&quot;&gt;https://codeberg.org/5225225&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/53r1k&quot;&gt;https://codeberg.org/53r1k&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aahlenst&quot;&gt;https://codeberg.org/aahlenst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adachauer&quot;&gt;https://codeberg.org/adachauer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/albassort&quot;&gt;https://codeberg.org/albassort&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex2761&quot;&gt;https://codeberg.org/Alex2761&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex619829&quot;&gt;https://codeberg.org/Alex619829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alexrp&quot;&gt;https://codeberg.org/alexrp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amessina&quot;&gt;https://codeberg.org/amessina&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amoroso&quot;&gt;https://codeberg.org/amoroso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andrewgdotcom&quot;&gt;https://codeberg.org/andrewgdotcom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aniva&quot;&gt;https://codeberg.org/aniva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anorprogrammer&quot;&gt;https://codeberg.org/anorprogrammer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AnsisMalins&quot;&gt;https://codeberg.org/AnsisMalins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anthony-unicare&quot;&gt;https://codeberg.org/anthony-unicare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/antura-stehak&quot;&gt;https://codeberg.org/antura-stehak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/apoorv569&quot;&gt;https://codeberg.org/apoorv569&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/archk&quot;&gt;https://codeberg.org/archk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arifpedia&quot;&gt;https://codeberg.org/arifpedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atthaphinya&quot;&gt;https://codeberg.org/Atthaphinya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AverageHelper&quot;&gt;https://codeberg.org/AverageHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/axaloteDev&quot;&gt;https://codeberg.org/axaloteDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bartavi&quot;&gt;https://codeberg.org/bartavi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/barulheira&quot;&gt;https://codeberg.org/barulheira&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bespinas&quot;&gt;https://codeberg.org/bespinas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Bigpappic&quot;&gt;https://codeberg.org/Bigpappic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bloatfamous&quot;&gt;https://codeberg.org/bloatfamous&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bmorel&quot;&gt;https://codeberg.org/bmorel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bojidar-bg&quot;&gt;https://codeberg.org/bojidar-bg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bouncepaw&quot;&gt;https://codeberg.org/bouncepaw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bpinsard&quot;&gt;https://codeberg.org/bpinsard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BtbN&quot;&gt;https://codeberg.org/BtbN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Bullbagaren&quot;&gt;https://codeberg.org/Bullbagaren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/butterflyoffire&quot;&gt;https://codeberg.org/butterflyoffire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christopher-besch&quot;&gt;https://codeberg.org/christopher-besch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christophjahnke&quot;&gt;https://codeberg.org/christophjahnke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cmuench&quot;&gt;https://codeberg.org/cmuench&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crueter&quot;&gt;https://codeberg.org/crueter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cswimr&quot;&gt;https://codeberg.org/cswimr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DaniilBuhteev&quot;&gt;https://codeberg.org/DaniilBuhteev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darix&quot;&gt;https://codeberg.org/darix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darkswordreams&quot;&gt;https://codeberg.org/darkswordreams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dbarenholz&quot;&gt;https://codeberg.org/dbarenholz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/deadkittens&quot;&gt;https://codeberg.org/deadkittens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/decimal&quot;&gt;https://codeberg.org/decimal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/didyouexpectthat&quot;&gt;https://codeberg.org/didyouexpectthat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/doasu&quot;&gt;https://codeberg.org/doasu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/domi41&quot;&gt;https://codeberg.org/domi41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dovah-kiin&quot;&gt;https://codeberg.org/dovah-kiin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/drewcassidy&quot;&gt;https://codeberg.org/drewcassidy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dwt&quot;&gt;https://codeberg.org/dwt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dyniec&quot;&gt;https://codeberg.org/dyniec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eest&quot;&gt;https://codeberg.org/eest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eik&quot;&gt;https://codeberg.org/eik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ekidney&quot;&gt;https://codeberg.org/ekidney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eli-schwartz&quot;&gt;https://codeberg.org/eli-schwartz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/erkinalp&quot;&gt;https://codeberg.org/erkinalp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/erral&quot;&gt;https://codeberg.org/erral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EvanCarroll&quot;&gt;https://codeberg.org/EvanCarroll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fareycircles&quot;&gt;https://codeberg.org/fareycircles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fg_xd&quot;&gt;https://codeberg.org/fg_xd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fhuberts&quot;&gt;https://codeberg.org/fhuberts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fiesh&quot;&gt;https://codeberg.org/fiesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fina&quot;&gt;https://codeberg.org/fina&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FML128&quot;&gt;https://codeberg.org/FML128&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnoopv&quot;&gt;https://codeberg.org/fnoopv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/freaktechnik&quot;&gt;https://codeberg.org/freaktechnik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fvidak01&quot;&gt;https://codeberg.org/fvidak01&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Granular9241&quot;&gt;https://codeberg.org/Granular9241&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grgberg&quot;&gt;https://codeberg.org/grgberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/guillomep&quot;&gt;https://codeberg.org/guillomep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GustavoPaterno&quot;&gt;https://codeberg.org/GustavoPaterno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hachem&quot;&gt;https://codeberg.org/hachem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/halvin&quot;&gt;https://codeberg.org/halvin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/helge&quot;&gt;https://codeberg.org/helge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hiraku&quot;&gt;https://codeberg.org/Hiraku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hra42&quot;&gt;https://codeberg.org/hra42&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hughrun&quot;&gt;https://codeberg.org/hughrun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iamcurse&quot;&gt;https://codeberg.org/iamcurse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iQ&quot;&gt;https://codeberg.org/iQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/itinerare&quot;&gt;https://codeberg.org/itinerare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ItsHarper&quot;&gt;https://codeberg.org/ItsHarper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/izzy&quot;&gt;https://codeberg.org/izzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jacksonchen666&quot;&gt;https://codeberg.org/jacksonchen666&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jag&quot;&gt;https://codeberg.org/jag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/janbc&quot;&gt;https://codeberg.org/janbc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jank1619&quot;&gt;https://codeberg.org/jank1619&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jariasl&quot;&gt;https://codeberg.org/jariasl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jarik&quot;&gt;https://codeberg.org/jarik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jeanbaptisteC&quot;&gt;https://codeberg.org/jeanbaptisteC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jednorozec&quot;&gt;https://codeberg.org/jednorozec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Jengro&quot;&gt;https://codeberg.org/Jengro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jgart&quot;&gt;https://codeberg.org/jgart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JL710&quot;&gt;https://codeberg.org/JL710&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmshrtn&quot;&gt;https://codeberg.org/jmshrtn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jorti&quot;&gt;https://codeberg.org/jorti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/joxeankoret&quot;&gt;https://codeberg.org/joxeankoret&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kbaker&quot;&gt;https://codeberg.org/kbaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kinnison&quot;&gt;https://codeberg.org/kinnison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/klavax&quot;&gt;https://codeberg.org/klavax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/laumann&quot;&gt;https://codeberg.org/laumann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leomeinel&quot;&gt;https://codeberg.org/leomeinel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/limiting-factor&quot;&gt;https://codeberg.org/limiting-factor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/litetex&quot;&gt;https://codeberg.org/litetex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LordMZTE&quot;&gt;https://codeberg.org/LordMZTE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LostLuma&quot;&gt;https://codeberg.org/LostLuma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/m13o&quot;&gt;https://codeberg.org/m13o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martianh&quot;&gt;https://codeberg.org/martianh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maverick2001&quot;&gt;https://codeberg.org/maverick2001&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mborzsony&quot;&gt;https://codeberg.org/mborzsony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mdaniels5757&quot;&gt;https://codeberg.org/mdaniels5757&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mdk&quot;&gt;https://codeberg.org/mdk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meisam&quot;&gt;https://codeberg.org/meisam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MerlijnWajer&quot;&gt;https://codeberg.org/MerlijnWajer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfxa&quot;&gt;https://codeberg.org/mfxa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/milahu&quot;&gt;https://codeberg.org/milahu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/miversen33&quot;&gt;https://codeberg.org/miversen33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mjsir911&quot;&gt;https://codeberg.org/mjsir911&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Morpheus0x&quot;&gt;https://codeberg.org/Morpheus0x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mrkwlsn&quot;&gt;https://codeberg.org/mrkwlsn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msfjarvis&quot;&gt;https://codeberg.org/msfjarvis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mubelotix&quot;&gt;https://codeberg.org/Mubelotix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mwerle&quot;&gt;https://codeberg.org/mwerle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/myers&quot;&gt;https://codeberg.org/myers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mysticmode&quot;&gt;https://codeberg.org/mysticmode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NatoBoram&quot;&gt;https://codeberg.org/NatoBoram&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neamtim&quot;&gt;https://codeberg.org/neamtim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NickyTheNeko&quot;&gt;https://codeberg.org/NickyTheNeko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NicoleS&quot;&gt;https://codeberg.org/NicoleS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nightfirecat&quot;&gt;https://codeberg.org/Nightfirecat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nilsph&quot;&gt;https://codeberg.org/nilsph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/notevil&quot;&gt;https://codeberg.org/notevil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/notyet&quot;&gt;https://codeberg.org/notyet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nykula&quot;&gt;https://codeberg.org/nykula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oltdaniel&quot;&gt;https://codeberg.org/oltdaniel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/orkut&quot;&gt;https://codeberg.org/orkut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patka&quot;&gt;https://codeberg.org/patka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pavel_hushcha&quot;&gt;https://codeberg.org/pavel_hushcha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pboguslawski&quot;&gt;https://codeberg.org/pboguslawski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pgmtx&quot;&gt;https://codeberg.org/pgmtx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/philpep&quot;&gt;https://codeberg.org/philpep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pixelcode&quot;&gt;https://codeberg.org/pixelcode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pluk77&quot;&gt;https://codeberg.org/pluk77&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/polyfloyd&quot;&gt;https://codeberg.org/polyfloyd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/proton-ab&quot;&gt;https://codeberg.org/proton-ab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/psa&quot;&gt;https://codeberg.org/psa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Puls3&quot;&gt;https://codeberg.org/Puls3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/raboof&quot;&gt;https://codeberg.org/raboof&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/reiver&quot;&gt;https://codeberg.org/reiver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ricky-Tigg&quot;&gt;https://codeberg.org/Ricky-Tigg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RivenSkaye&quot;&gt;https://codeberg.org/RivenSkaye&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RockWolf&quot;&gt;https://codeberg.org/RockWolf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rodrigo-gonzalez&quot;&gt;https://codeberg.org/rodrigo-gonzalez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rohitkumarankam&quot;&gt;https://codeberg.org/rohitkumarankam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/romainreignier&quot;&gt;https://codeberg.org/romainreignier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvba&quot;&gt;https://codeberg.org/rvba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryanlerch&quot;&gt;https://codeberg.org/ryanlerch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sacm150&quot;&gt;https://codeberg.org/sacm150&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/simendsjo&quot;&gt;https://codeberg.org/simendsjo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smartclip_tim&quot;&gt;https://codeberg.org/smartclip_tim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smlxdesign&quot;&gt;https://codeberg.org/smlxdesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sneakers-the-rat&quot;&gt;https://codeberg.org/sneakers-the-rat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snooper3491&quot;&gt;https://codeberg.org/snooper3491&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sokai&quot;&gt;https://codeberg.org/sokai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stanek&quot;&gt;https://codeberg.org/stanek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stavros-k&quot;&gt;https://codeberg.org/stavros-k&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stooj&quot;&gt;https://codeberg.org/stooj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/struffel&quot;&gt;https://codeberg.org/struffel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sumisukyo&quot;&gt;https://codeberg.org/sumisukyo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Synchro&quot;&gt;https://codeberg.org/Synchro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/syncstack&quot;&gt;https://codeberg.org/syncstack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tace16&quot;&gt;https://codeberg.org/tace16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/talu&quot;&gt;https://codeberg.org/talu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thekeura&quot;&gt;https://codeberg.org/thekeura&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thubrecht&quot;&gt;https://codeberg.org/thubrecht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timka&quot;&gt;https://codeberg.org/timka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toasterbirb&quot;&gt;https://codeberg.org/toasterbirb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toothrot&quot;&gt;https://codeberg.org/toothrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tseeker&quot;&gt;https://codeberg.org/tseeker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tumult2004&quot;&gt;https://codeberg.org/tumult2004&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmaster&quot;&gt;https://codeberg.org/tuxmaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unlogic&quot;&gt;https://codeberg.org/unlogic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/untitaker&quot;&gt;https://codeberg.org/untitaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vadiml1024&quot;&gt;https://codeberg.org/vadiml1024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VadZ&quot;&gt;https://codeberg.org/VadZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VaiTon&quot;&gt;https://codeberg.org/VaiTon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vandenoever&quot;&gt;https://codeberg.org/vandenoever&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VewDev&quot;&gt;https://codeberg.org/VewDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/victordargallo&quot;&gt;https://codeberg.org/victordargallo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vidya&quot;&gt;https://codeberg.org/vidya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voidcontext&quot;&gt;https://codeberg.org/voidcontext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/volkmnv&quot;&gt;https://codeberg.org/volkmnv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vorlif&quot;&gt;https://codeberg.org/vorlif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vpeltnt&quot;&gt;https://codeberg.org/vpeltnt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/werdahias&quot;&gt;https://codeberg.org/werdahias&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/X1SystemError0X&quot;&gt;https://codeberg.org/X1SystemError0X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/XeroX&quot;&gt;https://codeberg.org/XeroX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yannikbloscheck&quot;&gt;https://codeberg.org/yannikbloscheck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeager&quot;&gt;https://codeberg.org/yeager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ztx&quot;&gt;https://codeberg.org/ztx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;We Forge - since three years&lt;/h2&gt;
&lt;p&gt;The following list of contributors is intended to acknowledge all the contributions made over the past three years.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;0ko, 0n1cOn3, 0x00cl, 0x5f, 0xC0ncord, 0xllx0, 1011, 11xx, 242336, 2franix, 413x1nkp, 5225225, 53r1k, 6543, 71rd, 747, 8xLGyCLz, 9pfs, aahlenst, aaronriedel, abacabadabacaba, abc1763613206, abueide, abyxcos, achyrva, acidbong, acioustick, ada4a, adaaa, adachauer, AdamGreenberg, AdamMajer, adamu, addisoncrump, adf19, Adolar0042, adr1enbe4udou1n, adriand, Adrianyyy, adrinux, Adrodoc, adulau, adz, aec, Aeris1One, aimuz, airbreather, aivot-on, ajs124, ajtatum, alanmena, albassort, Albirew, albundy83, aleksi, alex19srv, alex265, Alex2761, alex3305, Alex619829, alexandria, alexAubin, Alexilator, alexrp, alextecplayz, algernon, AliveDevil, aljazerzen, alopez, aloxlamm, alperen, alrs, alsutton, amano.kenji, amartinz, amdim, amearb, amessina, Aminda, Amolith, amoroso, amoutill, ams42, amv-bamboo, anbraten,
andar1an, Andre601, andrewgdotcom, AndrewKvalheim, andrewrk, andyquinterom, angelnu, aniva, annoyingusername, anonymous, anorprogrammer, anri, anschuetz, AnselmF, ansemjo, AnsisMalins, antaanimosity, anthony-unicare, antki, AntoninDelFabbro, antoyo, antura-stehak, AntwortEinesLebens, anze, aogier, Apfelwurm, APoniatowski, apoorv569, Application-Maker, apteryx, Aqa-Ib, aqtrans, aral, archk, argrat, arifpedia, arija, arkdae, ArnaudLier, Arsen, Artha, Artiman, artnay, asandikci, ashimokawa, ashur*iraq, atalanttore, Atalanttore, atarwn, Atemu, Athozus, athrun, atimy, Atthaphinya, atticus-sullivan, Atul_Eterno, austinhuang, AverageHelper, avesst, Aviac, aviallon, avidseeker, avobs, awarg, awiteb, Awlex, axaloteDev, axd99, axelsilverdew, axka, ayakael, AYM1607, ayykamp, azmeuk, AzzyDev, b1nar10, Baa, bachorp, bacon, badnetmask, badrihippo, Baempaieo, bagder, bakaroni, balinteus, baltazar, banaanihillo, bapt, barrie, BarryLhm, bart, bartavi, bartvdbraak, barulheira, basebuilder,
bat, Baturax, BaumiCoder, bbastin, bbjubjub2494, bbqrob, bdr9, bdube, bdube_gh, Be.ing, be4zad, becm, behm, belette, bencurio, benedictjohannes, bengrue, benjidial, benniekiss, Benny, benteg, Beowulf, Berns, bespinas, bibu5, Bigpappic, billynoah, bitbat, Bixilon, bizdelnick, bjoernager, bkil, blaahaj, BlackSpirits, blaise, blechlawine, bloatfamous, blumia, bmcclure, bmorel, bntn, bodsch, bojidar-bg, Booklordofthedings, bookwar, bookworm, borega, boughtonp, bouncepaw, bowie, bpinsard, BradBot1, brainchild, brainiac, bramh, brano, braydofficial, brechtvl, brenard, brian6932, brigsi, brook, BrunoBernardino, BSD, BtbN, btlogy, buhtz, Bullbagaren, burakozaydin, butterflyoffire, bvandevliet, bziemons, c8h4, CactiChameleon9, caesar, cagrant, camillo, Canard, CanisHelix, captainepoch, carlokok, Carlos17Kopra, carnivorecookies, cartola, catfromplan9, catgirll, cblgh, cbn8krgm, CDN18, cdotnow, CEbbinghaus, cemoktra, CenTdemeern1, cfebs, cgzones, ch0ccyra1n, ChandanTeekinavar,
channel-42, charles25565, chavacava, cherryb, cherwey, chizutan5, chlorine, chris420, chrisnicola, christopher-besch, christophjahnke, ChrSt, chrysn, Chucky2401, ciampix, cider, circlebuilder, civodul, CL0Pinette, clarfonthey, ClemaX, clemensgeibel, clementwanjau, CleoMenezesJr, cloud, cmonty14, cmuench, CN-P5, cobak78, code-kungfu, codebert, CodeDoctor, codenyte, coderofsalvation, CodingMonkey, comcloudway, cometship, CommanderRedYT, commonism, con-f-use, ConfusedOnCOFFEE, consteval, consus, copyrights, coralpink, correctmost, CPU_Blanc, crapStone, cregox, Crizomb, crookm, CrowIsTaken, Crown0815, crueter, cryptolukas, crystal, Cs137, CSDUMMI, cstaky, cswimr, cuboci, cuboid, cweiske, Cwpute, Cyborus, cybra, Cynosphere, Cysioland, d-k-bo, d-s, d2735, D3fau4, D3rJust1n, d96b, dachary, daenney, Daeraxa, Daksh2000, dallyger, DamianT, dani-schroeter, daniel-baumann, danielep, DanielGibson, danielhess219, DanielRuf, danielsy, DaniilBuhteev,
danjones000, danshearer, DansLeRuSH, darakian, darin755, darix, Dark_Arc, darkicewolf50, darkswordreams, Darthagnon, das-g, dasasd122311, Daschi, DasLixou, dataCobra, davbfr, David-Guillot, davidche, davrot, dawe, dawn-solace, daylien, daym, dbarenholz, dbat, dboerlage, dbushell, dcz, dcz_pf, DD-P, ddevault, ddogfoodd, ddriggs, deadkittens, deblan, DebuggerAndrzej, decimal, defanor, dejan, delgh1, delroth, delvh, denn_moe, denschub, denyskon, depeo, detpikachu, dev_T, devnewton, DevYukine, dgomiller, dharsanb, DiamonC, didyouexpectthat, diem, dikey0ficial, diraneyya, Dirk, div72, DKMellow, dleberre, dmowitz, dmytrish, dnsnet-mdrescher, doasu, dobrovolskyi, dobrvlskyi, docudoc, domi41, domske, doomedguppy, dorianim, douglasparker, dovah-kiin, dploeger, dr_bakterius, DraconicNEO, dragast, dragon, Drakon, drawingpixels, DrDaveD, Dreamboat9222, drewcassidy, DrRac27, drweissbrot, ds-cbo, dss, dsseng, dstensnes, duckinator, dumblob, duxsco, dvonessen, dwt, dyniec, eagle_idea, earl-warren, earthjasonlin, EchedelleLR, ecn, edgalligan, Edgarsons, editfund-founder, eduardosm, eest, efertone, EifionLlwyd, eik, ekaitz-zarraga,
EkaterinePapava, ekidney, el0n, eldyj, eli-schwartz, elit-matas, ell1e, Ellpeck, eloy, eludendil, emansije, Ember, emersion, emilylange, Empyrean, eNBeWe, end3r-man, endernon, endz, enricpineda, eo, EOWNERDEAD, equinoxx, Eragon, eramirezinvx, eraviart, Erayd, erikdesmedt, Eriwi, erkinalp, ernest314, ernstki, erral, ERROR404, esainane, esensar, EssGeeEich, etescartz, ethanaobrien, etherportly, EvanCarroll, Eveeifyeve, evie, evrial, ewfg, ewin, ewm, Excrubulent, ExtremelyMAD, ezra, f00, f0sh, f0x, f403, fadedave, famfo, faoquad, faravah, fareycircles, fasterthanlime, fauno, faust, fauxmight, fbausch, FedericoSchonborn, Felitendo, FermeLeLundi, feroli, feroxib, fg_xd, fhuberts, fiesh, FileX, filmroellchen, fina, fio, fiocobbs, firefly-cpp, FirelightFlagboy, Firepup650, Fishwaldo, fistons, Fitik, fito, fjordo, Fjuro, fkiraly, fkooman, Fl1tzi, fl4nn, flactwin, flamenco687, flexstrongo, flightkick, flipreverse, flobeier, floss4good, fluzz, flvffywvffy, flyingfishflash, FML128, fnetX, fnoopv, Fnurkla, fogti, fontenot, forestjohnson, foss-, fossdd, foxy, fpedrei, fr0zi, fr33domlover, fractalf, Frankkkkk, frankm, fraschm98, fraud, freaktechnik,
freelock, Freso, frnmst, Froini, fruzitent, Fs00, fschrempf, fsievers, fsologureng, ftrueck, fuggla, FunctionalHacker, Furai, furkangkhsn, furry, fvezzoli, fvidak01, g-a-c, g2px1, gabriel-samfira, gabrielgio, galambborong, GamePlayer-8, gapodo, Gateway31, gbeine, GDWR, gedankenstuecke, gedw99, geed8563, genofire, george.bartolomey, gerald, GewoonLeon, GGORG, ggpsv, Gh0stD3x, GiannosOB, gitcookie-1, GKuhn, glitchedFops, glts, gmask, gmem, gming, Gnaaarwhal, Gnu1, goddess, gogromat, gondolyr, GooRoo, GottemHams, Granular9241, gratux, Gravy59, GreenImp, greenpete, gregdechene, greghellings, grgberg, grgi, gridhead, grisha, grosmanal, Grub4K, GT, gtsiam, guemax, guillerpsanchez, guillomep, guinevere, Guiorgy, gustavblass, GustavoPaterno, Gusted, gwenya, gwhitney, gwymor, h11736083, h3xx, h759bkyo4, haarhoff, hachem,
hacknorris, hackos, hahahahacker2009, hailey, hails, halibut, halvin, HamburgerJungeJr, HankB, Hanker, hankskyjames777, hannesm, Hansi231, happenpappen, happwrap, harabat, HaraldToepfer, harbourcoleman, hardillb, HarHarLinks, HarryK, hashirama, Haugli92, Haui, hazy, hb0nd, heartshake, helge, helpimnotdrowning, henrysheehy, herzenschein, hexa, HexagonCDN, hexaheximal, Hiers, HigherOrderLogic, Hill-98, HinoByte, hinrikus, Hiraku, HJVT, hloth, hntin, hoijui, hojerst, holtwick, hook, hoovad, hoppinglife, houkime, how, hra42, hrnz, hscells, httpsterio, huagang, hucksy, hughrun, hugoalh, hugorodrigues, hugosxm, huskee, hwpplayer1, i9e1, iago, iamcurse, IamLunchbox, iaxat, ika, ika-roa, ikidd, ikks, ikuyo, ilesjak, Ilyas0Iks, iminfinity, IndieHum, inetshell, inference, Infernus, Infinidoge, infinoid, intelfx, io7m, iQ,
Ironfractal, ironmagma, itinerare, itsdrike, ItsHarper, itsTurnip, iustin, ivanhercaz, izzy, j-dominguez9, j0hnatank, jaahas, Jack252, jackc, JacksonBailey, jacksonchen666, jacobwillden, JadedBlueEyes, jadedctrl, jadeprime, jag, jahanson, jak2k, jakjakob, JakobDev, jalil, james, james2432, JamesBremner, jamie, jan_x7, janAkali, janbc, jank1619, jankatins, janw, jarhodes314, jariasl, jarik, jasonb, javerous, javiertury, jayaddison, jb_wisemo, jbe, jcgl, jcheatum, jdittrich, jean-daricade, jeanbaptisteC, jedik, jednorozec, jeena, jeffersonbledsoe, jelu, Jengro, JeremyStarTM, jerger, jetsung, jexner, jfinkhaeuser, jgarber, jgart, jheiselman, jilen, jinn, jinnatar, jkirk, jklippel, JL710, jlh, jmaasing, jmakov, jmjl, jmshrtn, joebv, joergi, joeroe, jogibear9988, johanneskastl, JohnMoon-VTS, johnnyjayjay, johnthomas00, JohnVeness, JohnWalkerx, Jolly_Good, jomo, joneshf, jonzuka, jorams, jornfranke, jorti, JorTurFer, JoseDouglas26, joxeankoret, jpkhawam, jrtcdbrg, js, JSchlarb, JSylvia007, jthvai, juju4, julianfoad, julianmarcos, JuniorJPDJ, jusko, justbispo, justinsimmons, justknow, Justman10000, jutty, jvdcf, jwakely, jwells, jwijenbergh, jwildeboer, jwolvers, k8ie, kaffeeknecht, KaKi87, kalagane, KalleMP, kallisti5, kampka, karolyi, kassuro, kavash, kaya_emrehan, kayprish, kB01, kbaker,
kbruen, kdh8219, kdtresh, kecrily, kemitix, kenzu, kerbless, kevincox, kevinhikaruevans, KFears, khaeru, kibner, kidsan, Kidswiss, kikocorreoso, kilimnik, killawabbit, Killercat103, kinnison, kipvandenbos, KiraRayne, kirrus, kisg, kita, Kitanit, kkremitzki, Kladky, klausfyhn, klavax, KlavsKlavsen, kmpm, KN4CK3R, kne, koalajoe23, kochklops, Kokomo, KOLANICH, Korbs, kot, kpfleming, kraftner, kramo, kreamond, kriffos, krisavi, krumelmonster, Kryesh, kryptonian, kuhnchris, kumi, kuolemaa, kurets, Kwonunn, kwoot, kytta, l_austenfeld, labellson, Lachstec, laegnur, lagerimsi, lampajr, lanodan, laosb, lapo, laptop, laumann, Laxystem, LDericher, leana8959, leandro-costa, leavelet, LecrisUT, lectia, ledyba, leetickett, leherkom, lenikadali, lennartS_lfb, leomeinel, leorize, lepiku, lever1209, Levitating, lfavole, lgierth, Lgmrszd, lhinderberger, liberodark, lime360, limiting-factor, lingling, Link1J, link2xt, Linneris, linos, linux_mclinuxface, LinuxinaBit, linuxpython, LinuxUserGD, lippoliv, lis, litchipi, litetex, lm41, lmaotrigine, lnxgr, lookshe, lord_of_the_dumpster, Lord-KalEl, LordMZTE, lordwektabyte, lorenzop, LostLuma, lotigara, louis9902,
lslalbai, ltning, luca-pellegrini, lucajunge, lucasmz, lukawaay, lumi200, Lunar8982, LunarLambda, lunny, luxzi, luzifer, Lvceo, lweller, LWFlouisa, lynnesbian, lynoure, lyssieth, Lzebulon, m_eiman_tlab, m00nwtchr, m0s, m13o, maarrk, maartenbeeckmans, mactynow, MaddinM, mafen, magicfelix, MagicLike, mahiso, mahlzahn, Mai-Lapyst, mainboarder, Maks1mS, MalcolmMielle, maletil, malik, malik-n, maltejur, maltfield, MangoIV, Maniues, manolosd, manuelraa, maralorn, marat2509, marcellmars, marcelovicentegc, marcoaraujojunior, MarcoZehe, Mareep-YANG, mareklach, margau, mariell, mark22k, Mark3xtrm, MarkL4YG, markturney, markuzcha, marshmallow, Marti, martianh, martinarisk, martinr92, martinwguy, mary-ext, master_skylark, matheusgomesms, matheusmoreira, mathilde, matiaslavik, matkoniecz, Matlib, matrss, MatseVH,
mattalxndr, matteofranceschini, mattie_sanz, Matze99, maunzCache, maverick2001, maxadamo, maxlath, maya, Mayaleeeeee, MayoDuckPie, maytha8, MB175, mbateman, mborzsony, mcnesium, mcrmonkey, mctaylors, mdaniels5757, mdc_systems, mdione, mdk, mdt, meaz, mee70, megakeegman, mehrad, meisam, melezhik, melonion, melroy89, Menelion, mengzhuo, Merith-TK, MerlijnWajer, meskobalazs, metamuffin, metawave, mewp, meyay, Mez, mf-in-mun, mfenniak, mfil, mfocko, mfxa, MGChecker, mguims, MHLut, mhughes9, mibar, micash, micchickenburger, michael-sparrow, MichaelAgarkov, michaelsasser, MichaelTen, mickenordin, micw, midirhee12, Miguel_PL, mih, Mikaela, mike710shine, mikolaj, milahu, milimarg, mimot, mimsee, minecraftchest1, MinimalMatt, minion, Miraha, mirkoperillo, mirrorwitch, mishra, misyl, mitchplze, mittorn, miversen33, mixed,
mjesusdev, mjsir911, mjtimblin, mkobel, mlncn, mlucas, mmarif, mmeier, mmorais, mnalis, mnq, Moiety, mokapot, mokazemi, mondstern, monstorix, monty24, moonglum, moonshadow, moparisthebest, moralpanic, moritzdietz, Mormegil, Morpheus0x, MorsMortium, mortzu, morvy, mpsijm, MrEvil, mritunjayr, mrkwlsn, mrwsl, MSalah73, msavoritias, msfjarvis, msrd0, mst, mstuehrenberg, Mubelotix, muhaaliss, mumulhl, Musselman, mvdkleijn, mverkleij, mwaddoups, mwerle, mxi223, myers, Mylloon, Mynacol, mysticmode, mzhang, n0toose, n2o, N4ta, Nafalan, naipotato, NameLessGO, nasmevka, natct, natkr, NatoBoram, Naxdy, nazunalika, ncc1988, nclm, neamtim, nebras,
neighborsbear, neilvandyke, nekoedges, neomaitre, neonew, neox-libre, neox*, nercon, nette, networkException, neuhalje, Neureka, neuschaefer, Neustradamus, nevarr0, neveraskedtoexist, NextFire, nezbednik, ng-dm, nhathaway, nick3331, NickP, NickyTheNeko, NiclasPe, nicoco, NicolasCARPi, NicoleS, nicou, Nifou, Nightfirecat, nightfurysl2001, nightm4re, NihaAlGhul, nihilist1, niklaskorz, nikolayKeniston, nilesh, nilsph, Nirei, nis, Nitrousoxide, njmurarka, nlannuzel, nmmr, Nnnes, nnuuvv, nobodyinperson, noiro, noisytoot, noneangel, Nordfriese, NormPlum, nostar, notevil, noth, notpushkin, notyet, noureddin, npgo22, nrb, NRK, ntn888, Nulo, nvy, nykula, nyncral, nyx_lyb3ra, oatbiscuits, ocdtrekkie, OdinVex, oelmekki, oewbgoieqwb, oliphant, oliverpool, oltdaniel, om, omenos, Omichron, onerandomusername, onitake,
openbrian, OrbitalMartian, orkut, ormai, oscarcp, oscarotero, oskardotglobal, ossie, otf31, Outbreak2096, overloop, ozgur, paintgoblin, panekj, panos, pasabanov, paspflue, pastk, pat-s, PatchMixolydic, patdyn, patka, patrickuhlmann, patricus, paulie-aus-punskas, paultag, paulvt, pavel_hushcha, pavi, payas, pboguslawski, Peaksol, pedroberg, pennersr, pensicus, pep., PeterDaveHello, petrcech, petris, peylight, pgmtx, philpep, Pi-Cla, picsel, PierreLannoy, pierreprinetti, pietervdvn, pinjontall94, pinskia, pipcet, Piturnah, pixelcode, PixelHamster, pkpkpkpk, PlayBoxTech, PlexSheep, pluhmen, pluk77, pmb, Pneuma, podhorsky-ksj, pointlessone, polettix, pollux88,
polyfloyd, pomp, popey, Porkepix, Porrumentzio, post-factum, poVoq, prcek, privacy1st, PrivateNoob, programmerjake, ProjectPatatoe, Protestant, proton-ab, psa, psentee, psii, pswsm, puer-robustus, Puls3, purkwiat, PurpleBooth, puzzle-it-nu, pwall2222, pyfisch, pylixonly, q3yi, qaqland, QazCetelic, Qippur, qtea, quentin-bettoum, qui, Quitaxd, quokka, qwerty287, r-pufky, r-w-x, R1ckSanchez_C137, r3pek, rabit, raboof, radon512, rafadc, RagnarGrootKoerkamp, rahrah, raimue, raitobezarius, RaphGL, RaptaG, rarogcmex, raspher, rawkode, rdfm, rdsq, rdvn, rdwz, readevalprintloop, realaravinth, RealEnder, recreationalprogamer, recursive_recursion, redbeard, redwerkz, regalialong, reiver, removewingman, rempas, Renich, renken, ReptoxX, retarded-beast, revi, reynir, rfc2549, rguards, rhbvkleef, richardhuxton, Ricky-Tigg, rikh,
ringofstorms, ripple_prozac, Rirusha, risottobias, RivenSkaye, RMM, rmorettibr, rmoriz, rmsc, roberth, robertk66, robko23, robsonwaves, RockWolf, rodrigo-gonzalez, rohandebsarkar, rohitkumarankam, rohitsharma09, RokeJulianLockhart, rolandd, romainreignier, rome-user, RonaldAJ, rosano, rosenpapazov, rosna2321, roughnecks, Routhinator, rpoovey, rrahl0, rsm92, rtfb, rudolph, rudolphfroger, ruikkaa, runxiyu, ruuda, ruurd, rvba, rwolters, rwv37, ryan-distrust.co, ryanlerch, Ryuno-Ki, s-l-s, s-light, s1m, s3lph, sachaz, sacm150, Sahtor, salif, salim, Salt, saltstack-admin, salzig, samcday, sammefishe, samrland, SamWhited, sandebert, sandro, sandwitch, santalet, sarahjamielewis, saurabh, sawntoe, sbatial, scabala, schelmo, Schoumi, schwarze, sclu1034, scMarkus, scruel, scy, sdht0, SDKAAA, sdolan99, sdomi, SeaswimmerTheFsh, SebasRebazCoding, senekor, Senku, senorsmile, seodisparate, Septem9er, serendipty01, SergeTheEngi, sergeyk, SerikaFrame, sertonix,
Sevichecc, sevki, seyfu-t, sg-phoenix-technologies, ShadowJonathan, ShadowPeo, ShalokShalom, shamann, shanzez, shaowenwan, sheik, shgew, shinebayar-g, shisui, SHuRiKeN, Shuroii, Silejonu, silvasch, silverpill, SilverRainZ, silverwind, simendsjo, simonrolfmore, SIMULATAN, sininenkissa, sinsky, SinTan1729, sirhectorin, skedastically, Skivling, skobkin, Skylark13, Skyper, SLASHLogin, Slate3919, slatian, slingamn, SludgePhD, smartclip_tim, smichel17, smlxdesign, SmolLemon, smxi, sneakers-the-rat, snematoda, snooper3491, SnowCode, Snoweuph, soas, soc, sokai, solemden, solomonv, solonovamax, SomeTr, sosasees, soundstrip, sp6e, SpareJoe, SpencerFabricant, spiffyk, Spinning9247, spla, spooky-overwrite, Squel, SR-G, stanek, stavros-k, stb, stdedos, SteffoSpieler, steko, stelo, stephanm, stevenroose, sthagen, sthenault, stku, stooj, stop5, stratself, strega-nil, strk, strobeltobias, struffel, strypey, stsp, suikan4github, sujiba, sumisukyo, Sunner, sunwoo1524, superjamie, svenseeberg, svoop, swaggboi, Sylphrena, Synchro, syncstack, szethh, t4skforce, tacaly, tace16, tag, taifoss, tallship, talu, tampler, tardich, tarneaux, tclaus, tcpipuk, tdiekel, tebriel,
TechnologyClassroom, techokami, Techwizz, tecosaur, ted423, tek256, tengkuizdihar, teo, tepozoa, testserver22, teutat3s, tgy, Thalian, ThatAF, thatonecalculator, thatonecoder, the-real-herowl, TheAwiteb, thebigbone, thecoolcats, thedustinmiller, TheEvilSkeleton, thefinn93, thefox, thekerker, thekeura, themandalorian, theoryshaw, thepaperpilot, therealpim, Thesola10, ThetaDev, thetredev, theycallhermax, thezzisu, thibaulltt, Thibaultmol, thilinajayanath, thisismissem, thodorisl, thomas-maurice, ThomasBoom89, thomasjwebb, thor, thosea, thubrecht, Thyxus, tianon, tilegg, tilera, till, tim-richter, timdeluxe, timedin, timka, timmwille, timotheyca, tiran133,
tkbremnes, tmb, toasterbirb, tobiasBora, TobiasUdtke, TobiX, tobru, tofkamp, Tom3201, tomkarho, tonymet, toolforger, toothrot, toras9000, tpoisseau, tragivictoria, transitory, tranzystorekk, trymeout, tschortsch, tseeker, tuaris, tumult2004, tunmiam, tusooa, tuxcoder, tuxmaster, tuxracer, twann, twenty-panda, ty802, tyman, TymekV, uda, ujr, uku, umglurf, uncomfyhalomacro, unikitty, unixery, unlogic, untitaker, update.freak, urda, Use-AIrs, user_naa, VA1DER, vadim, vadiml1024, VadZ, VagabondAzulien, vai, VaiTon, Valenoern, valpackett, valvin, vandenoever, varp0n, VehementHam, ver4a, vetlehh, VewDev, vfosnar, vibce, viceice, VicinityNeurosis, victordargallo, vidya, vikaschoudhary, vintprox, VioletLul, virtulis, Visne, vladh, vlw, voidcontext, volkan, volkmnv, voltagex, vorlif, vpeltnt, vpotyarkin, vroyer,
vsz, vtmocanu, VVD, vwbusguy, w8emv, wackbyte, waldyrious, wallabra, walpo, wang3076, wangito33, wangyan, waseigo, watertime, webbj, webfly2, Weebull, werdahias, Werenter, Werzi2001, wetneb, wezm, wh0ami, whitecold, WhyNotHugo, whytf, wickedsmoke, Wild-Turtles, William_Weber_Berrutti, winlogon, wintryexit, wisher, witcher, withlithum, WithLithum, wneessen, wolcen, wolfogre, wolftune, wondercollective, wongandj, woodruffw, woofman420, wookiefriseur, woutput, wrenix, WRMSR, wucke13, Wuzzy, wvffle, X1SystemError0X, XaviCC, xavidcr, xenrox, xerbalind, XeroX, xfix, Xinayder, xinnix, xlii, xlionjuan, xmort, xorander00, XOYZ69, xtex, xtrm, xunzi, xvello, xy, xyhhx, yaash, yann-soubeyrand, yannicka, yannikbloscheck, Yaourt, yarikoptic, yeager, yestax, yeziruo, yoctozepto, yonas, yongbin, yorunin, yp05327, ytimenkov, yuki0iq, yumechi, yumisea, yurtpage, Yushu, yuvi, yverry, zaid1442011, Zalexanninev15, zander, zareck, zbolo-wd, ZDev, zenobit, zerica, zeridon, zhaofengli, ZilloweZ, zimoun, Zip, zl4bv, zloidemon, zokki, zonrek, zontreck, zopsicle, zotan, Zottelchen, ztx, zub, Zughy, zukka77, zwanto, zyachel, zyphlar, ZzenlD&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v13.0 is available</title><link>https://forgejo.org/2025-10-release-v13-0/</link><guid isPermaLink="true">https://forgejo.org/2025-10-release-v13-0/</guid><description>Forgejo v13.0 is available. A new moderation tool is available to report inappropriate user behavior or content that should be looked at by instance administrators. Two factor authentication (TOTP, etc.) can be enforced on the entire instance for all users or instance administrators. Forgejo Actions usability was improved with static checking of workflow files and access to the logs of all run attempts.</description><pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v13.0&lt;/a&gt; was released on 16 October 2025. You will find a short selection of the changes it introduces below and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/21377&quot;&gt;complete list in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://v13.next.forgejo.org/&quot;&gt;dedicated test instance&lt;/a&gt; is available to try it out. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v13.0/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/21377&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;in the chat room&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Content moderation is one of the main roadblocks for federation. A first step is now available to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6977&quot;&gt;users and admins&lt;/a&gt;. It was completed while ActivityPub related pull requests were &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?type=all&amp;amp;state=closed&amp;amp;labels=79349&amp;amp;milestone=21377&quot;&gt;worked on in parallel and merged&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Security was improved under the hood for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8692&quot;&gt;Forgejo Actions secrets&lt;/a&gt; now using a more secure module &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5041&quot;&gt;introduced in 2024&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6074&quot;&gt;already in use for TOTP secrets&lt;/a&gt; since Forgejo v10. In addition it is now possible to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8753&quot;&gt;require 2FA instance wide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Forgejo Actions usability was improved with &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9017&quot;&gt;access to all run attempts&lt;/a&gt; of each workflow: they were stored but not available via the web UI. The workflow files are now &lt;a href=&quot;https://forgejo.org/docs/v13.0/user/actions/troubleshooting/#schema-validation&quot;&gt;statically checked&lt;/a&gt;, for early detection of errors such as the usage of a wrong context in an expression like &lt;code&gt;${{ forgejo.server_url }}&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Reporting abusive content&lt;/h3&gt;
&lt;p&gt;Moderation on public Forgejo instance is a hard and time-consuming task as there are no builtin tools to help with this. Although self-moderation allows users with no elevated privileges to &lt;a href=&quot;https://forgejo.org/docs/v13.0/user/blocking-user/&quot;&gt;block abusive behavior&lt;/a&gt;, it is sometime necessary to get an instance administrator involved.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6977&quot;&gt;It is now possible to report&lt;/a&gt; users, organizations, repositories, issues, pull request or comments that should be looked at by instance administrators. A category and an explanation of why the content is problematic must be attached.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Those reports are then &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7905&quot;&gt;made available in the admin interface&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;When multiple reports are submitted for the same content, they are grouped and the counter from the right side shows how many open reports are linked to that content. Clicking on this counter will open a details page where the full details of all grouped reports can be viewed.&lt;/p&gt;
&lt;h3&gt;Migration from Pagure&lt;/h3&gt;
&lt;p&gt;Repositories from &lt;a href=&quot;https://pagure.io/&quot;&gt;Pagure&lt;/a&gt; can be &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8513&quot;&gt;migrated to Forgejo&lt;/a&gt;. It can be used, for instance, in the context of &lt;a href=&quot;https://fedoramagazine.org/fedora-moves-towards-forgejo-a-unified-decision/&quot;&gt;the transition of Fedora from Pagure to Forgejo&lt;/a&gt; that was decided in December 2024.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Configurable global 2FA enforcement&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/v13.0/admin/config-cheat-sheet/#security-security&quot;&gt;&lt;code&gt;[security].GLOBAL_TWO_FACTOR_REQUIREMENT&lt;/code&gt;&lt;/a&gt; setting was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8753&quot;&gt;added&lt;/a&gt; to require two factor authentication (TOTP, etc.) for either all users or instance administrators.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Avatar image privacy&lt;/h3&gt;
&lt;p&gt;Uploaded avatar images can sometimes contain unexpected metadata such as the location where the image was created, or the device the image was created with, stored in a format called EXIF. Forgejo now &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9638&quot;&gt;removes EXIF data&lt;/a&gt; when custom user and repository images are uploaded in order to reduce the risk of personally identifiable information being leaked unexpectedly.&lt;/p&gt;
&lt;p&gt;A new &lt;a href=&quot;https://forgejo.org/docs/v13.0/admin/command-line/#doctor-avatar-strip-exif&quot;&gt;CLI subcommand&lt;/a&gt; &lt;code&gt;forgejo doctor avatar-strip-exif&lt;/code&gt; can be used to strip EXIF information from all existing avatars; we recommend that administrators run this command once after upgrade in order to minimize this risk for existing stored files.&lt;/p&gt;
&lt;h3&gt;View previous Forgejo Actions attempts&lt;/h3&gt;
&lt;p&gt;It is now &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9017&quot;&gt;possible to view previous logs&lt;/a&gt; for Actions runs that have been retried.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Static check of Actions workflow files&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/docs/v13.0/user/actions/basic-concepts/#basic-syntax&quot;&gt;Forgejo Actions workflows&lt;/a&gt; are statically verified in the web UI for common errors such as using an incorrect context (e.g. &lt;code&gt;${{ badcontext.FORGEJO_REPOSITORY }}&lt;/code&gt;) or a typo in a required keyword (e.g. &lt;code&gt;ruins-on:&lt;/code&gt; instead of &lt;code&gt;runs-on:&lt;/code&gt;). It is reported in the action page and the web page that displays the file in the repository.&lt;/p&gt;
&lt;p&gt;This is in addition to similar tooling provided by &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v9.0.0&quot;&gt;the Forgejo runner itself&lt;/a&gt; and helps detect errors as soon as possible.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Show CI status on force push&lt;/h3&gt;
&lt;p&gt;When force-pushing to a pull request, a line is added to the conversation view to compare the two. However, the CI status of commits in such line was hidden behind an additional click. It is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8655&quot;&gt;now displayed next to the SHA of each commit&lt;/a&gt;, similar to commits from normal pushes.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Markdown editor bold &amp;amp; italic keyboard shortcuts&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9110&quot;&gt;Keyboard shortcuts were implemented&lt;/a&gt; in the markdown editor for formatting features &lt;strong&gt;Bold&lt;/strong&gt; and &lt;strong&gt;Italic&lt;/strong&gt; so that they can be used more quickly. Behavior of using shortcuts is the same as clicking the buttons.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Timestamps on release attachments&lt;/h3&gt;
&lt;p&gt;The time when a release attachment was uploaded is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8757&quot;&gt;now shown among other information about it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Tags are shown in commit lists&lt;/h3&gt;
&lt;p&gt;When viewing repository&apos;s commits, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8759&quot;&gt;tags are now shown next to the commits&lt;/a&gt; they are associated with.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Logger mode settings &lt;code&gt;LOGGER_&amp;lt;NAME&amp;gt;_MODE&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/v13.0/admin/config-cheat-sheet/#log-log&quot;&gt;logger settings&lt;/a&gt; were &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8667&quot;&gt;renamed&lt;/a&gt; from &lt;code&gt;logger.&amp;lt;name&amp;gt;.MODE&lt;/code&gt; to &lt;code&gt;LOGGER_&amp;lt;NAME&amp;gt;_MODE&lt;/code&gt; to help setting them with environment variables when using a container image. For instance:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run --rm -e FORGEJO__log__LOGGER_ACCESS_MODE=file ... codeberg.org/forgejo/forgejo:13
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configuration files using &lt;code&gt;logger.&amp;lt;name&amp;gt;.MODE&lt;/code&gt; are still supported but they are no longer documented. This change is specially useful when the name of the setting goes through various transformations that convert lowercase to uppercase, such as the &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm&quot;&gt;Forgejo helm chart&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Release schedule and Long Term Support&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;/docs/v13.0/admin/release-schedule/&quot;&gt;time based release schedule&lt;/a&gt; was established to publish a release every three months. Patch releases will be published more frequently, depending on the severity of the bug or security fixes they contain.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;11.0 (LTS)&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2026&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.0&lt;/td&gt;
&lt;td&gt;16 October 2025&lt;/td&gt;
&lt;td&gt;15 January 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14.0&lt;/td&gt;
&lt;td&gt;15 January 2026&lt;/td&gt;
&lt;td&gt;16 April 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;13.0-test daily releases&lt;/h3&gt;
&lt;p&gt;Releases are built daily from the latest changes found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v13.0/forgejo&quot;&gt;v13.0/forgejo&lt;/a&gt; development branch. They are deployed to the &lt;a href=&quot;https://v13.next.forgejo.org&quot;&gt;https://v13.next.forgejo.org&lt;/a&gt; instance for manual verification in case a bug fix is of particular interest ahead of the next patch release. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/13.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/13.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v13.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their names are staying the same but they are replaced by new builds every day.&lt;/p&gt;
&lt;h2&gt;Get Forgejo v13.0&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&quot;/download/&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/21377&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/21377&quot;&gt;breaking bug fixes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v13.0.0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/13.0.0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/13.0&quot;&gt;&lt;code&gt;13.0&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;13.0.Y&lt;/code&gt; patch release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v13.0/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
&lt;h3&gt;Donate&lt;/h3&gt;
&lt;p&gt;Forgejo is proud to be &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/&quot;&gt;funded transparently&lt;/a&gt;. Additionally, it accept donations &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;through Liberapay&lt;/a&gt;. It is also possible to &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donate to Codeberg e.V.&lt;/a&gt; in case the Liberapay option does not work out for you, and part of the funding is used to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/#forgejo-resources-per-year&quot;&gt;compensate for work on Forgejo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, the Liberapay team allows for money to go directly to developers without a round-trip to Codeberg. Additionally, Liberapay allows for a steady and reliable funding stream next to other options, a crucial aspect for the project. The distribution of funds through Liberapay is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;transparently controlled using the decision-making process&lt;/a&gt;, and Forgejo contributors are encouraged to consider applying to benefit from this funding opportunity.&lt;/p&gt;
&lt;p&gt;Thank you for using Forgejo and considering a donation, in case your financial situation allows you to.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - September 2025</title><link>https://forgejo.org/2025-09-monthly-report/</link><guid isPermaLink="true">https://forgejo.org/2025-09-monthly-report/</guid><description>The Forgejo v13.0 branch has been cut and the release is scheduled for October 16. Please consider testing it out and sharing your feedback to help us improve it. Forgejo Runner v11 has been released and is now licensed under GPLv3+. Improvements were made to the documentation regarding the Runner setup. Work on improving and securing database interaction has begun. There is an ongoing strong enthusiasm for translating Forgejo.</description><pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo v13.0.0 release candidates&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/21377&quot;&gt;Forgejo v13.0.0&lt;/a&gt; branch has been cut and the release is scheduled for October 16.
&lt;a href=&quot;https://code.forgejo.org&quot;&gt;code.forgejo.org&lt;/a&gt; is running it ahead of time, to discover and fix problems ahead of time.
Additionally, a call for help with tests was posted to the chat room for the first time.
Preparations for the &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/651&quot;&gt;associated blog post have also started&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can help us improve it by trying it out and checking that the features you normally use, as well as the new ones, work as expected.&lt;/p&gt;
&lt;p&gt;It can be tried on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://v13.next.forgejo.org/&quot;&gt;https://v13.next.forgejo.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;your staging environment&lt;/li&gt;
&lt;li&gt;your live instance, if you are willing to deal with potential bugs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before deployment, please read the release notes, address any breaking changes that could affect your deployment and ensure that everything is backed up.&lt;/p&gt;
&lt;p&gt;Pre-release versions are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;as &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v13.0-test&quot;&gt;binaries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;as &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/versions?q=13&quot;&gt;OCI images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Report any regressions you find &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;in the issue tracker&lt;/a&gt;.
If the issues you&apos;re facing are related to security, please report them to the &lt;a href=&quot;https://forgejo.org/.well-known/security.txt&quot;&gt;security team&lt;/a&gt; according to the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/SECURITY-POLICY.md&quot;&gt;security policy&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Forgejo runner v11&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v11.0.0&quot;&gt;Forgejo runner v11&lt;/a&gt; has been released.
This is the first release since the discussion &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/773&quot;&gt;about changing the license of the runner to GPLv3+&lt;/a&gt; was concluded.
This means that, since version v11, Forgejo runner is licensed under GPLv3+, &lt;a href=&quot;https://forgejo.org/2024-08-gpl/&quot;&gt;just like Forgejo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Forgejo runner release process is lighter than the Forgejo release process.
For example, there are no release candidates that are tested in production before the release becomes available to everyone.
Consequently, regressions are discovered after the release is published, impacting users who upgrade first.
This has happened twice (with versions &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v10.0.0&quot;&gt;v10.0.0&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v11.1.0&quot;&gt;v11.1.0&lt;/a&gt;).
Fortunately, the regression was discovered on the same day that a new release was published, so the damage was minimal.&lt;/p&gt;
&lt;p&gt;Both of these regressions were caused by human error combined with insufficient code coverage.
The pull requests that introduced the regressions were properly tested and reviewed properly.
However, the author and reviewer overlooked the problem, which occurred in a code path that lacked coverage.
The odds of that combination happening again will be lower in the future as code coverage constantly improves.&lt;/p&gt;
&lt;h2&gt;Call for help&lt;/h2&gt;
&lt;h3&gt;Forgejo runner&lt;/h3&gt;
&lt;p&gt;The exceptional effort to fix, reproduce and triage all Forgejo Action bugs &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues?q=&amp;amp;type=all&amp;amp;state=open&amp;amp;labels=19&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;in the runner&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues?q=&amp;amp;type=all&amp;amp;sort=&amp;amp;labels=96148%2c201023&amp;amp;state=open&amp;amp;milestone=0&amp;amp;project=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;Forgejo itself&lt;/a&gt; has been successfully concluded.
Currently, there are around twenty open bugs in total, all of which have received attention in the past few weeks.&lt;/p&gt;
&lt;p&gt;To keep these numbers low and ensure that bugs do not linger longer than necessary, more contributors are needed.
If you would like to help, watch &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues&quot;&gt;the Forgejo runner repository&lt;/a&gt; and grab a bug as soon as it appears.
The person who filed the bug may need help providing enough information to reproduce the problem.
Once it is confirmed and reproducible, you can start working on a fix right away.&lt;/p&gt;
&lt;h2&gt;Discussions&lt;/h2&gt;
&lt;h3&gt;Designing a security feature&lt;/h3&gt;
&lt;p&gt;Although Forgejo is organized and encourages features to be &lt;a href=&quot;https://codeberg.org/forgejo/design&quot;&gt;designed&lt;/a&gt; and supported by &lt;a href=&quot;https://codeberg.org/forgejo/user-research&quot;&gt;user research&lt;/a&gt;, the process is time consuming.
The most frequent method of moving from an idea to implementation is filing a feature request in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;issue tracker&lt;/a&gt;, which is then supported by a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls&quot;&gt;pull request&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Allowing Forgejo Actions workflows to run from pull requests that originate from a fork is a long-standing problem, so a &lt;a href=&quot;https://codeberg.org/forgejo/design/issues/52&quot;&gt;design discussion&lt;/a&gt; was created to consider all aspects of the problem, including threat modeling, collecting &lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues?state=open&amp;amp;type=all&amp;amp;labels=&amp;amp;milestone=0&amp;amp;project=0&amp;amp;assignee=0&amp;amp;poster=0&amp;amp;sort=&amp;amp;q=%22Forgejo+Actions+workflows+allowed+to+run+from+pull+requests+%22&quot;&gt;evidence of how users currently cope with the problem&lt;/a&gt;, and user interface and user experience.&lt;/p&gt;
&lt;p&gt;The scope is limited, but as can be seen by browsing the discussions, it has undergone a few iterations.
While time-consuming, this process is ultimately faster than implementing a solution that would require refactoring shortly after release.
The reality is that, once a solution is implemented, however clunky it may be, it tends to stay because refactoring is a lot of work, and explaining it to users is difficult.
Fixing a problem is easy.
Improving an imperfect solution is trickier.&lt;/p&gt;
&lt;h2&gt;Documentation&lt;/h2&gt;
&lt;h3&gt;Forgejo runner&lt;/h3&gt;
&lt;p&gt;Many users have trouble using docker commands, such as &lt;code&gt;docker build&lt;/code&gt;, with self-hosted Forgejo runners.
The default setup blocks access to Docker.
A new guide is available to help administrators set this up safely: &lt;a href=&quot;https://forgejo.org/docs/latest/admin/actions/docker-access/&quot;&gt;Utilizing Docker within Actions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://forgejo.org/2025-08-monthly-report/#forgejo-runner-v10&quot;&gt;the monthly report for August&lt;/a&gt;, the security warning about the Forgejo runner was removed.
However, Forgejo runner still poses a risk because it lets people run code remotely, even when the software is secure.
For this reason, another guide was written: &lt;a href=&quot;https://forgejo.org/docs/latest/admin/actions/security/&quot;&gt;Securing Forgejo Actions Deployments&lt;/a&gt;.
This guide helps administrators to build a secure deployment that is appropriate for their needs.&lt;/p&gt;
&lt;p&gt;Feedback on these guides is welcome on the &lt;a href=&quot;https://codeberg.org/forgejo/docs&quot;&gt;forgejo/docs&lt;/a&gt; repo.&lt;/p&gt;
&lt;h2&gt;Notable Pull Requests&lt;/h2&gt;
&lt;p&gt;For a number of historical reasons, the Forgejo database currently operates without any foreign key constraints.
The project uses alternative compensation mechanisms, such as an extensive and growing test automation suite and a doctor tool that checks and aligns database records for consistency, to ensure data quality.
However, the absence of foreign key support is a technical debt to be overcome.&lt;/p&gt;
&lt;p&gt;In September, an effort began to enhance the &lt;a href=&quot;https://xorm.io/&quot;&gt;xorm object-relational mapper library&lt;/a&gt; in a &lt;a href=&quot;https://code.forgejo.org/xorm/xorm&quot;&gt;soft-fork project&lt;/a&gt; to support foreign key management across all Forgejo-supported database engines.
After adding seven new features for foreign key management to xorm, Forgejo switched to the new version of xorm, which unblocked development of the first foreign key addition.&lt;/p&gt;
&lt;p&gt;Forgejo has an estimated 239 relational links between database tables.
The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9373&quot;&gt;first foreign key addition&lt;/a&gt; will add four foreign keys, covering about 1.7% overall.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Progress on the federation in Forgejo has been ongoing but under the radar this month.
The active team around the federation has met twice to prepare and &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/commit/0c9495e2afdca59a911dd8f785a9571b696c282a/2025-10-01-sta-federation/considerations.md&quot;&gt;submit a funding application for federated issues&lt;/a&gt;, among other things.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;There was an &lt;a href=&quot;https://codeberg.org/0ko/forgejo-snippets/src/branch/main/i18n-weblate/statistics.md&quot;&gt;influx of new contributors&lt;/a&gt;, higher than usual.&lt;/p&gt;
&lt;p&gt;However, even with the &lt;a href=&quot;https://forgejo.org/2025-06-monthly-report/#localization&quot;&gt;simplified renewal process for maintainers&lt;/a&gt;, this increase in contributors isn&apos;t reflected in the number of applications for maintainers.
Currently, this does not cause an issue, but it may in the future.
If you are an active translator, please consider applying to be a &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#localization&quot;&gt;maintainer&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;h3&gt;Mail server&lt;/h3&gt;
&lt;p&gt;Codeberg recently setup an SMTP server for its own use and offered it to the Forgejo infrastructure.
It is still in the experimental stage and is currently configured for the &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/c8d2a0e7a78b0fde947810f009067633b959cc19&quot;&gt;v11.next.forgejo.org and v12.next.forgejo.org instances only&lt;/a&gt;.
A &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/src/commit/359a1b6362d8d663252a14c03175ccf411d1fb88/flux/apps/mail&quot;&gt;webmail has been setup&lt;/a&gt; to assist with associated maintenance tasks.&lt;/p&gt;
&lt;h3&gt;k8s changes testing&lt;/h3&gt;
&lt;p&gt;Having infrastructure as code brings challenges relating to testing the actual impact of a change.
As there are many layers involved, it is not always immediately clear how a single line will affect the YAML files that will be generated and interpreted by the cluster.
This can have damaging effects when a bug is introduced.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/c3f09d95838e846b59c363fe5748b45c09281149&quot;&gt;Snapshots have been added&lt;/a&gt; to the repository and can be &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/c9f4c98c542311f1b41fbb2eeca36e0e327f44d2&quot;&gt;conveniently updated and compared&lt;/a&gt;.
Previously, doing so required running non-trivial command lines.&lt;/p&gt;
&lt;h3&gt;CI hardware crashed&lt;/h3&gt;
&lt;p&gt;On 15 and 23 September, the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/9406&quot;&gt;hardware dedicated to the runners crashed&lt;/a&gt; because the &lt;a href=&quot;https://en.wikipedia.org/wiki/Out_of_memory#Recovery&quot;&gt;OOM Killer&lt;/a&gt; reacted to excessive memory consumption.
In both cases the &lt;a href=&quot;https://www.openldap.org/&quot;&gt;LDAP server&lt;/a&gt; that was spawned to test the LDAP Forgejo features was identified as being responsible.
However, as it has not changed in years, the reason for this is unclear.
This may be related to recent changes in the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases&quot;&gt;Forgejo runner&lt;/a&gt;, some of which relate to gracefully shutting down services gracefully.&lt;/p&gt;
&lt;p&gt;The six-year-old image running an outdated Debian Stretch and an outdated LDAP server has been upgraded.
The image is now &lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-test-openldap&quot;&gt;built from a dedicated repository&lt;/a&gt;, derived from a &lt;a href=&quot;https://github.com/rroemhild/docker-test-openldap&quot;&gt;maintained base image&lt;/a&gt;, which minimises the maintenance overhead.
The old image &lt;a href=&quot;https://code.forgejo.org/forgejo/oci-mirror/pulls/36&quot;&gt;will be deprecated&lt;/a&gt;.
The tests had to be &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9417/files&quot;&gt;slightly adapted&lt;/a&gt; to match.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;Matrix security disclosure&lt;/h3&gt;
&lt;p&gt;On 16 July 2025, &lt;a href=&quot;https://matrix.org/blog/2025/07/security-predisclosure/&quot;&gt;Matrix announced in a predisclosure&lt;/a&gt; that a security vulnerability had been found in the current room versions and that it had been fixed.
For us, this means that all rooms on Matrix must be updated.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/372#issuecomment-6953408&quot;&gt;Five rooms have been updated so far&lt;/a&gt;, and this work is ongoing.
We are monitoring the adoption of the security fix and plan to complete the remaining updates soon.
An announcement will be made in every room before it is updated.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.&lt;/p&gt;
&lt;p&gt;The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0xllx0&quot;&gt;https://codeberg.org/0xllx0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/11xx&quot;&gt;https://codeberg.org/11xx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/2franix&quot;&gt;https://codeberg.org/2franix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/abyxcos&quot;&gt;https://codeberg.org/abyxcos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/acidbong&quot;&gt;https://codeberg.org/acidbong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Adolar0042&quot;&gt;https://codeberg.org/Adolar0042&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alexAubin&quot;&gt;https://codeberg.org/alexAubin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alexrp&quot;&gt;https://codeberg.org/alexrp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amessina&quot;&gt;https://codeberg.org/amessina&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andrewrk&quot;&gt;https://codeberg.org/andrewrk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anorprogrammer&quot;&gt;https://codeberg.org/anorprogrammer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AnsisMalins&quot;&gt;https://codeberg.org/AnsisMalins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anthony-unicare&quot;&gt;https://codeberg.org/anthony-unicare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/apoorv569&quot;&gt;https://codeberg.org/apoorv569&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aviallon&quot;&gt;https://codeberg.org/aviallon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bacon&quot;&gt;https://codeberg.org/bacon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Baturax&quot;&gt;https://codeberg.org/Baturax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bespinas&quot;&gt;https://codeberg.org/bespinas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bojidar-bg&quot;&gt;https://codeberg.org/bojidar-bg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brook&quot;&gt;https://codeberg.org/brook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BtbN&quot;&gt;https://codeberg.org/BtbN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/butterflyoffire&quot;&gt;https://codeberg.org/butterflyoffire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cartola&quot;&gt;https://codeberg.org/cartola&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cblgh&quot;&gt;https://codeberg.org/cblgh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/charles25565&quot;&gt;https://codeberg.org/charles25565&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cherwey&quot;&gt;https://codeberg.org/cherwey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chrysn&quot;&gt;https://codeberg.org/chrysn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Chucky2401&quot;&gt;https://codeberg.org/Chucky2401&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/consus&quot;&gt;https://codeberg.org/consus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crueter&quot;&gt;https://codeberg.org/crueter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/D3fau4&quot;&gt;https://codeberg.org/D3fau4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dani-schroeter&quot;&gt;https://codeberg.org/dani-schroeter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danielsy&quot;&gt;https://codeberg.org/danielsy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darin755&quot;&gt;https://codeberg.org/darin755&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dark_Arc&quot;&gt;https://codeberg.org/Dark_Arc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darkicewolf50&quot;&gt;https://codeberg.org/darkicewolf50&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darkswordreams&quot;&gt;https://codeberg.org/darkswordreams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DasLixou&quot;&gt;https://codeberg.org/DasLixou&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dawe&quot;&gt;https://codeberg.org/dawe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/deadkittens&quot;&gt;https://codeberg.org/deadkittens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dgomiller&quot;&gt;https://codeberg.org/dgomiller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmytrish&quot;&gt;https://codeberg.org/dmytrish&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dnsnet-mdrescher&quot;&gt;https://codeberg.org/dnsnet-mdrescher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/domi41&quot;&gt;https://codeberg.org/domi41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dovah-kiin&quot;&gt;https://codeberg.org/dovah-kiin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Drakon&quot;&gt;https://codeberg.org/Drakon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DrDaveD&quot;&gt;https://codeberg.org/DrDaveD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/drewcassidy&quot;&gt;https://codeberg.org/drewcassidy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/duckinator&quot;&gt;https://codeberg.org/duckinator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dyniec&quot;&gt;https://codeberg.org/dyniec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eli-schwartz&quot;&gt;https://codeberg.org/eli-schwartz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/equinoxx&quot;&gt;https://codeberg.org/equinoxx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/erkinalp&quot;&gt;https://codeberg.org/erkinalp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EssGeeEich&quot;&gt;https://codeberg.org/EssGeeEich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/etherportly&quot;&gt;https://codeberg.org/etherportly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EvanCarroll&quot;&gt;https://codeberg.org/EvanCarroll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Excrubulent&quot;&gt;https://codeberg.org/Excrubulent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/faust&quot;&gt;https://codeberg.org/faust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fbausch&quot;&gt;https://codeberg.org/fbausch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fiesh&quot;&gt;https://codeberg.org/fiesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fpedrei&quot;&gt;https://codeberg.org/fpedrei&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Freso&quot;&gt;https://codeberg.org/Freso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fs00&quot;&gt;https://codeberg.org/Fs00&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fuggla&quot;&gt;https://codeberg.org/fuggla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gbeine&quot;&gt;https://codeberg.org/gbeine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gogromat&quot;&gt;https://codeberg.org/gogromat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Granular9241&quot;&gt;https://codeberg.org/Granular9241&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/guemax&quot;&gt;https://codeberg.org/guemax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hailey&quot;&gt;https://codeberg.org/hailey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/halvin&quot;&gt;https://codeberg.org/halvin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HarHarLinks&quot;&gt;https://codeberg.org/HarHarLinks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Haugli92&quot;&gt;https://codeberg.org/Haugli92&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/helge&quot;&gt;https://codeberg.org/helge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hill-98&quot;&gt;https://codeberg.org/Hill-98&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hloth&quot;&gt;https://codeberg.org/hloth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hugosxm&quot;&gt;https://codeberg.org/hugosxm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ikks&quot;&gt;https://codeberg.org/ikks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/infinoid&quot;&gt;https://codeberg.org/infinoid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iQ&quot;&gt;https://codeberg.org/iQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/j0hnatank&quot;&gt;https://codeberg.org/j0hnatank&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jackc&quot;&gt;https://codeberg.org/jackc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JadedBlueEyes&quot;&gt;https://codeberg.org/JadedBlueEyes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadeprime&quot;&gt;https://codeberg.org/jadeprime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jankatins&quot;&gt;https://codeberg.org/jankatins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jbe&quot;&gt;https://codeberg.org/jbe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jeena&quot;&gt;https://codeberg.org/jeena&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jelu&quot;&gt;https://codeberg.org/jelu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/joebv&quot;&gt;https://codeberg.org/joebv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/joergi&quot;&gt;https://codeberg.org/joergi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jornfranke&quot;&gt;https://codeberg.org/jornfranke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jthvai&quot;&gt;https://codeberg.org/jthvai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jvdcf&quot;&gt;https://codeberg.org/jvdcf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kbaker&quot;&gt;https://codeberg.org/kbaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kdh8219&quot;&gt;https://codeberg.org/kdh8219&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kevinhikaruevans&quot;&gt;https://codeberg.org/kevinhikaruevans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Killercat103&quot;&gt;https://codeberg.org/Killercat103&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kkremitzki&quot;&gt;https://codeberg.org/kkremitzki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/koalajoe23&quot;&gt;https://codeberg.org/koalajoe23&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/labellson&quot;&gt;https://codeberg.org/labellson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lagerimsi&quot;&gt;https://codeberg.org/lagerimsi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lepiku&quot;&gt;https://codeberg.org/lepiku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Levitating&quot;&gt;https://codeberg.org/Levitating&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lfavole&quot;&gt;https://codeberg.org/lfavole&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Link1J&quot;&gt;https://codeberg.org/Link1J&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/linux_mclinuxface&quot;&gt;https://codeberg.org/linux_mclinuxface&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lis&quot;&gt;https://codeberg.org/lis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lm41&quot;&gt;https://codeberg.org/lm41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lnxgr&quot;&gt;https://codeberg.org/lnxgr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LordMZTE&quot;&gt;https://codeberg.org/LordMZTE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LWFlouisa&quot;&gt;https://codeberg.org/LWFlouisa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/m00nwtchr&quot;&gt;https://codeberg.org/m00nwtchr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/m13o&quot;&gt;https://codeberg.org/m13o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mactynow&quot;&gt;https://codeberg.org/mactynow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maks1mS&quot;&gt;https://codeberg.org/Maks1mS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MangoIV&quot;&gt;https://codeberg.org/MangoIV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matheusgomesms&quot;&gt;https://codeberg.org/matheusgomesms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mdc_systems&quot;&gt;https://codeberg.org/mdc_systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MerlijnWajer&quot;&gt;https://codeberg.org/MerlijnWajer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/metawave&quot;&gt;https://codeberg.org/metawave&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfil&quot;&gt;https://codeberg.org/mfil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micchickenburger&quot;&gt;https://codeberg.org/micchickenburger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micw&quot;&gt;https://codeberg.org/micw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/milimarg&quot;&gt;https://codeberg.org/milimarg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirrorwitch&quot;&gt;https://codeberg.org/mirrorwitch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mitchplze&quot;&gt;https://codeberg.org/mitchplze&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mittorn&quot;&gt;https://codeberg.org/mittorn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mjsir911&quot;&gt;https://codeberg.org/mjsir911&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moonshadow&quot;&gt;https://codeberg.org/moonshadow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moritzdietz&quot;&gt;https://codeberg.org/moritzdietz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mrkwlsn&quot;&gt;https://codeberg.org/mrkwlsn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msfjarvis&quot;&gt;https://codeberg.org/msfjarvis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/myers&quot;&gt;https://codeberg.org/myers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mynacol&quot;&gt;https://codeberg.org/Mynacol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mysticmode&quot;&gt;https://codeberg.org/mysticmode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/N4ta&quot;&gt;https://codeberg.org/N4ta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ncc1988&quot;&gt;https://codeberg.org/ncc1988&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neamtim&quot;&gt;https://codeberg.org/neamtim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nebras&quot;&gt;https://codeberg.org/nebras&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nightfirecat&quot;&gt;https://codeberg.org/Nightfirecat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NihaAlGhul&quot;&gt;https://codeberg.org/NihaAlGhul&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nnnes&quot;&gt;https://codeberg.org/Nnnes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nostar&quot;&gt;https://codeberg.org/nostar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nykula&quot;&gt;https://codeberg.org/nykula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patka&quot;&gt;https://codeberg.org/patka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patricus&quot;&gt;https://codeberg.org/patricus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paultag&quot;&gt;https://codeberg.org/paultag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/picsel&quot;&gt;https://codeberg.org/picsel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pluk77&quot;&gt;https://codeberg.org/pluk77&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/post-factum&quot;&gt;https://codeberg.org/post-factum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/proton-ab&quot;&gt;https://codeberg.org/proton-ab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/qtea&quot;&gt;https://codeberg.org/qtea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/quentin-bettoum&quot;&gt;https://codeberg.org/quentin-bettoum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/raboof&quot;&gt;https://codeberg.org/raboof&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/raitobezarius&quot;&gt;https://codeberg.org/raitobezarius&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/recreationalprogamer&quot;&gt;https://codeberg.org/recreationalprogamer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RockWolf&quot;&gt;https://codeberg.org/RockWolf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rohitkumarankam&quot;&gt;https://codeberg.org/rohitkumarankam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rolandd&quot;&gt;https://codeberg.org/rolandd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rsm92&quot;&gt;https://codeberg.org/rsm92&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rwv37&quot;&gt;https://codeberg.org/rwv37&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryanlerch&quot;&gt;https://codeberg.org/ryanlerch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/santalet&quot;&gt;https://codeberg.org/santalet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sdht0&quot;&gt;https://codeberg.org/sdht0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shamann&quot;&gt;https://codeberg.org/shamann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/silvasch&quot;&gt;https://codeberg.org/silvasch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/silverpill&quot;&gt;https://codeberg.org/silverpill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skylark13&quot;&gt;https://codeberg.org/Skylark13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skyper&quot;&gt;https://codeberg.org/Skyper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smartclip_tim&quot;&gt;https://codeberg.org/smartclip_tim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smichel17&quot;&gt;https://codeberg.org/smichel17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smlxdesign&quot;&gt;https://codeberg.org/smlxdesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sneakers-the-rat&quot;&gt;https://codeberg.org/sneakers-the-rat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sp6e&quot;&gt;https://codeberg.org/sp6e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SpencerFabricant&quot;&gt;https://codeberg.org/SpencerFabricant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stanek&quot;&gt;https://codeberg.org/stanek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tcpipuk&quot;&gt;https://codeberg.org/tcpipuk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tdiekel&quot;&gt;https://codeberg.org/tdiekel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/teo&quot;&gt;https://codeberg.org/teo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tepozoa&quot;&gt;https://codeberg.org/tepozoa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thecoolcats&quot;&gt;https://codeberg.org/thecoolcats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thezzisu&quot;&gt;https://codeberg.org/thezzisu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tianon&quot;&gt;https://codeberg.org/tianon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tilera&quot;&gt;https://codeberg.org/tilera&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tonymet&quot;&gt;https://codeberg.org/tonymet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toras9000&quot;&gt;https://codeberg.org/toras9000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TymekV&quot;&gt;https://codeberg.org/TymekV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/untitaker&quot;&gt;https://codeberg.org/untitaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/user_naa&quot;&gt;https://codeberg.org/user_naa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vtmocanu&quot;&gt;https://codeberg.org/vtmocanu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/woj-tek&quot;&gt;https://codeberg.org/woj-tek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wucke13&quot;&gt;https://codeberg.org/wucke13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/X1SystemError0X&quot;&gt;https://codeberg.org/X1SystemError0X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yannikbloscheck&quot;&gt;https://codeberg.org/yannikbloscheck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yestax&quot;&gt;https://codeberg.org/yestax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zaid1442011&quot;&gt;https://codeberg.org/zaid1442011&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zimoun&quot;&gt;https://codeberg.org/zimoun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zonrek&quot;&gt;https://codeberg.org/zonrek&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo monthly report - August 2025</title><link>https://forgejo.org/2025-08-monthly-report/</link><guid isPermaLink="true">https://forgejo.org/2025-08-monthly-report/</guid><description>A Forgejo security release was published, fixing nine low severity vulnerabilities. The Forgejo contributors agreed on rules for the use of AI and the documentation is nearly complete. The runner is considered secure enough to be used in production.</description><pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo security release&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#security&quot;&gt;security team&lt;/a&gt; has been busy with the fixes that were announced and published in &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues/39&quot;&gt;Forgejo v11.0.4 and v12.0.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When preparing multiple pull request in advance and in secret, the challenge is to make sure that no unexpected conflicts will arise when they are added to the Forgejo repository, shortly before the release is published.
And also to account for the time it takes for the CI to verify a total of 26 pull requests (including backports) knowing each run takes around 30 minutes.
It turned out to be around 12 hours of real time, including delays due to errors.
There were a few issues (two pull requests required manual merges, some trivial conflict resolution were missed) but their resolution was not too time consuming.&lt;/p&gt;
&lt;p&gt;A decision on when and why security releases should be published, has to strike a balance between:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the severity and impact of each vulnerability (e.g. for &lt;a href=&quot;https://forgejo.org/2025-02-release-v10-0-1/#forgejo-actions-web-endpoints-vulnerable-to-manually-crafted-identifiers&quot;&gt;web endpoints vulnerable to manually crafted identifiers&lt;/a&gt; the impact and severity is higher than for &lt;a href=&quot;https://forgejo.org/2024-04-release-v1-21-11-0/#cross-site-scripting-xss-vulnerability&quot;&gt;this cross-site scripting (XSS) vulnerability&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;the frequency of security releases because they can be exhausting for Forgejo admins when there are too many.&lt;/li&gt;
&lt;li&gt;the risk of regressions when backporting the fix because it is done in secret and does not benefit from the wider panel of reviewers as the backport worked on publicly.&lt;/li&gt;
&lt;li&gt;the attention it requires from Forgejo admins when the vulnerability is difficult to understand, even when the release notes are crystal clear.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For these releases, the decision was made to publish an unusually large number of security fixes (nine) in a single release because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the severity of each of them is not too high (e.g. compared to the release fixing &lt;a href=&quot;https://forgejo.org/2025-02-release-v10-0-1/#forgejo-actions-web-endpoints-vulnerable-to-manually-crafted-identifiers&quot;&gt;web endpoints vulnerable to manually crafted identifiers&lt;/a&gt; that was published last year).&lt;/li&gt;
&lt;li&gt;spreading them on two or three security release would be more work for the Forgejo admins.&lt;/li&gt;
&lt;li&gt;only three manual backports out of eighteen are conflicting and the resolution is trivial which reduces the risk of regressions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The release notes were unified and worded so that the fix is explained first (present tense) and the vulnerability is explained last (past tense) in the hope that it makes them quicker to evaluate and understand.&lt;/p&gt;
&lt;h3&gt;Helm chart&lt;/h3&gt;
&lt;p&gt;Helm chart &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v14.0.0&quot;&gt;v14&lt;/a&gt; was released on 22. August.
This release removes the PostgreSQL and Valkey sub charts.
This means that if you are using them, please check the &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm#to-v14&quot;&gt;migration guide&lt;/a&gt; before upgrading.&lt;/p&gt;
&lt;p&gt;As usual, a new &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v14.0.1&quot;&gt;minor version (v14.0.1)&lt;/a&gt; was also published as the corresponding release to the Forgejo v12.0.2 security release.&lt;/p&gt;
&lt;h3&gt;Forgejo runner v10&lt;/h3&gt;
&lt;p&gt;As the &lt;a href=&quot;https://forgejo.org/2025-07-monthly-report/#security-audit&quot;&gt;year long effort to fix security issues&lt;/a&gt; came to an end, the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/774&quot;&gt;warning about the Forgejo runner being insecure was removed&lt;/a&gt;.
Security issues are now expected to be reported &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/SECURITY-POLICY.md&quot;&gt;as per the Forgejo security policy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#security&quot;&gt;Forgejo security team&lt;/a&gt; organized itself with the necessary infrastructure to prepare security fixes under embargo in a private repository.
The first of which was &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues/38&quot;&gt;announced 22 August&lt;/a&gt; and published 1 September.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v10.0.0&quot;&gt;regression in v10.0.0&lt;/a&gt; was discovered minutes after it was published.
Luckily it as an easy fix and &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v10.0.1&quot;&gt;v10.0.1&lt;/a&gt; was published an hour later.
The post-mortem of this unfortunate event is rather simple: despite very thorough reviews and extensive automated testing, bugs happen.&lt;/p&gt;
&lt;h2&gt;Discussions&lt;/h2&gt;
&lt;h3&gt;AI usage in the context of Forgejo&lt;/h3&gt;
&lt;p&gt;As &lt;a href=&quot;https://forgejo.org/2025-07-monthly-report/#ai-usage-in-the-context-of-forgejo&quot;&gt;announced in the previous monthly report&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/366&quot;&gt;a discussion&lt;/a&gt; about how to handle AI contributions began in the Forgejo space at the end of June.
A vote was held on the proposals that emerged, and the documentation of the results is currently in progress.&lt;/p&gt;
&lt;p&gt;Drafts have been created for the &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/325&quot;&gt;governance&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/code-of-conduct/pulls/25&quot;&gt;Code of Conduct&lt;/a&gt; additions.
Only minor details are left to be discussed as part of the documentation and implementation process.&lt;/p&gt;
&lt;h2&gt;Forgejo runner&lt;/h2&gt;
&lt;p&gt;As the runner becomes more stable and usable outside the context of the Forgejo project itself, it needs more contributors and a healthy momentum.
A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/378&quot;&gt;discussion started on how to achieve that&lt;/a&gt; and at the same time a significant effort was made that successfully increased the activity and allowed new contributors to be onboarded.
Maintaining this momentum will be the main challenge of the coming months.&lt;/p&gt;
&lt;p&gt;Although features are not the priority, there was an exception: &lt;a href=&quot;https://forgejo.org/docs/next/user/actions/reference/#onworkflow_call&quot;&gt;reusable workflows&lt;/a&gt;.
They were partially implemented and not supported until &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v9.1.0&quot;&gt;Forgejo runner v9.1.0&lt;/a&gt; released this month.
The main reason for this exception is that, although undocumented and partially working, it was used and bug reports were received.
The difficult choice was between removing support for the partial implementation, thus breaking existing workflows that managed to find a happy path or completing the implementation so it could be supported.&lt;/p&gt;
&lt;h3&gt;Schema validation of actions and workflows&lt;/h3&gt;
&lt;p&gt;As expected, the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#8-0-0&quot;&gt;schema validation introduced in Forgejo runner v8.0.0&lt;/a&gt; caused some legitimate workflow to fail and the schemas had to be fixed.
As of &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v9.1.1&quot;&gt;Forgejo runner 9.1.1&lt;/a&gt;, all known issues were fixed and there has been no report of unexpected validation failures in the past two weeks.&lt;/p&gt;
&lt;p&gt;While investigating a validation error, a bug &lt;a href=&quot;https://github.com/yaml/go-yaml/issues/76&quot;&gt;in the Go YAML package was discovered and reported&lt;/a&gt;.
Until a fix is available, a simple workaround can be applied: remove the leading empty line.
On that occasion it was also discovered that invalid scheduled workflows could block other scheduled workflows and a fix was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8944&quot;&gt;backported to Forgejo v12&lt;/a&gt; released 31 August.&lt;/p&gt;
&lt;h3&gt;Codebase re-organization&lt;/h3&gt;
&lt;p&gt;The activity in &lt;a href=&quot;https://github.com/nektos/act&quot;&gt;Netkos ACT&lt;/a&gt; has been low since the beginning of 2024.
The main contributor &lt;a href=&quot;https://github.com/actions-oss&quot;&gt;also created a fork&lt;/a&gt; but it did not receive much attention in the past six months.
In that context a cooperation with an actively maintained codebase seems unlikely.&lt;/p&gt;
&lt;p&gt;As &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/678&quot;&gt;all commits from Nektos or Gitea&lt;/a&gt; were either ported or cherry-picked in Forgejo, it appeared that it would be easier to maintain a single codebase rather than two separate repositories (&lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;runner&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/act&quot;&gt;ACT&lt;/a&gt;).
The two repositories were merged on &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/753&quot;&gt;28 July&lt;/a&gt; and the former &lt;a href=&quot;https://code.forgejo.org/forgejo/act&quot;&gt;ACT&lt;/a&gt; repository was archived.&lt;/p&gt;
&lt;h3&gt;actions/artifact@v4 support&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/upload-artifact/src/tag/v4&quot;&gt;actions/artifact@v4&lt;/a&gt; is used to add files to a job run.
It relies on an ad-hoc protocol that is different from anything else and was introduced in Forgejo at the beginning of 2024.
It is very useful and frequently used.&lt;/p&gt;
&lt;p&gt;Unfortunately the choice to support it by &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/routers/api/actions/artifactsv4.go&quot;&gt;implementing the protocol&lt;/a&gt; means that Forgejo is forced to chase and reverse engineer the GitHub server implementation for which &lt;a href=&quot;https://github.com/actions/toolkit&quot;&gt;only the client side is available&lt;/a&gt; under a Free Software license.&lt;/p&gt;
&lt;p&gt;Two concrete side effect of that decision are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the need to maintain a fork of the action that disables GitHub specific verification preventing it from running on GitHub Enterprise and therefore any self-hosted forge.&lt;/li&gt;
&lt;li&gt;the need to introduce &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/9023&quot;&gt;breaking changes&lt;/a&gt; with Forgejo v13 to &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/187&quot;&gt;fix some bugs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Licensing&lt;/h3&gt;
&lt;p&gt;A discussion started to &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/773&quot;&gt;change the license of the runner to GPLv3+&lt;/a&gt;.
It is in line with the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/commit/6eb522282f606f65c77b83b662b008aaf444dcfb/AGREEMENTS.md#licensing&quot;&gt;licensing agreement&lt;/a&gt; of the Forgejo project and no concerns were raised.
But, as it is an important decision, it takes a few weeks to be merged and implemented.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The work to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4767&quot;&gt;implement federated user following&lt;/a&gt; continued (see the merged pull requests &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8720&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8792&quot;&gt;2&lt;/a&gt;).
The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8819&quot;&gt;latest pull request&lt;/a&gt; is still in review as preliminary manual testing using Mastodon instead of GtS &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8819#issuecomment-6598447&quot;&gt;discovered a bug&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Collecting test coverage for the implementation of federation requires obtaining data from both the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/&quot;&gt;Forgejo repository&lt;/a&gt; (unit and integration tests) and the &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;end-to-end repository&lt;/a&gt; (where &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/federation/federation.sh&quot;&gt;GtS is run alongside Forgejo&lt;/a&gt; and plays a realistic scenario).
When running out of a pull request end-to-end tests &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/914/files&quot;&gt;now upload coverage data&lt;/a&gt; as artifacts to the CI run.
They can then be downloaded and manually merged out of a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/676fb7e0a74e801cc5e5eedd6af37c16f56aa63f/.forgejo/workflows/coverage.yml&quot;&gt;new workflow run of the tests&lt;/a&gt; that also uploads the result as an artifact.
This would benefit from being automated to be more generally useful but it already allowed for verifying &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8806#issuecomment-6673378&quot;&gt;which parts of the federation codebase deserve more testing&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;Blog post and talk about Federation&lt;/h3&gt;
&lt;p&gt;On 14 August 2025, &lt;a href=&quot;https://domaindrivenarchitecture.org/posts/2025-08-14-upcoming-federated-user-activities/&quot;&gt;a blog post&lt;/a&gt; explained how to experiment with the current implementation of user following.&lt;br /&gt;On 16 August 2025, &lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;Jerger&lt;/a&gt; &lt;a href=&quot;https://programm.froscon.org/froscon2025/talk/71b947bc-46fe-415e-b7e8-50ad3c05d597/&quot;&gt;held a talk&lt;/a&gt; (&lt;strong&gt;in German&lt;/strong&gt;) about federated forgejo at the &lt;a href=&quot;https://froscon.org/&quot;&gt;FrOSCon&lt;/a&gt; in Bonn, Germany.
It provided insights into the engine room, security considerations, challenges, and the way forward.&lt;/p&gt;
&lt;h3&gt;FFmpeg using Forgejo&lt;/h3&gt;
&lt;p&gt;FFmpeg announced in a &lt;a href=&quot;https://ffmpeg.org/index.html?pubDate=20250822#:~:text=Forgejo%20instance&quot;&gt;recent news article&lt;/a&gt; that they started to accept contributions via their Forgejo instance available at &lt;a href=&quot;https://code.ffmpeg.org/&quot;&gt;code.ffmpeg.org&lt;/a&gt;.
We are pleased by such announcements because they show the results of our daily work.&lt;/p&gt;
&lt;h3&gt;Matrix security disclosure&lt;/h3&gt;
&lt;p&gt;On 16 July 2025, &lt;a href=&quot;https://matrix.org/blog/2025/07/security-predisclosure/&quot;&gt;Matrix announced in a predisclosure&lt;/a&gt; that a security vulnerability had been found in the current room versions and that it had been fixed.
For us, this means that all rooms on Matrix must be updated.&lt;/p&gt;
&lt;p&gt;As &lt;a href=&quot;https://forgejo.org/2025-07-monthly-report/#matrix-security-disclosure&quot;&gt;announced in the last monthly report&lt;/a&gt; we planned to do the upgrade shortly after the security fix was released.
However, the publication and adoption of the security fix didn&apos;t go as we expected.
As a result, only &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/372#issuecomment-6613645&quot;&gt;one room has been updated&lt;/a&gt; so far.&lt;/p&gt;
&lt;p&gt;We are monitoring the adoption of the security fix and plan to complete the remaining updates soon.
An announcement will be made in every room before it is updated.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.
The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/achyrva&quot;&gt;https://codeberg.org/achyrva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ada4a&quot;&gt;https://codeberg.org/ada4a&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/addisoncrump&quot;&gt;https://codeberg.org/addisoncrump&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adr1enbe4udou1n&quot;&gt;https://codeberg.org/adr1enbe4udou1n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adriand&quot;&gt;https://codeberg.org/adriand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Adrianyyy&quot;&gt;https://codeberg.org/Adrianyyy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alex265&quot;&gt;https://codeberg.org/alex265&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex619829&quot;&gt;https://codeberg.org/Alex619829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alextecplayz&quot;&gt;https://codeberg.org/alextecplayz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aloxlamm&quot;&gt;https://codeberg.org/aloxlamm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amartinz&quot;&gt;https://codeberg.org/amartinz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amoroso&quot;&gt;https://codeberg.org/amoroso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andrewrk&quot;&gt;https://codeberg.org/andrewrk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AnsisMalins&quot;&gt;https://codeberg.org/AnsisMalins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/apteryx&quot;&gt;https://codeberg.org/apteryx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Artiman&quot;&gt;https://codeberg.org/Artiman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atalanttore&quot;&gt;https://codeberg.org/Atalanttore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/atticus-sullivan&quot;&gt;https://codeberg.org/atticus-sullivan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AverageHelper&quot;&gt;https://codeberg.org/AverageHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/axka&quot;&gt;https://codeberg.org/axka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bagder&quot;&gt;https://codeberg.org/bagder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bartavi&quot;&gt;https://codeberg.org/bartavi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BaumiCoder&quot;&gt;https://codeberg.org/BaumiCoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bespinas&quot;&gt;https://codeberg.org/bespinas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bkil&quot;&gt;https://codeberg.org/bkil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bodsch&quot;&gt;https://codeberg.org/bodsch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bojidar-bg&quot;&gt;https://codeberg.org/bojidar-bg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brano&quot;&gt;https://codeberg.org/brano&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brigsi&quot;&gt;https://codeberg.org/brigsi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brook&quot;&gt;https://codeberg.org/brook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BtbN&quot;&gt;https://codeberg.org/BtbN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chavacava&quot;&gt;https://codeberg.org/chavacava&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chlorine&quot;&gt;https://codeberg.org/chlorine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Chucky2401&quot;&gt;https://codeberg.org/Chucky2401&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ClemaX&quot;&gt;https://codeberg.org/ClemaX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cmuench&quot;&gt;https://codeberg.org/cmuench&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/consteval&quot;&gt;https://codeberg.org/consteval&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crizomb&quot;&gt;https://codeberg.org/Crizomb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CSDUMMI&quot;&gt;https://codeberg.org/CSDUMMI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cybra&quot;&gt;https://codeberg.org/cybra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dallyger&quot;&gt;https://codeberg.org/dallyger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dani-schroeter&quot;&gt;https://codeberg.org/dani-schroeter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danielep&quot;&gt;https://codeberg.org/danielep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darkswordreams&quot;&gt;https://codeberg.org/darkswordreams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Daschi&quot;&gt;https://codeberg.org/Daschi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dawe&quot;&gt;https://codeberg.org/dawe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dbushell&quot;&gt;https://codeberg.org/dbushell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/denn_moe&quot;&gt;https://codeberg.org/denn_moe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dharsanb&quot;&gt;https://codeberg.org/dharsanb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/diraneyya&quot;&gt;https://codeberg.org/diraneyya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dnsnet-mdrescher&quot;&gt;https://codeberg.org/dnsnet-mdrescher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dovah-kiin&quot;&gt;https://codeberg.org/dovah-kiin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/drewcassidy&quot;&gt;https://codeberg.org/drewcassidy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DrRac27&quot;&gt;https://codeberg.org/DrRac27&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/drweissbrot&quot;&gt;https://codeberg.org/drweissbrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dss&quot;&gt;https://codeberg.org/dss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dvonessen&quot;&gt;https://codeberg.org/dvonessen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EifionLlwyd&quot;&gt;https://codeberg.org/EifionLlwyd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eli-schwartz&quot;&gt;https://codeberg.org/eli-schwartz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eludendil&quot;&gt;https://codeberg.org/eludendil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Empyrean&quot;&gt;https://codeberg.org/Empyrean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ernest314&quot;&gt;https://codeberg.org/ernest314&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ewin&quot;&gt;https://codeberg.org/ewin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/f00&quot;&gt;https://codeberg.org/f00&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fiesh&quot;&gt;https://codeberg.org/fiesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fkiraly&quot;&gt;https://codeberg.org/fkiraly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fpedrei&quot;&gt;https://codeberg.org/fpedrei&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fr0zi&quot;&gt;https://codeberg.org/fr0zi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Frankkkkk&quot;&gt;https://codeberg.org/Frankkkkk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/freelock&quot;&gt;https://codeberg.org/freelock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fsievers&quot;&gt;https://codeberg.org/fsievers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GGORG&quot;&gt;https://codeberg.org/GGORG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gnaaarwhal&quot;&gt;https://codeberg.org/Gnaaarwhal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/greghellings&quot;&gt;https://codeberg.org/greghellings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gridhead&quot;&gt;https://codeberg.org/gridhead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hailey&quot;&gt;https://codeberg.org/hailey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hails&quot;&gt;https://codeberg.org/hails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/halvin&quot;&gt;https://codeberg.org/halvin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HankB&quot;&gt;https://codeberg.org/HankB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HarHarLinks&quot;&gt;https://codeberg.org/HarHarLinks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hb0nd&quot;&gt;https://codeberg.org/hb0nd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hill-98&quot;&gt;https://codeberg.org/Hill-98&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hiraku&quot;&gt;https://codeberg.org/Hiraku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/holtwick&quot;&gt;https://codeberg.org/holtwick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iago&quot;&gt;https://codeberg.org/iago&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ikks&quot;&gt;https://codeberg.org/ikks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/infinoid&quot;&gt;https://codeberg.org/infinoid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/itinerare&quot;&gt;https://codeberg.org/itinerare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jank1619&quot;&gt;https://codeberg.org/jank1619&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/janw&quot;&gt;https://codeberg.org/janw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jelu&quot;&gt;https://codeberg.org/jelu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JL710&quot;&gt;https://codeberg.org/JL710&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/johnnyjayjay&quot;&gt;https://codeberg.org/johnnyjayjay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jorams&quot;&gt;https://codeberg.org/jorams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jrtcdbrg&quot;&gt;https://codeberg.org/jrtcdbrg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/js&quot;&gt;https://codeberg.org/js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JSylvia007&quot;&gt;https://codeberg.org/JSylvia007&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kampka&quot;&gt;https://codeberg.org/kampka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kavash&quot;&gt;https://codeberg.org/kavash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kbruen&quot;&gt;https://codeberg.org/kbruen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kerbless&quot;&gt;https://codeberg.org/kerbless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kevincox&quot;&gt;https://codeberg.org/kevincox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kot&quot;&gt;https://codeberg.org/kot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kpfleming&quot;&gt;https://codeberg.org/kpfleming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/laosb&quot;&gt;https://codeberg.org/laosb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LecrisUT&quot;&gt;https://codeberg.org/LecrisUT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lever1209&quot;&gt;https://codeberg.org/lever1209&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lfavole&quot;&gt;https://codeberg.org/lfavole&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lgierth&quot;&gt;https://codeberg.org/lgierth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lord_of_the_dumpster&quot;&gt;https://codeberg.org/lord_of_the_dumpster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LordMZTE&quot;&gt;https://codeberg.org/LordMZTE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lunar8982&quot;&gt;https://codeberg.org/Lunar8982&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LWFlouisa&quot;&gt;https://codeberg.org/LWFlouisa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mactynow&quot;&gt;https://codeberg.org/mactynow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MaddinM&quot;&gt;https://codeberg.org/MaddinM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maks1mS&quot;&gt;https://codeberg.org/Maks1mS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MalcolmMielle&quot;&gt;https://codeberg.org/MalcolmMielle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/margau&quot;&gt;https://codeberg.org/margau&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/megakeegman&quot;&gt;https://codeberg.org/megakeegman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mengzhuo&quot;&gt;https://codeberg.org/mengzhuo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MerlijnWajer&quot;&gt;https://codeberg.org/MerlijnWajer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfocko&quot;&gt;https://codeberg.org/mfocko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfxa&quot;&gt;https://codeberg.org/mfxa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micw&quot;&gt;https://codeberg.org/micw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MinimalMatt&quot;&gt;https://codeberg.org/MinimalMatt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mnalis&quot;&gt;https://codeberg.org/mnalis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mokapot&quot;&gt;https://codeberg.org/mokapot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moritzdietz&quot;&gt;https://codeberg.org/moritzdietz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msfjarvis&quot;&gt;https://codeberg.org/msfjarvis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mynacol&quot;&gt;https://codeberg.org/Mynacol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mysticmode&quot;&gt;https://codeberg.org/mysticmode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neox-libre&quot;&gt;https://codeberg.org/neox-libre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NickP&quot;&gt;https://codeberg.org/NickP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nightfirecat&quot;&gt;https://codeberg.org/Nightfirecat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nnuuvv&quot;&gt;https://codeberg.org/nnuuvv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nrb&quot;&gt;https://codeberg.org/nrb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oatbiscuits&quot;&gt;https://codeberg.org/oatbiscuits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/omenos&quot;&gt;https://codeberg.org/omenos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oscarotero&quot;&gt;https://codeberg.org/oscarotero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paspflue&quot;&gt;https://codeberg.org/paspflue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paultag&quot;&gt;https://codeberg.org/paultag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pboguslawski&quot;&gt;https://codeberg.org/pboguslawski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pennersr&quot;&gt;https://codeberg.org/pennersr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Pneuma&quot;&gt;https://codeberg.org/Pneuma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/privacy1st&quot;&gt;https://codeberg.org/privacy1st&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PrivateNoob&quot;&gt;https://codeberg.org/PrivateNoob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/psii&quot;&gt;https://codeberg.org/psii&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/r-pufky&quot;&gt;https://codeberg.org/r-pufky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RaphGL&quot;&gt;https://codeberg.org/RaphGL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rdfm&quot;&gt;https://codeberg.org/rdfm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/redbeard&quot;&gt;https://codeberg.org/redbeard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/renken&quot;&gt;https://codeberg.org/renken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Rirusha&quot;&gt;https://codeberg.org/Rirusha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RMM&quot;&gt;https://codeberg.org/RMM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rmoriz&quot;&gt;https://codeberg.org/rmoriz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RokeJulianLockhart&quot;&gt;https://codeberg.org/RokeJulianLockhart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rolandd&quot;&gt;https://codeberg.org/rolandd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ruuda&quot;&gt;https://codeberg.org/ruuda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s1m&quot;&gt;https://codeberg.org/s1m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scMarkus&quot;&gt;https://codeberg.org/scMarkus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sdht0&quot;&gt;https://codeberg.org/sdht0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/senekor&quot;&gt;https://codeberg.org/senekor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Shuroii&quot;&gt;https://codeberg.org/Shuroii&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sirhectorin&quot;&gt;https://codeberg.org/sirhectorin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skyper&quot;&gt;https://codeberg.org/Skyper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slatian&quot;&gt;https://codeberg.org/slatian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smartclip_tim&quot;&gt;https://codeberg.org/smartclip_tim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/soc&quot;&gt;https://codeberg.org/soc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stratself&quot;&gt;https://codeberg.org/stratself&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Sylphrena&quot;&gt;https://codeberg.org/Sylphrena&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/szethh&quot;&gt;https://codeberg.org/szethh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tcpipuk&quot;&gt;https://codeberg.org/tcpipuk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/techokami&quot;&gt;https://codeberg.org/techokami&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thezzisu&quot;&gt;https://codeberg.org/thezzisu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thibaulltt&quot;&gt;https://codeberg.org/thibaulltt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thisismissem&quot;&gt;https://codeberg.org/thisismissem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tofkamp&quot;&gt;https://codeberg.org/tofkamp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toras9000&quot;&gt;https://codeberg.org/toras9000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tragivictoria&quot;&gt;https://codeberg.org/tragivictoria&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/transitory&quot;&gt;https://codeberg.org/transitory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuaris&quot;&gt;https://codeberg.org/tuaris&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmaster&quot;&gt;https://codeberg.org/tuxmaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/urda&quot;&gt;https://codeberg.org/urda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/valpackett&quot;&gt;https://codeberg.org/valpackett&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vandenoever&quot;&gt;https://codeberg.org/vandenoever&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/volkmnv&quot;&gt;https://codeberg.org/volkmnv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vpotyarkin&quot;&gt;https://codeberg.org/vpotyarkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vtmocanu&quot;&gt;https://codeberg.org/vtmocanu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/waldyrious&quot;&gt;https://codeberg.org/waldyrious&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wickedsmoke&quot;&gt;https://codeberg.org/wickedsmoke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/woodruffw&quot;&gt;https://codeberg.org/woodruffw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wucke13&quot;&gt;https://codeberg.org/wucke13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xlionjuan&quot;&gt;https://codeberg.org/xlionjuan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zaid1442011&quot;&gt;https://codeberg.org/zaid1442011&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zhaofengli&quot;&gt;https://codeberg.org/zhaofengli&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo monthly report - July 2025</title><link>https://forgejo.org/2025-07-monthly-report/</link><guid isPermaLink="true">https://forgejo.org/2025-07-monthly-report/</guid><description>The Forgejo v12 release was on time. The runner saw significant progress and the release tooling was improved. Discussions emerged regarding AI contributions, contributor attributions in the documentation, and the future of communication. An NLnet grant ended, allowing time for a retrospective.</description><pubDate>Mon, 04 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo v12&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2025-07-release-v12-0/&quot;&gt;Forgejo v12.0.0&lt;/a&gt; was published on July 17 as scheduled.
The release also marks the end of support for the LTS release Forgejo v7.
We recommend that everyone upgrades to at least the new LTS (Forgejo v11).&lt;/p&gt;
&lt;p&gt;A regression involving Minio was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/8529&quot;&gt;identified and resolved&lt;/a&gt; less than 24 hours before the release.
Another regression was found and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8550&quot;&gt;fixed&lt;/a&gt; after the release.
Workarounds were &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/12836&quot;&gt;added to the release notes&lt;/a&gt;, and it was decided to not publish an immediate patch release.&lt;/p&gt;
&lt;p&gt;A week later, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/22237&quot;&gt;Forgejo v12.0.1&lt;/a&gt; was published, which reverts a breaking change that should have been prepared more carefully.
An &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/8634&quot;&gt;effort has begun&lt;/a&gt; that will hopefully allow us to reintroduce it.&lt;/p&gt;
&lt;h3&gt;Helm chart&lt;/h3&gt;
&lt;p&gt;A bug fix release was made for &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.1.14&quot;&gt;v7&lt;/a&gt;, which corresponds to Forgejo v7, which is now end of life (EOL).
Similarly, a bug fix release was made for &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v12.5.4&quot;&gt;v12&lt;/a&gt;, which corresponds to Forgejo v11.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v13.0.0&quot;&gt;v13&lt;/a&gt; and a &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v13.0.1&quot;&gt;patch version&lt;/a&gt; were released with the corresponding Forgejo v12 versions.
v13 represents a significant change because &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/commit/9f1cdf51a95f56167c2a5b9f72ba271bf0dc4653&quot;&gt;Redis was replaced with Valkey&lt;/a&gt;.
Furthermore, the PostgreSQL HA subchart underwent a significant update and requires &lt;a href=&quot;https://artifacthub.io/packages/helm/bitnami/postgresql-ha#to-16-0-0&quot;&gt;manual migration&lt;/a&gt; if used.&lt;/p&gt;
&lt;p&gt;Additionally, there is a &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/issues/1322&quot;&gt;plan to migrate away from Bitnami&lt;/a&gt; for the included PostgreSQL setup because the images are no longer public.&lt;/p&gt;
&lt;h3&gt;Forgejo runner&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#6-4-0&quot;&gt;Forgejo runner v6.4.0&lt;/a&gt; was published, but unfortunately, it contained a serious regression.
After it was fixed, &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#7-0-0&quot;&gt;Forgejo runner v7.0.0&lt;/a&gt; was released, and the previous version was no longer recommended.&lt;/p&gt;
&lt;p&gt;A few weeks later, the longest-standing security bug of the Runner was fixed (namely, &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/661&quot;&gt;redacting multiline secrets&lt;/a&gt;), which was released in &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#8-0-0&quot;&gt;Forgejo runner v8.0.0&lt;/a&gt;.
This version also &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#8-0-0&quot;&gt;validates actions and workflows against a schema&lt;/a&gt;.
Although it is a significant breaking change, it is not optional because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A workflow or action with random content may lead to unexpected behavior that is difficult to understand and debug.&lt;/li&gt;
&lt;li&gt;When something works by chance but is neither documented nor supported, users will depend on it, and it will have to be supported or migrated in a backward-compatible way.
This can be very difficult once the Runner is stable.&lt;/li&gt;
&lt;li&gt;Errors that are only detected at runtime due to incorrect behavior can be difficult to relate to the root cause, especially when the error is syntactic.
Syntactic errors displayed in the Forgejo UI or in the output of a failed job are much easier to identify.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, some validations were too strict in v8.0.0, so they were relaxed in &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#8-0-1&quot;&gt;v8.0.1&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Tooling&lt;/h3&gt;
&lt;p&gt;The release process is not fully automated yet, but the &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager&quot;&gt;release manager&lt;/a&gt; intends to automate it eventually.
The &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager/commit/c3d2c05f5b314fb86000a3e227e7dfc56e6516a7&quot;&gt;checklist of manual tasks&lt;/a&gt; has been clarified.
With a major release every three months, ambiguities have time to surface.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/release-notes-assistant&quot;&gt;release notes assistant&lt;/a&gt;, which collects and compiles release notes, was the main pain point for this release because compiling the notes took about two hours.
Created a year ago, the assistant focused on correctness rather than efficiency, and it became problematic, holding up the release for hours for a process that should take only a few minutes.
The process was &lt;a href=&quot;https://code.forgejo.org/forgejo/release-notes-assistant/pulls/89/files&quot;&gt;speed up by 20 times&lt;/a&gt; and now completes in under two minutes.
See also the rationale for not using the &lt;a href=&quot;https://code.forgejo.org/forgejo/release-notes-assistant#alternatives&quot;&gt;most commonly known alternative&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The toolchain used to build Forgejo and Forgejo runner relies on the &lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-build-publish&quot;&gt;same action&lt;/a&gt;, which builds the binary in a container for each supported architecture.
This ensures that the same binary is used both standalone and in the container.
It is specialized for Forgejo and unlikely to be used for any other purpose.
However, it relies on the &lt;a href=&quot;https://code.forgejo.org/actions/forgejo-release&quot;&gt;forgejo-release action&lt;/a&gt;, which has received a few contributions over the past year.
Apparently, it is used by other projects, although it was first designed to be specific to Forgejo.
It gained &lt;a href=&quot;https://code.forgejo.org/actions/forgejo-release/commit/26fe28ef1e2c975b623a2948307fc03b2289c871&quot;&gt;support for efficiently using the release-notes-assistant&lt;/a&gt;.
&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v8.0.1&quot;&gt;Forgejo Runner v8.0.1&lt;/a&gt; started using it, meaning changes from pull requests won&apos;t need to be managed manually.
Only breaking changes and how to deal with them will need to be explained.&lt;/p&gt;
&lt;h2&gt;Discussions&lt;/h2&gt;
&lt;h3&gt;AI usage in the context of Forgejo&lt;/h3&gt;
&lt;p&gt;At the end of June, &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/366&quot;&gt;a discussion&lt;/a&gt; began in the Forgejo space about how to handle AI contributions.
There had already been informal discussions on the topic beforehand.&lt;/p&gt;
&lt;p&gt;The discussion focuses on how to handle AI contributions and attribute the use of AI.
Several proposals have emerged from the discussion and are &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/366#issuecomment-6014572&quot;&gt;currently being voted on&lt;/a&gt;.
The plan is to officially adopt the proposals afterwards.&lt;/p&gt;
&lt;p&gt;Once a decision has been made, it will be announced in either a subsequent monthly report or a separate blog article.&lt;/p&gt;
&lt;h3&gt;Attribution of contributors in the docs&lt;/h3&gt;
&lt;p&gt;At the beginning of the month, &lt;a href=&quot;https://codeberg.org/forgejo/docs/issues/1275&quot;&gt;a discussion&lt;/a&gt; began about whether and how authors of the documentation should be credited.
The idea is to motivate contributors and show appreciation for their work.
The discussion is still in its early stages but has been dormant for the past few weeks.&lt;/p&gt;
&lt;h3&gt;Communication in the Forgejo space&lt;/h3&gt;
&lt;p&gt;A conversation about Matrix began in the UI development space, particularly due to the &lt;a href=&quot;https://matrix.org/blog/2025/07/terms-update/&quot;&gt;introduction of premium accounts&lt;/a&gt;.
&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/375&quot;&gt;A discussion&lt;/a&gt; was started to document future conversations.
This discussion covers what future communication in the Forgejo space should look like.&lt;/p&gt;
&lt;p&gt;Other FLOSS communities have experienced similar issues with Matrix and its evolution.
Currently, there is a proposal to send an open letter to Matrix encouraging them to return to their core values.&lt;/p&gt;
&lt;h2&gt;Forgejo runner&lt;/h2&gt;
&lt;h3&gt;Security audit&lt;/h3&gt;
&lt;p&gt;In August 2024, a security audit &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/204&quot;&gt;was planned&lt;/a&gt; for the Forgejo runner.
The goal of the audit was to advance the Runner from the Alpha stage of development to the Beta stage and beyond.&lt;/p&gt;
&lt;p&gt;Forgejo requested the audit from &lt;a href=&quot;https://www.radicallyopensecurity.com/&quot;&gt;Radically Open Security&lt;/a&gt; through the &lt;a href=&quot;https://nlnet.nl/&quot;&gt;NLnet&lt;/a&gt; grant.
ROS helped draft a plan for the audit, which was accepted in September.
Actual testing began in November.&lt;/p&gt;
&lt;p&gt;Throughout the testing process, we received updates on any findings so that we could develop fixes immediately.
These updates resulted in a series of security-focused changes to the Forgejo runner.&lt;/p&gt;
&lt;p&gt;The following issues were fixed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CLN-007: Unrestricted container options (found by ROS).&lt;br /&gt;It was possible to perform privilege escalation by specifying certain container options.
This was resolved by &lt;a href=&quot;https://code.forgejo.org/forgejo/act/commit/1fcb03d2bba2e714b741618eb0b2dd76a46ffab9&quot;&gt;filtering the container options&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;CLN-002: Runner containers had access to the Docker socket (found by ROS).&lt;br /&gt;The Docker socket was mounted into job containers by default.
This allowed workflows to perform privilege escalation.
This default has &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/commit/8ccf20cf8a88f4fa66a453b4c091feef06909e32&quot;&gt;been changed&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Cache access was not authenticated (&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;programmerjake&lt;/a&gt;).&lt;br /&gt;Previously, access to the caches was not authenticated.
This meant that workflows for one repository could receive caches from other repositories by guessing the correct cache key.
This issue has been resolved by &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/commit/46eb63a952e2e403aea80316514d4815fa47b0c8&quot;&gt;requiring authentication to access the caches and by adding a proxy&lt;/a&gt; to transparently perform this authentication.&lt;/li&gt;
&lt;li&gt;Multiline secrets were not correctly redacted.&lt;br /&gt;Secrets with multiple lines are &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/commit/5edc3d10412293de855976964894e5ab23573c6b&quot;&gt;now redacted properly&lt;/a&gt; when printed to the logs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The complete details about the findings and non-findings of the audit can be found in the &lt;a href=&quot;https://code.forgejo.org/forgejo/nlnet-off-ngie-forgejo/src/commit/69f76976cc6a62bc7a64f9f76e4be75eec3d608d/target/Forgejo%20penetration%20test%20report%202024%201.0.pdf&quot;&gt;code audit report&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As stated above, the last fix was included in v8.0.0, therefore it is highly recommended that you upgrade your runners to v8.0.0 or newer.&lt;/p&gt;
&lt;h3&gt;No more GITHUB in variable names&lt;/h3&gt;
&lt;p&gt;Starting with version 7.0.0, the runner allows you to create new workflows &lt;a href=&quot;https://code.forgejo.org/forgejo/act/pulls/171&quot;&gt;without using &lt;code&gt;GITHUB&lt;/code&gt; in the names of contexts or variables&lt;/a&gt;.
This change is mostly cosmetic, which is why it took years to implement.
Previous names that include GitHub are preserved for backward compatibility and to facilitate reusing actions originally developed exclusively for GitHub.
Shortly after this update was deployed to the Forgejo infrastructure, a &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/677&quot;&gt;series of pull requests&lt;/a&gt; were merged to take advantage of the more aesthetically pleasing names.&lt;/p&gt;
&lt;h3&gt;Reorganization of bugs and features&lt;/h3&gt;
&lt;p&gt;All issues and pull requests for ACT and the Runner were triaged and sorted.
Bug reports are now grouped in the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues&quot;&gt;Forgejo runner issue tracker&lt;/a&gt;, and feature requests have been moved to a &lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-actions-feature-requests/issues&quot;&gt;dedicated space&lt;/a&gt;.
A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/369&quot;&gt;new workflow was also discussed&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-actions-feature-requests/issues/new?template=.forgejo%2fissue_template%2ffeature-request.yaml&quot;&gt;implemented&lt;/a&gt; on that occasion.
In short, it strikes a balance between the expectations of someone filing a new feature request and the need for firsthand testimonies to guide implementation.&lt;/p&gt;
&lt;p&gt;To avoid reinventing the wheel, an exhaustive inventory of commits in the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/678&quot;&gt;Nektos ACT and act_runner repositories&lt;/a&gt; was taken and compared to the Forgejo runner implementation.
This process covered the last year, during which there was little activity, so it did not take long, and the discovered commits will save valuable development time.&lt;/p&gt;
&lt;h2&gt;User research&lt;/h2&gt;
&lt;p&gt;Efforts were made in &lt;a href=&quot;https://codeberg.org/forgejo/design/issues/47&quot;&gt;design&lt;/a&gt; and user research (&lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues/64&quot;&gt;1&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues/63&quot;&gt;2&lt;/a&gt;) to determine how Forgejo Actions CI results should be handled.
This will help determine the next steps now that Forgejo v12.0 has the building blocks to &lt;a href=&quot;https://forgejo.org/2025-07-release-v12-0/#forgejo-actions-email-notifications-on-failure&quot;&gt;send email notifications when a workflow fails&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This month, blockers related to test timeouts (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8274&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8274&quot;&gt;2&lt;/a&gt;) that affected development were removed.
This now enables further progress on federated user activities.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;This month marks the end of the &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2022-12-01-nlnet/application.txt&quot;&gt;2022-12-01 grant&lt;/a&gt; from NLnet.&lt;/p&gt;
&lt;p&gt;The funding enabled some changes to be made to the Forgejo codebase.
This was done in exchange for financial compensation.&lt;/p&gt;
&lt;p&gt;The completed tasks were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2023:&lt;ul&gt;
&lt;li&gt;C2: Improvements to the Forgejo Runner and automated setup of Forgejo instances using it.&lt;/li&gt;
&lt;li&gt;A1: Tools to produce the binary Forgejo distribution.&lt;/li&gt;
&lt;li&gt;A2: Tools to produce OCI container Forgejo images.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2024:&lt;ul&gt;
&lt;li&gt;B1: Trigger the release pipeline on a Forgejo instance with a tag pushed by the release manager.&lt;/li&gt;
&lt;li&gt;C1: Improvements to the LXC helper, which provides low-level system containers for use in CI.&lt;/li&gt;
&lt;li&gt;C3: Add support for an LXC backend to ACT.&lt;/li&gt;
&lt;li&gt;B3: Improvements to the webhook implementation and support for &lt;a href=&quot;https://builds.sr.ht/&quot;&gt;https://builds.sr.ht/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;D3: Improved accessibility when JavaScript is disabled or unavailable for other reasons.&lt;/li&gt;
&lt;li&gt;D4: Fixed accessibility issues identified by an audit.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Funding was extended, enabling the completion of additional tasks in 2025:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;F: Moderation - Support for reporting users to the instance admin.&lt;/li&gt;
&lt;li&gt;E3: Improved documentation for Forgejo Actions, including splitting it into several easier-to-read pages.&lt;/li&gt;
&lt;li&gt;E2: Improved navigation in the documentation (version selector, sidebar).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Further information can be found in the &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2022-12-01-nlnet&quot;&gt;corresponding documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We would like to thank NLnet for supporting these tasks.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;h3&gt;Disaster recover exercise&lt;/h3&gt;
&lt;p&gt;At the end of 2024, the Forgejo infrastructure migrated to a &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/&quot;&gt;K8s cluster&lt;/a&gt; that is self-hosted on three bare metal machines in Germany and Finland where only free software was installed on top of a Debian GNU/Linux operating system.
The cluster is designed to recover from a data center going down in either country without data loss.
This was tested when the cluster was first set up.
However, it is beneficial to practice the disaster recovery scenario periodically, which occurred on &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/374&quot;&gt;July 24, 2025&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/src/commit/f70ba83508af3f19d0caebf61b6a25d15eb89dbe/docs/k8s-2025-07-24-disaster-recovery-exercise.md&quot;&gt;detailed task list was published&lt;/a&gt; for the record.
In short, everything went as smoothly as could be expected, except for one detail:
NFS-backed Forgejo instances can be extremely slow when going back and forth between Germany and Finland (a Git clone can go from 15 seconds to 5 minutes).&lt;/p&gt;
&lt;h3&gt;Network outage&lt;/h3&gt;
&lt;p&gt;Coincidentally, on July 21, the day the disaster recovery exercise was announced, a network outage affected the Forgejo Action runners servicing Codeberg between midnight and 4 AM UTC.
While the machines hosted at Hetzner in Finland could no longer reach Codeberg, those hosted in Germany using the same exit point (core5.fra.hetzner.com) experienced no issues.
We submitted a support request to Hetzner less than one hour after the outage began, but it did not clarify the problem, which apparently fixed itself.
Alternatively, the issue may have been resolved without any information being provided.&lt;/p&gt;
&lt;p&gt;With that exception, the Forgejo infrastructure required little to no attention from the DevOps team.
This was a welcome change compared to the work required to mitigate and understand the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320&quot;&gt;excessive crawling&lt;/a&gt; of the previous months.&lt;/p&gt;
&lt;h3&gt;Hardware costs&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/104&quot;&gt;cost of the Forgejo hardware infrastructure&lt;/a&gt; was broken down, and the rationale behind it was explained.
It has been &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/README.md#2025&quot;&gt;informally paid for&lt;/a&gt; by individuals so far, and a more sustainable model was discussed.
It was proposed that &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/303&quot;&gt;Codeberg cover the costs&lt;/a&gt;, and the necessary administrative steps were taken.
The following months will reveal whether this transition was successful.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;Matrix security disclosure&lt;/h3&gt;
&lt;p&gt;On 16 July 2025, &lt;a href=&quot;https://matrix.org/blog/2025/07/security-predisclosure/&quot;&gt;Matrix announced in a predisclosure&lt;/a&gt; that a security vulnerability had been found in the current room versions and that it had been fixed.
According to Matrix, this was only possible by introducing a new room version.&lt;/p&gt;
&lt;p&gt;For us, this means that all rooms on Matrix must be updated.
It also means that we have to &lt;a href=&quot;https://forgejo.org/2025-05-monthly-update/#matrix-chat-room-migration&quot;&gt;migrate the Forgejo chat room again&lt;/a&gt;.
In this case, there will be no manual migration and the update will be performed as direct update of the room version.
This means that all clients that support room updates will automatically join the new room.&lt;/p&gt;
&lt;p&gt;Nevertheless, there will be a message in the room shortly before the update so that everyone whose clients do not support updates is informed.
The distributed rollout of the security fix is &lt;strong&gt;planned for 11 August 2025&lt;/strong&gt;.
The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/372&quot;&gt;plan is&lt;/a&gt; to update the Forgejo rooms shortly after the release.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.
The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0xC0ncord&quot;&gt;https://codeberg.org/0xC0ncord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/8xLGyCLz&quot;&gt;https://codeberg.org/8xLGyCLz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/achyrva&quot;&gt;https://codeberg.org/achyrva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adf19&quot;&gt;https://codeberg.org/adf19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adulau&quot;&gt;https://codeberg.org/adulau&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aivot-on&quot;&gt;https://codeberg.org/aivot-on&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/albundy83&quot;&gt;https://codeberg.org/albundy83&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex619829&quot;&gt;https://codeberg.org/Alex619829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aloxlamm&quot;&gt;https://codeberg.org/aloxlamm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amdim&quot;&gt;https://codeberg.org/amdim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amv-bamboo&quot;&gt;https://codeberg.org/amv-bamboo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AntwortEinesLebens&quot;&gt;https://codeberg.org/AntwortEinesLebens&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/apteryx&quot;&gt;https://codeberg.org/apteryx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arija&quot;&gt;https://codeberg.org/arija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Athozus&quot;&gt;https://codeberg.org/Athozus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atul_Eterno&quot;&gt;https://codeberg.org/Atul_Eterno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/austinhuang&quot;&gt;https://codeberg.org/austinhuang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AverageHelper&quot;&gt;https://codeberg.org/AverageHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/awarg&quot;&gt;https://codeberg.org/awarg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/axka&quot;&gt;https://codeberg.org/axka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/azmeuk&quot;&gt;https://codeberg.org/azmeuk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/badnetmask&quot;&gt;https://codeberg.org/badnetmask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/banaanihillo&quot;&gt;https://codeberg.org/banaanihillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bibu5&quot;&gt;https://codeberg.org/bibu5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Bixilon&quot;&gt;https://codeberg.org/Bixilon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BlackSpirits&quot;&gt;https://codeberg.org/BlackSpirits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bojidar-bg&quot;&gt;https://codeberg.org/bojidar-bg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Booklordofthedings&quot;&gt;https://codeberg.org/Booklordofthedings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bowie&quot;&gt;https://codeberg.org/bowie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BtbN&quot;&gt;https://codeberg.org/BtbN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Canard&quot;&gt;https://codeberg.org/Canard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/catfromplan9&quot;&gt;https://codeberg.org/catfromplan9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chris420&quot;&gt;https://codeberg.org/chris420&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christopher-besch&quot;&gt;https://codeberg.org/christopher-besch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cider&quot;&gt;https://codeberg.org/cider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/civodul&quot;&gt;https://codeberg.org/civodul&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ClemaX&quot;&gt;https://codeberg.org/ClemaX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/clementwanjau&quot;&gt;https://codeberg.org/clementwanjau&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cregox&quot;&gt;https://codeberg.org/cregox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CrowIsTaken&quot;&gt;https://codeberg.org/CrowIsTaken&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crueter&quot;&gt;https://codeberg.org/crueter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/D3rJust1n&quot;&gt;https://codeberg.org/D3rJust1n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danielep&quot;&gt;https://codeberg.org/danielep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darakian&quot;&gt;https://codeberg.org/darakian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dark_Arc&quot;&gt;https://codeberg.org/Dark_Arc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darkswordreams&quot;&gt;https://codeberg.org/darkswordreams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DebuggerAndrzej&quot;&gt;https://codeberg.org/DebuggerAndrzej&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/delroth&quot;&gt;https://codeberg.org/delroth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dobrovolskyi&quot;&gt;https://codeberg.org/dobrovolskyi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dovah-kiin&quot;&gt;https://codeberg.org/dovah-kiin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dr_bakterius&quot;&gt;https://codeberg.org/dr_bakterius&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/duxsco&quot;&gt;https://codeberg.org/duxsco&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earthjasonlin&quot;&gt;https://codeberg.org/earthjasonlin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eli-schwartz&quot;&gt;https://codeberg.org/eli-schwartz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ellpeck&quot;&gt;https://codeberg.org/Ellpeck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eNBeWe&quot;&gt;https://codeberg.org/eNBeWe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ernstki&quot;&gt;https://codeberg.org/ernstki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fadedave&quot;&gt;https://codeberg.org/fadedave&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foss-&quot;&gt;https://codeberg.org/foss-&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Frankkkkk&quot;&gt;https://codeberg.org/Frankkkkk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/frnmst&quot;&gt;https://codeberg.org/frnmst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fruzitent&quot;&gt;https://codeberg.org/fruzitent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/genofire&quot;&gt;https://codeberg.org/genofire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gerald&quot;&gt;https://codeberg.org/gerald&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/glitchedFops&quot;&gt;https://codeberg.org/glitchedFops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gnaaarwhal&quot;&gt;https://codeberg.org/Gnaaarwhal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gridhead&quot;&gt;https://codeberg.org/gridhead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Guiorgy&quot;&gt;https://codeberg.org/Guiorgy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/happenpappen&quot;&gt;https://codeberg.org/happenpappen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/helpimnotdrowning&quot;&gt;https://codeberg.org/helpimnotdrowning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HigherOrderLogic&quot;&gt;https://codeberg.org/HigherOrderLogic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hinrikus&quot;&gt;https://codeberg.org/hinrikus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hiraku&quot;&gt;https://codeberg.org/Hiraku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadeprime&quot;&gt;https://codeberg.org/jadeprime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/james&quot;&gt;https://codeberg.org/james&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jcgl&quot;&gt;https://codeberg.org/jcgl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jedik&quot;&gt;https://codeberg.org/jedik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jheiselman&quot;&gt;https://codeberg.org/jheiselman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jkirk&quot;&gt;https://codeberg.org/jkirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jlh&quot;&gt;https://codeberg.org/jlh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jomo&quot;&gt;https://codeberg.org/jomo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/joneshf&quot;&gt;https://codeberg.org/joneshf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/js&quot;&gt;https://codeberg.org/js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JSchlarb&quot;&gt;https://codeberg.org/JSchlarb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kavash&quot;&gt;https://codeberg.org/kavash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kemitix&quot;&gt;https://codeberg.org/kemitix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kisg&quot;&gt;https://codeberg.org/kisg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kkremitzki&quot;&gt;https://codeberg.org/kkremitzki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kne&quot;&gt;https://codeberg.org/kne&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kochklops&quot;&gt;https://codeberg.org/kochklops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kraftner&quot;&gt;https://codeberg.org/kraftner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kryesh&quot;&gt;https://codeberg.org/Kryesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kryptonian&quot;&gt;https://codeberg.org/kryptonian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kumi&quot;&gt;https://codeberg.org/kumi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kwoot&quot;&gt;https://codeberg.org/kwoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leandro-costa&quot;&gt;https://codeberg.org/leandro-costa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leavelet&quot;&gt;https://codeberg.org/leavelet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leorize&quot;&gt;https://codeberg.org/leorize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Link1J&quot;&gt;https://codeberg.org/Link1J&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lippoliv&quot;&gt;https://codeberg.org/lippoliv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lookshe&quot;&gt;https://codeberg.org/lookshe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lord-KalEl&quot;&gt;https://codeberg.org/Lord-KalEl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LWFlouisa&quot;&gt;https://codeberg.org/LWFlouisa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lynoure&quot;&gt;https://codeberg.org/lynoure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maks1mS&quot;&gt;https://codeberg.org/Maks1mS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MalcolmMielle&quot;&gt;https://codeberg.org/MalcolmMielle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mareep-YANG&quot;&gt;https://codeberg.org/Mareep-YANG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/margau&quot;&gt;https://codeberg.org/margau&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MarkL4YG&quot;&gt;https://codeberg.org/MarkL4YG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martianh&quot;&gt;https://codeberg.org/martianh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mattalxndr&quot;&gt;https://codeberg.org/mattalxndr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maxadamo&quot;&gt;https://codeberg.org/maxadamo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maxlath&quot;&gt;https://codeberg.org/maxlath&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mcrmonkey&quot;&gt;https://codeberg.org/mcrmonkey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mdione&quot;&gt;https://codeberg.org/mdione&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mee70&quot;&gt;https://codeberg.org/mee70&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micw&quot;&gt;https://codeberg.org/micw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Miguel_PL&quot;&gt;https://codeberg.org/Miguel_PL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mrwsl&quot;&gt;https://codeberg.org/mrwsl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mxi223&quot;&gt;https://codeberg.org/mxi223&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nafalan&quot;&gt;https://codeberg.org/Nafalan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/natkr&quot;&gt;https://codeberg.org/natkr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nightfurysl2001&quot;&gt;https://codeberg.org/nightfurysl2001&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/njmurarka&quot;&gt;https://codeberg.org/njmurarka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oatbiscuits&quot;&gt;https://codeberg.org/oatbiscuits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliphant&quot;&gt;https://codeberg.org/oliphant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oskardotglobal&quot;&gt;https://codeberg.org/oskardotglobal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paspflue&quot;&gt;https://codeberg.org/paspflue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pastk&quot;&gt;https://codeberg.org/pastk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paulie-aus-punskas&quot;&gt;https://codeberg.org/paulie-aus-punskas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pboguslawski&quot;&gt;https://codeberg.org/pboguslawski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pixelcode&quot;&gt;https://codeberg.org/pixelcode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pkpkpkpk&quot;&gt;https://codeberg.org/pkpkpkpk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pollux88&quot;&gt;https://codeberg.org/pollux88&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/polyfloyd&quot;&gt;https://codeberg.org/polyfloyd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/puzzle-it-nu&quot;&gt;https://codeberg.org/puzzle-it-nu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pwall2222&quot;&gt;https://codeberg.org/pwall2222&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rdfm&quot;&gt;https://codeberg.org/rdfm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/readevalprintloop&quot;&gt;https://codeberg.org/readevalprintloop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rempas&quot;&gt;https://codeberg.org/rempas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/retarded-beast&quot;&gt;https://codeberg.org/retarded-beast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rfc2549&quot;&gt;https://codeberg.org/rfc2549&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/risottobias&quot;&gt;https://codeberg.org/risottobias&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/robertk66&quot;&gt;https://codeberg.org/robertk66&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rosano&quot;&gt;https://codeberg.org/rosano&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Routhinator&quot;&gt;https://codeberg.org/Routhinator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s1m&quot;&gt;https://codeberg.org/s1m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scMarkus&quot;&gt;https://codeberg.org/scMarkus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/senekor&quot;&gt;https://codeberg.org/senekor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ShadowJonathan&quot;&gt;https://codeberg.org/ShadowJonathan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Shuroii&quot;&gt;https://codeberg.org/Shuroii&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/simonrolfmore&quot;&gt;https://codeberg.org/simonrolfmore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/skedastically&quot;&gt;https://codeberg.org/skedastically&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skyper&quot;&gt;https://codeberg.org/Skyper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slatian&quot;&gt;https://codeberg.org/slatian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smartclip_tim&quot;&gt;https://codeberg.org/smartclip_tim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smichel17&quot;&gt;https://codeberg.org/smichel17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sneakers-the-rat&quot;&gt;https://codeberg.org/sneakers-the-rat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/soc&quot;&gt;https://codeberg.org/soc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stelo&quot;&gt;https://codeberg.org/stelo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/svenseeberg&quot;&gt;https://codeberg.org/svenseeberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/t4skforce&quot;&gt;https://codeberg.org/t4skforce&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tclaus&quot;&gt;https://codeberg.org/tclaus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tepozoa&quot;&gt;https://codeberg.org/tepozoa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ThatAF&quot;&gt;https://codeberg.org/ThatAF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/the-real-herowl&quot;&gt;https://codeberg.org/the-real-herowl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thekerker&quot;&gt;https://codeberg.org/thekerker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thezzisu&quot;&gt;https://codeberg.org/thezzisu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Thibaultmol&quot;&gt;https://codeberg.org/Thibaultmol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TobiX&quot;&gt;https://codeberg.org/TobiX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toras9000&quot;&gt;https://codeberg.org/toras9000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tschortsch&quot;&gt;https://codeberg.org/tschortsch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Use-AIrs&quot;&gt;https://codeberg.org/Use-AIrs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VadZ&quot;&gt;https://codeberg.org/VadZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/valpackett&quot;&gt;https://codeberg.org/valpackett&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vandenoever&quot;&gt;https://codeberg.org/vandenoever&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/volkan&quot;&gt;https://codeberg.org/volkan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vpeltnt&quot;&gt;https://codeberg.org/vpeltnt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vpotyarkin&quot;&gt;https://codeberg.org/vpotyarkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vsz&quot;&gt;https://codeberg.org/vsz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wallabra&quot;&gt;https://codeberg.org/wallabra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Werzi2001&quot;&gt;https://codeberg.org/Werzi2001&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wezm&quot;&gt;https://codeberg.org/wezm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/witcher&quot;&gt;https://codeberg.org/witcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/XeroX&quot;&gt;https://codeberg.org/XeroX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeager&quot;&gt;https://codeberg.org/yeager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yurtpage&quot;&gt;https://codeberg.org/yurtpage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zalexanninev15&quot;&gt;https://codeberg.org/Zalexanninev15&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zopsicle&quot;&gt;https://codeberg.org/zopsicle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zotan&quot;&gt;https://codeberg.org/zotan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zub&quot;&gt;https://codeberg.org/zub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zyphlar&quot;&gt;https://codeberg.org/zyphlar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo v12.0 is available</title><link>https://forgejo.org/2025-07-release-v12-0/</link><guid isPermaLink="true">https://forgejo.org/2025-07-release-v12-0/</guid><description>Forgejo v12.0 is available. The User eXperience (UX) and User Interface were improved for the user profile page, the review of pull requests one commit at a time and Forgejo Actions notifications when a job fails. Pull request conflict checking was made faster and more resource efficient. SSH can be used instead of OpenPGP for instance signing. A default robots.txt is included by default to help mitigate excessive crawling. It also comes with a number of other UX, performance and security improvements.</description><pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v12.0&lt;/a&gt; was released on 17 July 2025. You will find a short selection of the changes it introduces below and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/12836&quot;&gt;complete list in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://v12.next.forgejo.org/&quot;&gt;dedicated test instance&lt;/a&gt; is available to try it out. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v12.0/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/12836&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;in the chat room&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release marks the Forgejo v7.0 LTS series as End of Life. Forgejo v11.0 was published three months ago and will be supported until &lt;a href=&quot;https://forgejo.org/docs/next/admin/release-schedule/&quot;&gt;15 July 2026&lt;/a&gt;, when Forgejo v16.0 is published. Admins of Forgejo instances with version v7.0 are recommended to upgrade to v11.0 as soon as possible as only it and v12.0 will receive security patches from now on.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/user-research&quot;&gt;User research&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/design/&quot;&gt;design&lt;/a&gt; is where Forgejo User eXperience (UX) and User Interface (UI) are discussed and improved. It is not about mimicking other forges but observing what users do and improve accordingly. For instance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most Forgejo user have visited their profile page at least once and some may use it as their landing page. It is in constant need for improvement while minimizing the impact on habits that users developed over time. The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7906&quot;&gt;redesign of the user profile&lt;/a&gt; was done in that spirit. It adds more actions while also making better use of the available space.&lt;/li&gt;
&lt;li&gt;There are a number of hidden features in Forgejo that only few people actually use because their UX is not good enough. The ability to review pull requests one commit at a time was among them and it &lt;a href=&quot;./#improved-ux-for-per-commit-reviews&quot;&gt;was made easier to discover and more convenient to use&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Forgejo Actions may be used to schedule jobs that run daily, just like cron. But failures could got unnoticed for a long time, waiting for a user to visit the actions page. By adding an option to the workflow, &lt;a href=&quot;./#forgejo-actions-email-notifications-on-failure&quot;&gt;an email notification can now be sent&lt;/a&gt; when a job fails.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In large part because Forgejo is used at scale by Codeberg, performance issues are discovered that are not easily detected on smaller instances. For instance, each open pull request is checked for conflict every time a new commit is pushed to the target branch, blocking the ability to merge them. This &lt;a href=&quot;./#faster-conflict-checking&quot;&gt;I/O intensive and time consuming step is optimized&lt;/a&gt;, saving resources and allowing faster merges.&lt;/p&gt;
&lt;p&gt;Forgejo security features rely on a mixture OpenPGP and SSH. Since SSH is more widely known, Forgejo is gradually implementing alternatives using SSH for tasks that previously required OpenPGP. In this release it is now possible to use SSH instead of OpenPGP for &lt;a href=&quot;./#instance-signing-with-ssh&quot;&gt;instance signing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Excessive crawling is a recurring chore for all Forgejo instances, large and small. A &lt;a href=&quot;./#default-robotstxt&quot;&gt;&lt;code&gt;robots.txt&lt;/code&gt; file&lt;/a&gt; is included by default to reduce the impact of crawlers by letting them know which URLs should be avoided.&lt;/p&gt;
&lt;h3&gt;Improved UX for per-commit reviews&lt;/h3&gt;
&lt;p&gt;When a pull request has a well organized series of commit, it may be convenient for the reviewer to focus on each of them individually instead of using the larger diff that shows all of them at once. It is already possible in Forgejo but it is also one of the lesser known features, in part because it was inconvenient to use and discover. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7155&quot;&gt;This was improved as follows&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The new next (&quot;Next&quot;) and previous (&quot;Prev&quot;) buttons can be used to navigate the list of commits which is more convenient than using the pull down menu.&lt;/li&gt;
&lt;li&gt;The review button (&quot;Finish Review&quot;) can be accessed from the per-commit review page instead of being inactive.&lt;/li&gt;
&lt;li&gt;The links in the pull request pages (conversation and list of commits) lead to the per-commit review page instead of the commit display page. Unless they were made redundant by a force push.&lt;/li&gt;
&lt;li&gt;The commit message is now displayed in the per-commit review page so the reviewer does not need to navigate away to find it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Keeping forks in sync&lt;/h2&gt;
&lt;p&gt;If you have a fork and want to keep it synchronized with upstream, the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2364&quot;&gt;new sync fork feature&lt;/a&gt; provides a way to do that. It also indicates whether your fork is behind and/or ahead and by how many commits.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;glTF viewer&lt;/h2&gt;
&lt;p&gt;If you open a &lt;a href=&quot;https://en.wikipedia.org/wiki/GlTF&quot;&gt;glTF model&lt;/a&gt; in Forgejo, you will &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8111&quot;&gt;now be able to preview this model&lt;/a&gt; in the Forgejo UI without having to download the model and open it in an external tool. Support for previewing other 3D formats &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/5188&quot;&gt;is an open issue&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Forgejo Actions email notifications on failure&lt;/h2&gt;
&lt;p&gt;If a workflow fails, &lt;a href=&quot;https://forgejo.org/docs/v12.0/user/actions/reference/#enable-email-notifications&quot;&gt;a mail will be sent&lt;/a&gt; provided the workflow contains &lt;code&gt;enable-email-notifications: true&lt;/code&gt;. The recipient depends on the context:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pull requests: the user who opened the pull request.&lt;/li&gt;
&lt;li&gt;Push: the user who pushed the commit.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/docs/v12.0/user/actions/reference/#onschedule&quot;&gt;Scheduled&lt;/a&gt;: the user who owns the repository or the contact email of the organization.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/docs/v12.0/user/actions/reference/#onworkflow_dispatch&quot;&gt;Dispatch&lt;/a&gt;: the user who triggered the dispatch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;UI and UX improvements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If you try to create a repository and you have hit the limit on the amount of repositories you are allowed to create, it is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7402&quot;&gt;now clearer which limit&lt;/a&gt; you hit.&lt;/li&gt;
&lt;li&gt;The size and dimensions constraints of the custom avatar is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7998&quot;&gt;now shown in the UI&lt;/a&gt;. You no longer have to find out about this requirement after failing to upload an avatar.&lt;/li&gt;
&lt;li&gt;Pasting images into the comment editor &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7749&quot;&gt;will now show that image in the &apos;dropzone&apos;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7906&quot;&gt;user profile has been redesigned&lt;/a&gt;. The most notable change is that actions have been moved to a dropdown and several new actions were added.&lt;/li&gt;
&lt;li&gt;The &apos;Write&apos;/&apos;Preview&apos; switch has been &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7481&quot;&gt;reworked to use the new switch element&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6795&quot;&gt;migration screen was redesigned&lt;/a&gt; to make it more usable and make better use of the available screen space.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Automatically refreshing workflows&lt;/h3&gt;
&lt;p&gt;Endlessly staring at many workflows in the &apos;Actions&apos; tab to see if they pass is a favorite activity of many developers. Forgejo now &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7361&quot;&gt;refreshes the status of these workflows every 30 seconds&lt;/a&gt; so you no longer have to open each workflow in a new tab or wear out your &lt;kbd&gt;F5&lt;/kbd&gt; key.&lt;/p&gt;
&lt;h3&gt;Localized relative time&lt;/h3&gt;
&lt;p&gt;In many places of the Forgejo UI you will find relative time, the logic of this component was provided by &lt;a href=&quot;https://github.com/github/relative-time-element&quot;&gt;&lt;code&gt;github/relative-time-element&lt;/code&gt;&lt;/a&gt;. Forgejo encountered two issues with this library: it was not possible to localize the relative time and there are &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/6111&quot;&gt;cases that it does not show the correct relative time&lt;/a&gt;. This library is now replaced by Forgejo&apos;s own implementation (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6154&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8134&quot;&gt;2&lt;/a&gt;) that allows for localized relative time and uses a simpler approach to calculating relative time that does not run into the same bugs the previous library did.&lt;/p&gt;
&lt;h2&gt;Faster conflict checking&lt;/h2&gt;
&lt;p&gt;Due to Forgejo&apos;s nature it relies a lot on Git commands to perform its job in a efficient manner. Forgejo stores repositories as &lt;a href=&quot;https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-barerepository&quot;&gt;bare repositories&lt;/a&gt; and this means that it is not always possible to use commands that require a &lt;a href=&quot;https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-workingtree&quot;&gt;working tree&lt;/a&gt;. For certain operations a temporary clone is created for the sole purpose of using such Git operations. For large repositories this can end up causing a lot of I/O. One of such example was pull request conflict checking, which &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/7701&quot;&gt;was reported by a user&lt;/a&gt; to cause I/O loads proportional to the amount of open pull requests. Upon re-examining available git commands &lt;a href=&quot;https://git-scm.com/docs/git-merge-tree&quot;&gt;&lt;code&gt;git merge-tree --write-tree&lt;/code&gt;&lt;/a&gt; allows for conflict checking to happen without requiring a working tree. If Forgejo is run with a Git version greater or equal than 2.38 &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7727&quot;&gt;you will enjoy this improved performance&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;API changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7699&quot;&gt;Two new API endpoints were added&lt;/a&gt; to retrieve actions runs of a repository and retrieve specific runs by their ID.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8179&quot;&gt;A new API endpoint was added&lt;/a&gt; that is able to retrieve multiples blobs at once. This endpoint was added to help &lt;a href=&quot;https://github.com/sveltia/sveltia-cms/issues/381&quot;&gt;get support for Forgejo in Sveltia CMS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Endpoints that return the metadata of a file &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7418&quot;&gt;now also returns when the last commit was committed&lt;/a&gt;. This change &lt;a href=&quot;https://codeberg.org/gitnex/gitnex/issues/1225&quot;&gt;helps GitNex with showing this information&lt;/a&gt; in directory listings of a repository, similar how Forgejo shows that information.&lt;/li&gt;
&lt;li&gt;It is now possible to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7716&quot;&gt;lists packages and retrieve info about a package without a token if the profile is public&lt;/a&gt;. This is public information and was not required to be guarded behind a token check.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Redirecting fediverse handles&lt;/h2&gt;
&lt;p&gt;Forgejo will &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8185&quot;&gt;now transform fediverse handles&lt;/a&gt; (ex. &lt;code&gt;@forgejo@floss.social&lt;/code&gt; and &lt;code&gt;!forgejo@programming.dev&lt;/code&gt;) into links to &lt;a href=&quot;https://fedirect.toolforge.org&quot;&gt;https://fedirect.toolforge.org&lt;/a&gt;, a website hosted by &lt;a href=&quot;https://en.wikipedia.org/wiki/Wikimedia_Foundation&quot;&gt;Wikimedia&lt;/a&gt;, to redirect fediverse handles to their respective URLs via Webfinger. Forgejo is working on implementing proper &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md#federated-mentions&quot;&gt;federated mentions&lt;/a&gt; that will also notify users on other federated services, which the redirection does not do.&lt;/p&gt;
&lt;h2&gt;Tabs indentations in the comment editor&lt;/h2&gt;
&lt;p&gt;If you have typed comments and tried to use &lt;kbd&gt;Tab&lt;/kbd&gt; you have noticed that it does nothing, this is frustrating especially if you try to type lists. Tab handling is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6813&quot;&gt;now implemented in Forgejo&lt;/a&gt; to do indentations. A lot of time has been spent to make sure it is accessible and works in a consistent and expected behavior to address &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/4142&quot;&gt;concerns raised last year&lt;/a&gt; in a previous implementation.&lt;/p&gt;
&lt;h2&gt;Relaxing the requirements on email addresses&lt;/h2&gt;
&lt;p&gt;In response to a security report &lt;a href=&quot;https://github.com/go-gitea/gitea/pull/17688&quot;&gt;Gitea restricted the allowed syntax of email addresses in early 2022&lt;/a&gt; and some email addresses could not be used despite being conformant to the RFC. This change has &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7829&quot;&gt;now been reverted&lt;/a&gt; and the security issue that would allow for command injection was fixed, thus removing the need for strict requirements on the syntax of email addresses.&lt;/p&gt;
&lt;h2&gt;Instance signing with SSH&lt;/h2&gt;
&lt;p&gt;Commits that are created by Forgejo (e.g. file edits and merge commits) can be signed by the Forgejo instance via a GPG key.
It is now also possible to instead &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6897&quot;&gt;use SSH signing&lt;/a&gt;, it has the unique capability of being done by a TPM via &lt;a href=&quot;https://github.com/Foxboron/ssh-tpm-agent&quot;&gt;an ssh-agent&lt;/a&gt;.
In addition the &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/1122&quot;&gt;instance signing documentation&lt;/a&gt; was reworded to use clearer language and be easier to read for instance admins.&lt;/p&gt;
&lt;h2&gt;Removing deprecated API authentication methods&lt;/h2&gt;
&lt;p&gt;The API has several authentication methods, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7924&quot;&gt;two of them are now removed&lt;/a&gt; after being deprecated in 2023. The two methods would look in the URL query for the &lt;code&gt;access_token&lt;/code&gt; and &lt;code&gt;token&lt;/code&gt; parameter. Passing authentication via the URL is not secure and can lead to them being logged and thus being exposed. It is now fully removed and there&apos;s no option to enable these methods again.&lt;/p&gt;
&lt;h2&gt;Default robots.txt&lt;/h2&gt;
&lt;p&gt;Forgejo instances have in the last several months been &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320&quot;&gt;hit hard by all sorts of new crawlers&lt;/a&gt;. One of the easiest way that crawlers disrupt Forgejo instances is by navigating to expensive to serve endpoints, creating many repo archives and filling disk space or getting lost in trying many different issue filters. Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7387&quot;&gt;now serves a strong restrictive robots.txt&lt;/a&gt;, if no &lt;code&gt;robots.txt&lt;/code&gt; is set. This should help with reducing the impact of crawlers that respect &lt;code&gt;robots.txt&lt;/code&gt; by not navigating to endpoints that can disrupt Forgejo instances.&lt;/p&gt;
&lt;h2&gt;Forgejo build time optimization&lt;/h2&gt;
&lt;p&gt;The build process compresses the frontend assets via &lt;code&gt;gzip&lt;/code&gt; into the Forgejo binary with &lt;a href=&quot;https://github.com/shurcooL/vfsgen&quot;&gt;vfsgen&lt;/a&gt; so that Forgejo can serve these assets. The build process now &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8143&quot;&gt;compresses the frontend assets with Zstd&lt;/a&gt;, which is 4x faster than gzip. As an added benefit, assets are now served via &lt;a href=&quot;https://en.wikipedia.org/wiki/Zstd&quot;&gt;Zstd&lt;/a&gt; with a fallback to on-the-fly &lt;code&gt;gzip&lt;/code&gt; for browsers that do not support &lt;code&gt;Zstd&lt;/code&gt;. It also resulted in reducing the Forgejo binary by 2 MiB.&lt;/p&gt;
&lt;p&gt;One of Forgejo&apos;s dependencies, specifically &lt;a href=&quot;https://github.com/sassoftware/go-rpmutils&quot;&gt;go-rpmutils&lt;/a&gt;, contained a dependency that is a &lt;a href=&quot;https://go.dev/blog/cgo&quot;&gt;CGO&lt;/a&gt; wrapper around &lt;code&gt;Zstd&lt;/code&gt;&apos;s reference library. Although Forgejo&apos;s did not use this CGO dependency, Go unconditionally compiled it and it took almost as long as compiling the CGO SQLite3 driver. Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7953&quot;&gt;now has a fork of go-rpmutils&lt;/a&gt; without this CGO dependency, resulting in a shorter build time of Forgejo.&lt;/p&gt;
&lt;h2&gt;xorm EngineGroup connections for optimized database query routing and load balancing&lt;/h2&gt;
&lt;p&gt;With &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7212&quot;&gt;this addition&lt;/a&gt;, read-only queries are automatically routed to database read-replicas in a load-balanced way, keeping the &lt;code&gt;primary&lt;/code&gt; free for writes. &lt;a href=&quot;https://xorm.io/docs/chapter-01/3.policy/&quot;&gt;Multiple load balancing policies&lt;/a&gt; can be selected.&lt;/p&gt;
&lt;p&gt;Note: This requires a HA database setup with multiple nodes (at least 3) and only works with Postgres or MySQL.&lt;/p&gt;
&lt;h2&gt;Reducing the usage of Fomantic.&lt;/h2&gt;
&lt;p&gt;Forgejo uses &lt;a href=&quot;https://fomantic-ui.com/&quot;&gt;Fomantic-UI&lt;/a&gt; for historical reasons. In many cases it is not needed, does not provide good accessibility and lock components behind a javascript requirement that could also have been implemented via CSS and semantic HTML. In this release, there are two changes that reduce the use of Fomantic.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The module that dims the entire page and displays a modal &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7416&quot;&gt;has been replaced with Forgejo&apos;s own dimming module&lt;/a&gt;. This allows browser testing to happen and avoid regressions.&lt;/li&gt;
&lt;li&gt;Fomantic-UI comes with a lot of CSS, Forgejo does not use all this CSS. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7705&quot;&gt;Unused font size classes were removed&lt;/a&gt;. This reduces the size of the compiled CSS file and ensures that we do not accidentally depend on it in the future.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Container images based on Alpine 3.22&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/12&quot;&gt;v12 container images&lt;/a&gt; are &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v12.0/forgejo/Dockerfile#L54&quot;&gt;built&lt;/a&gt; from the latest &lt;a href=&quot;https://alpinelinux.org/posts/Alpine-3.22.0-released.html&quot;&gt;Alpine 3.22 patch release&lt;/a&gt;. It includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=git&amp;amp;branch=v3.22&quot;&gt;Git 2.49.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=gnupg&amp;amp;branch=v3.22&quot;&gt;GnuPG 2.4.7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=sqlite&amp;amp;branch=v3.22&quot;&gt;SQLite 3.49.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=openssh&amp;amp;branch=v3.22&quot;&gt;OpenSSH 10.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Release schedule and Long Term Support&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;/docs/v12.0/admin/release-schedule/&quot;&gt;time based release schedule&lt;/a&gt; was established to publish a release every three months. Patch releases will be published more frequently, depending on the severity of the bug or security fixes they contain.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;11.0 (LTS)&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2026&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12.0&lt;/td&gt;
&lt;td&gt;17 July 2025&lt;/td&gt;
&lt;td&gt;16 October 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13.0&lt;/td&gt;
&lt;td&gt;16 October 2025&lt;/td&gt;
&lt;td&gt;15 January 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;12.0-test daily releases&lt;/h3&gt;
&lt;p&gt;Releases are built daily from the latest changes found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v12.0/forgejo&quot;&gt;v12.0/forgejo&lt;/a&gt; development branch. They are deployed to the &lt;a href=&quot;https://v12.next.forgejo.org&quot;&gt;https://v12.next.forgejo.org&lt;/a&gt; instance for manual verification in case a bug fix is of particular interest ahead of the next patch release. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/12.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/12.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v12.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their names are staying the same but they are replaced by new builds every day.&lt;/p&gt;
&lt;h2&gt;Get Forgejo v12.0&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&quot;/download/&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/12836&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/12836&quot;&gt;breaking bug fixes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v12.0.0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/12.0.0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/12.0&quot;&gt;&lt;code&gt;12.0&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;12.0.Y&lt;/code&gt; patch release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v12.0/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
&lt;h3&gt;Donate&lt;/h3&gt;
&lt;p&gt;Forgejo is proud to be &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/&quot;&gt;funded transparently&lt;/a&gt;. Additionally, it accept donations &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;through Liberapay&lt;/a&gt;. It is also possible to &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donate to Codeberg e.V.&lt;/a&gt; in case the Liberapay option does not work out for you, and part of the funding is used to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/#forgejo-resources-per-year&quot;&gt;compensate for work on Forgejo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, the Liberapay team allows for money to go directly to developers without a round-trip to Codeberg. Additionally, Liberapay allows for a steady and reliable funding stream next to other options, a crucial aspect for the project. The distribution of funds through Liberapay is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;transparently controlled using the decision-making process&lt;/a&gt;, and Forgejo contributors are encouraged to consider applying to benefit from this funding opportunity.&lt;/p&gt;
&lt;p&gt;Thank you for using Forgejo and considering a donation, in case your financial situation allows you to.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - June 2025</title><link>https://forgejo.org/2025-06-monthly-report/</link><guid isPermaLink="true">https://forgejo.org/2025-06-monthly-report/</guid><description>Forgejo v12.0 branch was cut on 25 June, for a planned release on 17 July. Forgejo v11.0.2 was released on 18 June, addressing several bugs. Forgejo Runner v6.4.0 introduced offline caching support. The minimum required Git version has been bumped and the search has been improved. There is strong enthusiasm for translating Forgejo. User following with ActivityPub has progressed and a new NLnet grant has been accepted.</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo v12.0 on its way&lt;/h3&gt;
&lt;p&gt;On 25 June the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/12836&quot;&gt;Forgejo v12.0&lt;/a&gt; branch was &quot;cut&quot; as planned.
The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v12.0/forgejo&quot;&gt;v12.0/forgejo&lt;/a&gt; branch was created out of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo&quot;&gt;Forgejo&lt;/a&gt; branch used for development.
The same was also done &lt;a href=&quot;https://codeberg.org/forgejo/docs/src/branch/v12.0&quot;&gt;in the documentation&lt;/a&gt;, backport labels were created, test releases were built, etc.
The &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager/&quot;&gt;release manager&lt;/a&gt; is used to &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager/src/branch/main/templates/major-minor/00-cut-branch.md#automated&quot;&gt;automate some of those steps&lt;/a&gt;, and &lt;a href=&quot;https://code.forgejo.org/forgejo/release-scheduler/commit/921f075f723a5fc5d3ae48657f60b1b337740561&quot;&gt;improvements&lt;/a&gt; were made on this occasion to reduce the number of &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager/src/branch/main/templates/major-minor/00-cut-branch.md#manual&quot;&gt;manual steps&lt;/a&gt; that members of the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#releases&quot;&gt;release team&lt;/a&gt; need to perform.&lt;/p&gt;
&lt;p&gt;On the same day, &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt; was upgraded to the v12.0 release candidate to discover bugs &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues?q=&amp;amp;type=all&amp;amp;state=open&amp;amp;labels=237776&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;that need fixing&lt;/a&gt; before it can be published &lt;a href=&quot;https://forgejo.org/docs/latest/admin/release-schedule/&quot;&gt;17 July&lt;/a&gt;.
The release schedule was however not published and advertised prominently enough and a few seasoned Forgejo contributors were taken by surprise when the branch was cut.
To help prevent that in the future, the &lt;a href=&quot;https://forgejo.org/releases/&quot;&gt;release page&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/597&quot;&gt;reworked&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Forgejo v11.0.2&lt;/h3&gt;
&lt;p&gt;On 18 June 2025, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/release-notes-published/11.0.2.md&quot;&gt;Forgejo v11.0.2&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v11.0.2&quot;&gt;released&lt;/a&gt;.
This update addresses several bugs, including issues with the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7883&quot;&gt;quote reply feature on Chromium&lt;/a&gt;, with &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7979&quot;&gt;pull request cross references&lt;/a&gt; and with &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7986&quot;&gt;noise of Forgejo Actions logs&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Helm chart&lt;/h3&gt;
&lt;p&gt;A &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v12.5.2&quot;&gt;patch version of v12&lt;/a&gt; has been released for the corresponding v11.0.2 release of Forgejo.&lt;/p&gt;
&lt;p&gt;Additionally, a &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/pulls/1298&quot;&gt;fix addressing incorrect persistence settings for the postgresql-ha&lt;/a&gt; has been &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v12.5.3&quot;&gt;released&lt;/a&gt; and backported to &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.1.13&quot;&gt;v7&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Forgejo runner&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#6-4-0&quot;&gt;Forgejo runner v6.4.0&lt;/a&gt; was released.
It upgraded the base image of &lt;a href=&quot;https://code.forgejo.org/forgejo/-/packages/container/runner/6.4.0&quot;&gt;the container&lt;/a&gt; to &lt;a href=&quot;https://alpinelinux.org/posts/Alpine-3.22.0-released.html&quot;&gt;Alpine 3.22&lt;/a&gt;.
If building a derived image for your own purposes, please note that &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/628&quot;&gt;update-ca-certificates is no longer included&lt;/a&gt; and needs to be installed explicitly if needed.&lt;/p&gt;
&lt;p&gt;Aside from a number of dependency upgrades, this release supports &lt;a href=&quot;https://code.forgejo.org/forgejo/act/commit/613090ecd71f75e6200ded4c9d5424b26a792755&quot;&gt;offline caching&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Prioritising bug fixes over new features&lt;/h2&gt;
&lt;p&gt;In software development, it is crucial to balance bug fixes and new features.
To improve understanding of this, an addition to the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md&quot;&gt;pull request agreement&lt;/a&gt; was proposed.
&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/337&quot;&gt;The proposal&lt;/a&gt; emphasises the prioritisation of bug fixes over the development of new features.&lt;/p&gt;
&lt;p&gt;New contributors are often initially drawn to the idea of implementing new features.
However, feature development can be challenging for those without a solid understanding of the codebase and team dynamics.
Most contributors benefit from a more gradual learning process, which is easier when addressing bugs.&lt;/p&gt;
&lt;p&gt;By clarifying that bug fixes take precedence, it becomes easier to provide a clearer path for newcomers.
Furthermore, bug fixes tend to receive faster responses from reviewers.
This approach improves software quality and helps to integrate new contributors into the team more effectively.&lt;/p&gt;
&lt;h2&gt;Minimum Git version&lt;/h2&gt;
&lt;p&gt;As &lt;a href=&quot;https://forgejo.org/2025-05-monthly-update/#minimum-git-version&quot;&gt;announced in the last monthly report&lt;/a&gt;, there was a discussion regarding increasing the required Git version.
The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/324&quot;&gt;proposal was accepted&lt;/a&gt;, and the minimum required Git version has therefore been increased from &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8328&quot;&gt;2.0.0 to 2.34.1&lt;/a&gt;.
This has already led to a simplification, as obsolete Git version checks have been removed.
Going forward, Forgejo will increase the required Git version with each LTS release (and only with LTS releases) to match the oldest Git version supported by &lt;a href=&quot;https://www.debian.org/releases/stable/&quot;&gt;Debian stable&lt;/a&gt; and &lt;a href=&quot;https://ubuntu.com/about/release-cycle&quot;&gt;Ubuntu LTS in &apos;Standard Support&apos;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Notable Pull Requests&lt;/h2&gt;
&lt;p&gt;In June, multiple improvements were made to the search functionality in Forgejo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7968&quot;&gt;General issue searching was enhanced&lt;/a&gt;: Introducing the ability to search by issue number and prioritising title matches when sorting results by relevance.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8003&quot;&gt;Improved issue dependency dropdown results&lt;/a&gt;: The dropdown now also sorts issues by relevance if a keyword is entered, and shows matching issues in the same repo first.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/Forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The pull request implementing &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4767&quot;&gt;user following with ActivityPub&lt;/a&gt; reached a stage where it &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/664&quot;&gt;passes automated end-to-end tests&lt;/a&gt; communicating with &lt;a href=&quot;https://codeberg.org/superseriousbusiness/gotosocial&quot;&gt;GoToSocial&lt;/a&gt;.
It relieves the developer from the chore of manually testing every aspect of the interactions by launching a Forgejo instance built out of the pull request as well as a GoToSocial instance.
They are then driven &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/664/files#diff-80463d8d8ad3b0451c584ef5232f2b29b069f22e&quot;&gt;to follow a realistic scenario&lt;/a&gt; that goes like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Following the Forgejo account&lt;/li&gt;
&lt;li&gt;Creating and federating activities to GoToSocial&lt;/li&gt;
&lt;li&gt;Federating activities to Forgejo&lt;/li&gt;
&lt;li&gt;Unfollowing and refollowing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Under the hood pull requests were merged in the GoToSocial (&lt;a href=&quot;https://codeberg.org/superseriousbusiness/gotosocial/pulls/4134&quot;&gt;1&lt;/a&gt;) and Forgejo (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8078&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7728&quot;&gt;2&lt;/a&gt;) codebases.&lt;/p&gt;
&lt;h2&gt;User research&lt;/h2&gt;
&lt;p&gt;When the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/3719&quot;&gt;CI fails, it is sometimes useful to get a notification&lt;/a&gt; and a well organized series of pull requests (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7491&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7508&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7509&quot;&gt;3&lt;/a&gt;) were merged within short delays this month because they had the required test coverage and were straightforward to review.&lt;/p&gt;
&lt;p&gt;The corresponding feature request was submitted over a year ago and was one of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/3719&quot;&gt;most upvoted&lt;/a&gt;.
However, it lacked &lt;a href=&quot;https://codeberg.org/forgejo/user-research&quot;&gt;user research&lt;/a&gt;, so all the developers could do was come up with the best solution they could imagine.
While upvoting a solution is encouraging, it does not replace firsthand evidence that a problem exists and how it manifests itself.&lt;/p&gt;
&lt;p&gt;Unsurprisingly, there was no consensus on one aspect of the implementation: &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/8187&quot;&gt;should it be opt-in or opt-out&lt;/a&gt;?
With only a few days before the Forgejo v12.0 branch was cut, there was limited time for proper user research and discussions.
However, reverting such a popular feature would have hindered Forgejo&apos;s progress.
A middle ground was found, and the feature was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8242&quot;&gt;modified to be opt-in&lt;/a&gt;.
A &lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues/63&quot;&gt;user research discussion&lt;/a&gt; was also initiated.&lt;/p&gt;
&lt;p&gt;One of the core challenges in Forgejo is to fill the absence of user research.
Otherwise, problems are likely to be discovered once an implementation is complete because they have not been documented.
Hopefully, the experience with implementing &lt;a href=&quot;https://forgejo.org/docs/next/user/actions/#enable-email-notifications&quot;&gt;Forgejo Actions email notifications&lt;/a&gt; this month illustrated why adding a concrete, firsthand example to a feature request helps to move them forward.
Each problem statement will make a difference when the developers write the code.
They will be more likely to make the right choices for users and less likely to rely on their imagination.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;The Localization Team is the largest team with formal applications, which can result in a large amount of bureaucracy overhead.
Team members often forget to reapply unless they are reminded, even if they are still around contributing to the project.&lt;/p&gt;
&lt;p&gt;From a translator&apos;s perspective, this can be a burden.
Those involved in multiple projects may find that participating in Forgejo translation becomes more complex due to the need for frequent renewals.&lt;/p&gt;
&lt;p&gt;To address this issue, a &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/298&quot;&gt;governance decision&lt;/a&gt; was made to simplify the renewal process.
Localization Team admins are now authorised to renew the memberships of non-admin team members if they have no objections.&lt;/p&gt;
&lt;p&gt;A modified version of this process has also been &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/299&quot;&gt;applied to the Contributors team&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Statistics&lt;/h3&gt;
&lt;p&gt;This month, 39 translators were active, 10 more than in June 2024.
By that time, we had moved past the ramp-up phase of the previous year, demonstrating healthy growth.&lt;/p&gt;
&lt;p&gt;However, the number of applicants to join the team does not align with the overall contributor count.
This presents a challenge because we need people to oversee the quality and consistency of translations.
Nonetheless, we&apos;re optimistic about finding a solution.
The important takeaway is the strong enthusiasm for translating Forgejo, which is fantastic!&lt;/p&gt;
&lt;h3&gt;Infrastructure&lt;/h3&gt;
&lt;p&gt;The backporting script for the new JSON-based localization has been completed, and the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8300&quot;&gt;first backport&lt;/a&gt; leveraging it happened a few days ago.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;At the end of June, our most recent NLnet application, submitted in April 2025, was approved!
This is exciting news and will allow us to work on the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2025/2025-04-01-nlnet-ngi0-commons/tasks.md#accessible-theming-140-hours&quot;&gt;Improving the platform accessibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2025/2025-04-01-nlnet-ngi0-commons/tasks.md#improved-git-lfs-support-refactoring-170-hours&quot;&gt;Refining Forgejo&apos;s Git LFS support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2025/2025-04-01-nlnet-ngi0-commons/tasks.md#from-forking-to-forging-contribution-workflow&quot;&gt;Developing a new contribution workflow: Forging&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find more information about these tasks in the &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2025/2025-04-01-nlnet-ngi0-commons/tasks.md&quot;&gt;sustainability repository&lt;/a&gt;.
The NLnet grant summary can be found on &lt;a href=&quot;https://nlnet.nl/project/Forgejo-workflow/&quot;&gt;their website&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Matrix chat room migration&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/332&quot;&gt;migration of the Matrix chat room&lt;/a&gt; has been successfully completed.
The &lt;strong&gt;old room is now deprecated and read-only&lt;/strong&gt;, so &lt;strong&gt;please join the new room&lt;/strong&gt; to continue communicating.&lt;/p&gt;
&lt;p&gt;You can find the new room under &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org?via=matrix.org&amp;amp;via=ccc.ac&amp;amp;via=tchncs.de&quot;&gt;#forgejo-chat:matrix.org&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;Forgejo Contribution Workshop&lt;/h3&gt;
&lt;p&gt;On &lt;a href=&quot;https://cfp.gulas.ch/gpn23/talk/A7MU9Z/&quot;&gt;20 June 2025&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;n0toose&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;famfo&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;Beowulf&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;dmowitz&lt;/a&gt; held a Forgejo Contribution Workshop at the &lt;a href=&quot;https://entropia.de/GPN23&quot;&gt;23. Gulaschprogrammiernacht (GPN23)&lt;/a&gt; in Karlsruhe.
The workshop was held in person and about 20 people attended.
It resulted in some completed PRs and some others that are currently in progress.
We welcome every new contributor to Forgejo!&lt;/p&gt;
&lt;p&gt;There are plans for similar workshops in the future at other locations.&lt;/p&gt;
&lt;h3&gt;Talk about Federation&lt;/h3&gt;
&lt;p&gt;On 5 July 2025, &lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;Jerger&lt;/a&gt; will &lt;a href=&quot;https://cfp.tuebix.org/tuebix-2025/talk/MDCL7N/&quot;&gt;give a short talk&lt;/a&gt; &lt;strong&gt;in German&lt;/strong&gt; about the state of federation at the &lt;a href=&quot;https://www.tuebix.org/&quot;&gt;Tübinger Linuxtag (Tübix)&lt;/a&gt; in Tübingen, Germany.
He will give insights into the engine room, security considerations, challenges and the way forward.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.
The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/abc1763613206&quot;&gt;https://codeberg.org/abc1763613206&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/achyrva&quot;&gt;https://codeberg.org/achyrva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Albirew&quot;&gt;https://codeberg.org/Albirew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alex3305&quot;&gt;https://codeberg.org/alex3305&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex619829&quot;&gt;https://codeberg.org/Alex619829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amoroso&quot;&gt;https://codeberg.org/amoroso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ams42&quot;&gt;https://codeberg.org/ams42&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/antki&quot;&gt;https://codeberg.org/antki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/apteryx&quot;&gt;https://codeberg.org/apteryx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arija&quot;&gt;https://codeberg.org/arija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Arsen&quot;&gt;https://codeberg.org/Arsen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Artha&quot;&gt;https://codeberg.org/Artha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/asandikci&quot;&gt;https://codeberg.org/asandikci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AverageHelper&quot;&gt;https://codeberg.org/AverageHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ayykamp&quot;&gt;https://codeberg.org/ayykamp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AzzyDev&quot;&gt;https://codeberg.org/AzzyDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/badrihippo&quot;&gt;https://codeberg.org/badrihippo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BarryLhm&quot;&gt;https://codeberg.org/BarryLhm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benteg&quot;&gt;https://codeberg.org/benteg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bkil&quot;&gt;https://codeberg.org/bkil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BlackSpirits&quot;&gt;https://codeberg.org/BlackSpirits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bookwar&quot;&gt;https://codeberg.org/bookwar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/c8h4&quot;&gt;https://codeberg.org/c8h4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chlorine&quot;&gt;https://codeberg.org/chlorine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christopher-besch&quot;&gt;https://codeberg.org/christopher-besch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/civodul&quot;&gt;https://codeberg.org/civodul&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/consus&quot;&gt;https://codeberg.org/consus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cregox&quot;&gt;https://codeberg.org/cregox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crueter&quot;&gt;https://codeberg.org/crueter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cswimr&quot;&gt;https://codeberg.org/cswimr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Daksh2000&quot;&gt;https://codeberg.org/Daksh2000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/daniel-baumann&quot;&gt;https://codeberg.org/daniel-baumann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/daym&quot;&gt;https://codeberg.org/daym&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DevYukine&quot;&gt;https://codeberg.org/DevYukine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/diem&quot;&gt;https://codeberg.org/diem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/doasu&quot;&gt;https://codeberg.org/doasu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/domi41&quot;&gt;https://codeberg.org/domi41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dovah-kiin&quot;&gt;https://codeberg.org/dovah-kiin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dploeger&quot;&gt;https://codeberg.org/dploeger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ecn&quot;&gt;https://codeberg.org/ecn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eli-schwartz&quot;&gt;https://codeberg.org/eli-schwartz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EssGeeEich&quot;&gt;https://codeberg.org/EssGeeEich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/feroxib&quot;&gt;https://codeberg.org/feroxib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flobeier&quot;&gt;https://codeberg.org/flobeier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Frankkkkk&quot;&gt;https://codeberg.org/Frankkkkk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fraud&quot;&gt;https://codeberg.org/fraud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fruzitent&quot;&gt;https://codeberg.org/fruzitent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gedankenstuecke&quot;&gt;https://codeberg.org/gedankenstuecke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/glitchedFops&quot;&gt;https://codeberg.org/glitchedFops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Granular9241&quot;&gt;https://codeberg.org/Granular9241&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grosmanal&quot;&gt;https://codeberg.org/grosmanal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Grub4K&quot;&gt;https://codeberg.org/Grub4K&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/haarhoff&quot;&gt;https://codeberg.org/haarhoff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hardillb&quot;&gt;https://codeberg.org/hardillb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hntin&quot;&gt;https://codeberg.org/hntin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hscells&quot;&gt;https://codeberg.org/hscells&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ilesjak&quot;&gt;https://codeberg.org/ilesjak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/inetshell&quot;&gt;https://codeberg.org/inetshell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/inference&quot;&gt;https://codeberg.org/inference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/itsdrike&quot;&gt;https://codeberg.org/itsdrike&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JamesBremner&quot;&gt;https://codeberg.org/JamesBremner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/janAkali&quot;&gt;https://codeberg.org/janAkali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jarhodes314&quot;&gt;https://codeberg.org/jarhodes314&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/javerous&quot;&gt;https://codeberg.org/javerous&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jeffersonbledsoe&quot;&gt;https://codeberg.org/jeffersonbledsoe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jkirk&quot;&gt;https://codeberg.org/jkirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmaasing&quot;&gt;https://codeberg.org/jmaasing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/johnnyjayjay&quot;&gt;https://codeberg.org/johnnyjayjay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnVeness&quot;&gt;https://codeberg.org/JohnVeness&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JSchlarb&quot;&gt;https://codeberg.org/JSchlarb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kaya_emrehan&quot;&gt;https://codeberg.org/kaya_emrehan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kbruen&quot;&gt;https://codeberg.org/kbruen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kemitix&quot;&gt;https://codeberg.org/kemitix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kkremitzki&quot;&gt;https://codeberg.org/kkremitzki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/klausfyhn&quot;&gt;https://codeberg.org/klausfyhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kochklops&quot;&gt;https://codeberg.org/kochklops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kwoot&quot;&gt;https://codeberg.org/kwoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lachstec&quot;&gt;https://codeberg.org/Lachstec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leherkom&quot;&gt;https://codeberg.org/leherkom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lfavole&quot;&gt;https://codeberg.org/lfavole&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/litchipi&quot;&gt;https://codeberg.org/litchipi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/luzifer&quot;&gt;https://codeberg.org/luzifer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maks1mS&quot;&gt;https://codeberg.org/Maks1mS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltejur&quot;&gt;https://codeberg.org/maltejur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/manuelraa&quot;&gt;https://codeberg.org/manuelraa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinarisk&quot;&gt;https://codeberg.org/martinarisk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinr92&quot;&gt;https://codeberg.org/martinr92&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/master_skylark&quot;&gt;https://codeberg.org/master_skylark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MayoDuckPie&quot;&gt;https://codeberg.org/MayoDuckPie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MerlijnWajer&quot;&gt;https://codeberg.org/MerlijnWajer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mf-in-mun&quot;&gt;https://codeberg.org/mf-in-mun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/michaelsasser&quot;&gt;https://codeberg.org/michaelsasser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micw&quot;&gt;https://codeberg.org/micw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mike710shine&quot;&gt;https://codeberg.org/mike710shine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/milimarg&quot;&gt;https://codeberg.org/milimarg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mnalis&quot;&gt;https://codeberg.org/mnalis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moonglum&quot;&gt;https://codeberg.org/moonglum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nclm&quot;&gt;https://codeberg.org/nclm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/networkException&quot;&gt;https://codeberg.org/networkException&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nightfurysl2001&quot;&gt;https://codeberg.org/nightfurysl2001&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nihilist1&quot;&gt;https://codeberg.org/nihilist1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/niklaskorz&quot;&gt;https://codeberg.org/niklaskorz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nilsph&quot;&gt;https://codeberg.org/nilsph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oscarotero&quot;&gt;https://codeberg.org/oscarotero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pboguslawski&quot;&gt;https://codeberg.org/pboguslawski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pedroberg&quot;&gt;https://codeberg.org/pedroberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pixelcode&quot;&gt;https://codeberg.org/pixelcode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pomp&quot;&gt;https://codeberg.org/pomp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Qippur&quot;&gt;https://codeberg.org/Qippur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/quokka&quot;&gt;https://codeberg.org/quokka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rawkode&quot;&gt;https://codeberg.org/rawkode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rdsq&quot;&gt;https://codeberg.org/rdsq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/regalialong&quot;&gt;https://codeberg.org/regalialong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Rirusha&quot;&gt;https://codeberg.org/Rirusha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/robsonwaves&quot;&gt;https://codeberg.org/robsonwaves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sawntoe&quot;&gt;https://codeberg.org/sawntoe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/serendipty01&quot;&gt;https://codeberg.org/serendipty01&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SergeTheEngi&quot;&gt;https://codeberg.org/SergeTheEngi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/seyfu-t&quot;&gt;https://codeberg.org/seyfu-t&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sheik&quot;&gt;https://codeberg.org/sheik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skyper&quot;&gt;https://codeberg.org/Skyper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slatian&quot;&gt;https://codeberg.org/slatian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smartclip_tim&quot;&gt;https://codeberg.org/smartclip_tim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smichel17&quot;&gt;https://codeberg.org/smichel17&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sneakers-the-rat&quot;&gt;https://codeberg.org/sneakers-the-rat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tarneaux&quot;&gt;https://codeberg.org/tarneaux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tebriel&quot;&gt;https://codeberg.org/tebriel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TechnologyClassroom&quot;&gt;https://codeberg.org/TechnologyClassroom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tecosaur&quot;&gt;https://codeberg.org/tecosaur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/theoryshaw&quot;&gt;https://codeberg.org/theoryshaw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timdeluxe&quot;&gt;https://codeberg.org/timdeluxe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tomkarho&quot;&gt;https://codeberg.org/tomkarho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toras9000&quot;&gt;https://codeberg.org/toras9000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmaster&quot;&gt;https://codeberg.org/tuxmaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VagabondAzulien&quot;&gt;https://codeberg.org/VagabondAzulien&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VaiTon&quot;&gt;https://codeberg.org/VaiTon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vfosnar&quot;&gt;https://codeberg.org/vfosnar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/virtulis&quot;&gt;https://codeberg.org/virtulis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vlw&quot;&gt;https://codeberg.org/vlw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/volkan&quot;&gt;https://codeberg.org/volkan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vroyer&quot;&gt;https://codeberg.org/vroyer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vsz&quot;&gt;https://codeberg.org/vsz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/webbj&quot;&gt;https://codeberg.org/webbj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/winlogon&quot;&gt;https://codeberg.org/winlogon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/witcher&quot;&gt;https://codeberg.org/witcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolftune&quot;&gt;https://codeberg.org/wolftune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wongandj&quot;&gt;https://codeberg.org/wongandj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wrenix&quot;&gt;https://codeberg.org/wrenix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xerbalind&quot;&gt;https://codeberg.org/xerbalind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xinnix&quot;&gt;https://codeberg.org/xinnix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xlionjuan&quot;&gt;https://codeberg.org/xlionjuan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeager&quot;&gt;https://codeberg.org/yeager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yurtpage&quot;&gt;https://codeberg.org/yurtpage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ZilloweZ&quot;&gt;https://codeberg.org/ZilloweZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zl4bv&quot;&gt;https://codeberg.org/zl4bv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo monthly report - May 2025</title><link>https://forgejo.org/2025-05-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2025-05-monthly-update/</guid><description>Ongoing issues with the Matrix chat room were addressed by recreating the room. Users are encouraged to join the new room, as the old room is deprecated. Security updates have been released for versions v11 and v7. Progress continues on the moderation feature funded by NLnet. Work on federated user activity continues, including the ability to follow Forgejo users from GoToSocial.</description><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Matrix chat room migration&lt;/h2&gt;
&lt;p&gt;We have been aware of problems with the Matrix chat room for some time.
These problems manifested in profile information (usernames and profile pictures) being randomly reset, and member permissions being changed.
This is due to state resets which are a &lt;a href=&quot;https://github.com/element-hq/synapse/issues/8629&quot;&gt;known bug&lt;/a&gt; in Matrix.&lt;/p&gt;
&lt;p&gt;Therefore, it was &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/332&quot;&gt;decided to recreate&lt;/a&gt; the Matrix room to solve these problems.
This was done on 24 May.
The &lt;strong&gt;old room is now officially deprecated&lt;/strong&gt;, so &lt;strong&gt;please join the new room&lt;/strong&gt; and continue communicating there.
After a transition period, access to the old room will be restricted and it will become read-only.&lt;/p&gt;
&lt;p&gt;You can find the new room under &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org?via=matrix.org&amp;amp;via=ccc.ac&amp;amp;via=tchncs.de&quot;&gt;#forgejo-chat:matrix.org&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo v11.0.1 and v7.0.15&lt;/h3&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues/23&quot;&gt;security update&lt;/a&gt; was released on 2 May 2025 for the two current LTS versions, v11 and v7.
This update resolves issues with uploading LFS files and a configured security key is now enforced for external accounts.&lt;/p&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations be upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Helm chart&lt;/h3&gt;
&lt;p&gt;Several minor and patch versions of v12 have been &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;released&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v12.5.1&quot;&gt;v12.5.1&lt;/a&gt; contains a bug fix related to OAuth configuration.
This fix was also backported to version 7 of the Helm chart and released with &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.1.12&quot;&gt;v7.1.12&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Minimum Git version&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/324&quot;&gt;discussion related to the minimum Git version&lt;/a&gt; required by Forgejo that began in March was concluded with a consensus.
The benefits of this are that supporting newer Git features requires less backward compatibility fallbacks and also provides clearer information on which version is supported.&lt;br /&gt;For Forgejo admins, this means that Forgejo will increase the required Git version with each LTS release (and only with LTS releases) to match the oldest Git version supported by &lt;a href=&quot;https://www.debian.org/releases/stable/&quot;&gt;Debian stable&lt;/a&gt; and &lt;a href=&quot;https://ubuntu.com/about/release-cycle&quot;&gt;Ubuntu LTS in &apos;Standard Support&apos;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Work on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4767&quot;&gt;federated user activity&lt;/a&gt; continued this month.
There has been progress on following a Forgejo user from GoToSocial.
Progress was also made on the reverse: following a GoToSocial user from Forgejo.&lt;/p&gt;
&lt;p&gt;Additionally, work on &lt;a href=&quot;https://code.forgejo.org/famfo/end-to-end/commits/branch/gts-testing&quot;&gt;end-to-end testing&lt;/a&gt; was carried out.
This is intended to ensure that the introduced federation capabilities can be automatically tested, thereby preventing potential regressions in the future.&lt;/p&gt;
&lt;h2&gt;User interface&lt;/h2&gt;
&lt;p&gt;This month was packed with housekeeping tasks, such as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7898&quot;&gt;removing old and unused CSS&lt;/a&gt; and making &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7822&quot;&gt;general improvements to the hashboxes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There were also quality-of-life changes, such as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7872&quot;&gt;disabling autocapitalization and autocorrect&lt;/a&gt; for username fields and ensuring that the activity heatmap &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7893&quot;&gt;displays really old activity correctly&lt;/a&gt;, as well as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7947&quot;&gt;adding messages to otherwise empty user cards&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;This month, approximately 47 contributors were active, including 13 newcomers - an increase of 7 contributors and a decrease of 2 compared to April.
Notably, this marks a higher engagement than in May 2024, indicating a healthy growth trend.
However, year-to-year comparisons will become more meaningful in the coming months, as we were still in a ramp-up phase during this time last year.&lt;/p&gt;
&lt;p&gt;Additionally, we are excited to announce the addition of a &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/256&quot;&gt;new team member&lt;/a&gt; for Finnish at the end of April.
This has led to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/compare/8bbac4c679bea930c74849c355a60ed3c52f8eb5...e2278e5a38187a1dc84dc41d583ec8b44e7257c1?files=options/locale/locale_fi-FI.ini#diff-fafc0a3c427e9a0265804ee234b8699d8da3a4cd&quot;&gt;significant refactoring and an overall increase in completeness&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;Work on the moderation feature, which is funded by NLnet, continued.
Task F, which is part of the &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2022-12-01-nlnet/2025-02-07-extended-workplan.md#amendment-of-the-workplan&quot;&gt;amended work plan&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6977&quot;&gt;has been implemented&lt;/a&gt;.
This gives users the option of reporting inappropriate content to the instance admin.
There are still &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=120787&quot;&gt;multiple open tasks&lt;/a&gt; for the moderation feature, but progress is steady.&lt;/p&gt;
&lt;p&gt;Another part of the fund is &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2022-12-01-nlnet/2025-02-07-extended-workplan.md#task-e-documentation-update&quot;&gt;allocated to documentation updates&lt;/a&gt;.
As part of this, the Forgejo Actions documentation &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/1094&quot;&gt;is being rewritten&lt;/a&gt;.
The rewrite is currently in the review stage.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;h3&gt;Matrix moderation bot&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/the-draupnir-project/Draupnir&quot;&gt;Draupnir&lt;/a&gt; has &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/compare/cddfd04b04b1973cb48d8e743f3851780b44248b..ba3ab53c0b7d22f37294eb6a266b7431df9a744c&quot;&gt;been set up&lt;/a&gt; to simplify the fight against spam and other moderation tasks in &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;Matrix rooms&lt;/a&gt;, which are part of the Forgejo space.
It is a bot that offers tools for automated moderation as well as simplifications for manual moderation.
The Forgejo Moderation Team manages the bot in accordance with the moderation process.
Many thanks to the Draupnir team for their help and advice.&lt;/p&gt;
&lt;h3&gt;Crawlers hitting Forgejo instances&lt;/h3&gt;
&lt;p&gt;As already mentioned in the last blog post, Anubis &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/319&quot;&gt;has been deployed&lt;/a&gt; on Forgejo instances, which are part of the Forgejo infrastructure.
As a result, some users had problems with their RSS client because they could not solve the presented challenges.
The RSS routes have therefore &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/cca742b68a545bae290ebd8b8c1c106d5cf59a91&quot;&gt;been excluded&lt;/a&gt; from Anubis and are accessible again without any problems.&lt;/p&gt;
&lt;p&gt;If you want to know more or have insights to share, check out the discussion &quot;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320&quot;&gt;Crawlers hitting Forgejo instances - global abuse trend&lt;/a&gt;&quot;.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;Codeberg enables quota feature&lt;/h3&gt;
&lt;p&gt;With &lt;a href=&quot;https://forgejo.org/2024-10-release-v9-0/&quot;&gt;Forgejo v9&lt;/a&gt;, a &lt;a href=&quot;https://forgejo.org/docs/latest/admin/advanced/quota/&quot;&gt;soft-quota feature&lt;/a&gt; was introduced.
After some improvements were made in the meantime, like a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6602&quot;&gt;quota overview in the web interface&lt;/a&gt;, Codeberg decided to enable the feature on their instance.&lt;br /&gt;Read more about this in Codeberg&apos;s &lt;a href=&quot;https://blog.codeberg.org/new-storage-limits-on-codeberg-what-you-need-to-know.html&quot;&gt;dedicated blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.
The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/2franix&quot;&gt;https://codeberg.org/2franix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/8xLGyCLz&quot;&gt;https://codeberg.org/8xLGyCLz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ada4a&quot;&gt;https://codeberg.org/ada4a&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/albundy83&quot;&gt;https://codeberg.org/albundy83&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aleksi&quot;&gt;https://codeberg.org/aleksi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex619829&quot;&gt;https://codeberg.org/Alex619829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ams42&quot;&gt;https://codeberg.org/ams42&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/annoyingusername&quot;&gt;https://codeberg.org/annoyingusername&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/antaanimosity&quot;&gt;https://codeberg.org/antaanimosity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/antki&quot;&gt;https://codeberg.org/antki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/apteryx&quot;&gt;https://codeberg.org/apteryx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aral&quot;&gt;https://codeberg.org/aral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Athozus&quot;&gt;https://codeberg.org/Athozus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atul_Eterno&quot;&gt;https://codeberg.org/Atul_Eterno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avesst&quot;&gt;https://codeberg.org/avesst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BaumiCoder&quot;&gt;https://codeberg.org/BaumiCoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bbastin&quot;&gt;https://codeberg.org/bbastin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bibu5&quot;&gt;https://codeberg.org/bibu5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bkil&quot;&gt;https://codeberg.org/bkil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/blechlawine&quot;&gt;https://codeberg.org/blechlawine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bmorel&quot;&gt;https://codeberg.org/bmorel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brechtvl&quot;&gt;https://codeberg.org/brechtvl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brian6932&quot;&gt;https://codeberg.org/brian6932&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/c8h4&quot;&gt;https://codeberg.org/c8h4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/camillo&quot;&gt;https://codeberg.org/camillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ChandanTeekinavar&quot;&gt;https://codeberg.org/ChandanTeekinavar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chavacava&quot;&gt;https://codeberg.org/chavacava&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christopher-besch&quot;&gt;https://codeberg.org/christopher-besch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Chucky2401&quot;&gt;https://codeberg.org/Chucky2401&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/civodul&quot;&gt;https://codeberg.org/civodul&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/code-kungfu&quot;&gt;https://codeberg.org/code-kungfu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CodingMonkey&quot;&gt;https://codeberg.org/CodingMonkey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cometship&quot;&gt;https://codeberg.org/cometship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ConfusedOnCOFFEE&quot;&gt;https://codeberg.org/ConfusedOnCOFFEE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/coralpink&quot;&gt;https://codeberg.org/coralpink&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/correctmost&quot;&gt;https://codeberg.org/correctmost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crookm&quot;&gt;https://codeberg.org/crookm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Daksh2000&quot;&gt;https://codeberg.org/Daksh2000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danielhess219&quot;&gt;https://codeberg.org/danielhess219&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/docudoc&quot;&gt;https://codeberg.org/docudoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dovah-kiin&quot;&gt;https://codeberg.org/dovah-kiin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dploeger&quot;&gt;https://codeberg.org/dploeger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eest&quot;&gt;https://codeberg.org/eest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/endz&quot;&gt;https://codeberg.org/endz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/evrial&quot;&gt;https://codeberg.org/evrial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FermeLeLundi&quot;&gt;https://codeberg.org/FermeLeLundi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fiocobbs&quot;&gt;https://codeberg.org/fiocobbs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FirelightFlagboy&quot;&gt;https://codeberg.org/FirelightFlagboy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fito&quot;&gt;https://codeberg.org/fito&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fl4nn&quot;&gt;https://codeberg.org/fl4nn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forestjohnson&quot;&gt;https://codeberg.org/forestjohnson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/frankm&quot;&gt;https://codeberg.org/frankm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fraud&quot;&gt;https://codeberg.org/fraud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/frnmst&quot;&gt;https://codeberg.org/frnmst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gabriel-samfira&quot;&gt;https://codeberg.org/gabriel-samfira&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/geed8563&quot;&gt;https://codeberg.org/geed8563&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GiannosOB&quot;&gt;https://codeberg.org/GiannosOB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gnu1&quot;&gt;https://codeberg.org/Gnu1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Granular9241&quot;&gt;https://codeberg.org/Granular9241&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/guillerpsanchez&quot;&gt;https://codeberg.org/guillerpsanchez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwhitney&quot;&gt;https://codeberg.org/gwhitney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HamburgerJungeJr&quot;&gt;https://codeberg.org/HamburgerJungeJr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hiers&quot;&gt;https://codeberg.org/Hiers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hinrikus&quot;&gt;https://codeberg.org/hinrikus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hook&quot;&gt;https://codeberg.org/hook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hugoalh&quot;&gt;https://codeberg.org/hugoalh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/huskee&quot;&gt;https://codeberg.org/huskee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/IamLunchbox&quot;&gt;https://codeberg.org/IamLunchbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ilyas0Iks&quot;&gt;https://codeberg.org/Ilyas0Iks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Infernus&quot;&gt;https://codeberg.org/Infernus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/infinoid&quot;&gt;https://codeberg.org/infinoid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jayaddison&quot;&gt;https://codeberg.org/jayaddison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jcgl&quot;&gt;https://codeberg.org/jcgl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Jengro&quot;&gt;https://codeberg.org/Jengro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jfinkhaeuser&quot;&gt;https://codeberg.org/jfinkhaeuser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmaasing&quot;&gt;https://codeberg.org/jmaasing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Jolly_Good&quot;&gt;https://codeberg.org/Jolly_Good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JSchlarb&quot;&gt;https://codeberg.org/JSchlarb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/juju4&quot;&gt;https://codeberg.org/juju4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kalagane&quot;&gt;https://codeberg.org/kalagane&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kemitix&quot;&gt;https://codeberg.org/kemitix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/khaeru&quot;&gt;https://codeberg.org/khaeru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kilimnik&quot;&gt;https://codeberg.org/kilimnik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kipvandenbos&quot;&gt;https://codeberg.org/kipvandenbos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KiraRayne&quot;&gt;https://codeberg.org/KiraRayne&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kirrus&quot;&gt;https://codeberg.org/kirrus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kladky&quot;&gt;https://codeberg.org/Kladky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/klausfyhn&quot;&gt;https://codeberg.org/klausfyhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kramo&quot;&gt;https://codeberg.org/kramo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kryptonian&quot;&gt;https://codeberg.org/kryptonian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kwoot&quot;&gt;https://codeberg.org/kwoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/laptop&quot;&gt;https://codeberg.org/laptop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/limiting-factor&quot;&gt;https://codeberg.org/limiting-factor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lookshe&quot;&gt;https://codeberg.org/lookshe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LordMZTE&quot;&gt;https://codeberg.org/LordMZTE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lorenzop&quot;&gt;https://codeberg.org/lorenzop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/luzifer&quot;&gt;https://codeberg.org/luzifer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/magicfelix&quot;&gt;https://codeberg.org/magicfelix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahiso&quot;&gt;https://codeberg.org/mahiso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maks1mS&quot;&gt;https://codeberg.org/Maks1mS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mariell&quot;&gt;https://codeberg.org/mariell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matteofranceschini&quot;&gt;https://codeberg.org/matteofranceschini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/melezhik&quot;&gt;https://codeberg.org/melezhik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Menelion&quot;&gt;https://codeberg.org/Menelion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mewp&quot;&gt;https://codeberg.org/mewp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MGChecker&quot;&gt;https://codeberg.org/MGChecker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Miguel_PL&quot;&gt;https://codeberg.org/Miguel_PL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mike710shine&quot;&gt;https://codeberg.org/mike710shine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/milimarg&quot;&gt;https://codeberg.org/milimarg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mimsee&quot;&gt;https://codeberg.org/mimsee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mmeier&quot;&gt;https://codeberg.org/mmeier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Moiety&quot;&gt;https://codeberg.org/Moiety&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moonglum&quot;&gt;https://codeberg.org/moonglum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mwaddoups&quot;&gt;https://codeberg.org/mwaddoups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nekoedges&quot;&gt;https://codeberg.org/nekoedges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Neureka&quot;&gt;https://codeberg.org/Neureka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NickP&quot;&gt;https://codeberg.org/NickP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nlannuzel&quot;&gt;https://codeberg.org/nlannuzel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/noneangel&quot;&gt;https://codeberg.org/noneangel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nyx_lyb3ra&quot;&gt;https://codeberg.org/nyx_lyb3ra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oscarotero&quot;&gt;https://codeberg.org/oscarotero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/otf31&quot;&gt;https://codeberg.org/otf31&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paspflue&quot;&gt;https://codeberg.org/paspflue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pastk&quot;&gt;https://codeberg.org/pastk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pboguslawski&quot;&gt;https://codeberg.org/pboguslawski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pep&quot;&gt;https://codeberg.org/pep&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pixelcode&quot;&gt;https://codeberg.org/pixelcode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Pneuma&quot;&gt;https://codeberg.org/Pneuma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pomp&quot;&gt;https://codeberg.org/pomp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/puzzle-it-nu&quot;&gt;https://codeberg.org/puzzle-it-nu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ricky-Tigg&quot;&gt;https://codeberg.org/Ricky-Tigg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RMM&quot;&gt;https://codeberg.org/RMM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rmsc&quot;&gt;https://codeberg.org/rmsc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/robsonwaves&quot;&gt;https://codeberg.org/robsonwaves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rosenpapazov&quot;&gt;https://codeberg.org/rosenpapazov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ruikkaa&quot;&gt;https://codeberg.org/ruikkaa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvba&quot;&gt;https://codeberg.org/rvba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryanlerch&quot;&gt;https://codeberg.org/ryanlerch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scMarkus&quot;&gt;https://codeberg.org/scMarkus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SilverRainZ&quot;&gt;https://codeberg.org/SilverRainZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skyper&quot;&gt;https://codeberg.org/Skyper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slatian&quot;&gt;https://codeberg.org/slatian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SludgePhD&quot;&gt;https://codeberg.org/SludgePhD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smlxdesign&quot;&gt;https://codeberg.org/smlxdesign&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sneakers-the-rat&quot;&gt;https://codeberg.org/sneakers-the-rat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/soc&quot;&gt;https://codeberg.org/soc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stop5&quot;&gt;https://codeberg.org/stop5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strega-nil&quot;&gt;https://codeberg.org/strega-nil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strobeltobias&quot;&gt;https://codeberg.org/strobeltobias&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sujiba&quot;&gt;https://codeberg.org/sujiba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tag&quot;&gt;https://codeberg.org/tag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tardich&quot;&gt;https://codeberg.org/tardich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tengkuizdihar&quot;&gt;https://codeberg.org/tengkuizdihar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Thalian&quot;&gt;https://codeberg.org/Thalian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thodorisl&quot;&gt;https://codeberg.org/thodorisl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thosea&quot;&gt;https://codeberg.org/thosea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timdeluxe&quot;&gt;https://codeberg.org/timdeluxe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timotheyca&quot;&gt;https://codeberg.org/timotheyca&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tobiasBora&quot;&gt;https://codeberg.org/tobiasBora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TobiasUdtke&quot;&gt;https://codeberg.org/TobiasUdtke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toolforger&quot;&gt;https://codeberg.org/toolforger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tunmiam&quot;&gt;https://codeberg.org/tunmiam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tusooa&quot;&gt;https://codeberg.org/tusooa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmaster&quot;&gt;https://codeberg.org/tuxmaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unlogic&quot;&gt;https://codeberg.org/unlogic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/urda&quot;&gt;https://codeberg.org/urda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vetlehh&quot;&gt;https://codeberg.org/vetlehh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/virtulis&quot;&gt;https://codeberg.org/virtulis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VVD&quot;&gt;https://codeberg.org/VVD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/watertime&quot;&gt;https://codeberg.org/watertime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/witcher&quot;&gt;https://codeberg.org/witcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolcen&quot;&gt;https://codeberg.org/wolcen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolftune&quot;&gt;https://codeberg.org/wolftune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/XeroX&quot;&gt;https://codeberg.org/XeroX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xlionjuan&quot;&gt;https://codeberg.org/xlionjuan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Yaourt&quot;&gt;https://codeberg.org/Yaourt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Yushu&quot;&gt;https://codeberg.org/Yushu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ZilloweZ&quot;&gt;https://codeberg.org/ZilloweZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zloidemon&quot;&gt;https://codeberg.org/zloidemon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo monthly report - April 2025</title><link>https://forgejo.org/2025-04-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2025-04-monthly-update/</guid><description>Forgejo is now featured on the official Git website. Forgejo v11.0 was released on 16 April following quick fixes for identified regressions. The Helm chart was updated to version 12 for compatibility. Federation work continues on HTTP signatures and following user activity. The infrastructure faced SSH connection failures and excessive crawling.</description><pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;h3&gt;Forgejo v11.0&lt;/h3&gt;
&lt;p&gt;It has been a few weeks since &lt;a href=&quot;https://forgejo.org/2025-04-release-v11-0/&quot;&gt;Forgejo v11.0&lt;/a&gt; was released and Codeberg upgraded a little later.
Preliminary testing by developers who upgraded their own instances before the release date revealed a few regressions that were fixed quickly, resulting in a on-time release on 16 April 2025.
Some users encountered minor issues unrelated to the release, and the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/9323&quot;&gt;release notes&lt;/a&gt; have been updated to document the fixes (e.g. a case of an internal Alpine container change that is not backward compatible).&lt;/p&gt;
&lt;p&gt;Forgejo Actions related work led to an &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/7567&quot;&gt;undocumented default&lt;/a&gt; that broke workflows relying on it.
This may have been fixed for backward compatibility, but Forgejo Actions is still in an experimental stage, so supporting undocumented behaviors wouldn&apos;t be sustainable.
Nevertheless, every effort is being made to ensure that all changes to Forgejo Action are backward compatible and the &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/actions&quot;&gt;end-to-end testing&lt;/a&gt; is constantly being improved to increase coverage.&lt;/p&gt;
&lt;p&gt;There is additional pressure on this release because it is the second &lt;a href=&quot;https://forgejo.org/docs/latest/admin/release-schedule/&quot;&gt;LTS release&lt;/a&gt;.
Along with upgrades from Forgejo v10.0, there will be upgrades from v7.0, which may cause their own issues.
So far, all reported upgrades have been successful, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/7349&quot;&gt;except one&lt;/a&gt;.
An instance was migrated to v7.0 and from PostgreSQL to SQLite.
Migrating from one database to another is &lt;a href=&quot;https://forgejo.org/docs/next/admin/installation/database-preparation/&quot;&gt;not advertised as supported&lt;/a&gt;, but it is a common misconception that an SQL dump and the associated table schema can be used with any SQL database.
In this case, the Forgejo instance worked, but due to the unexpected format of the SQL table schema, migrations gradually corrupted its definition.
It was possible to restore and upgrade the instance with some manual work, but this is not something you want to try yourself.&lt;/p&gt;
&lt;h3&gt;Security releases v11.0.1 and v7.0.15&lt;/h3&gt;
&lt;p&gt;There will be a &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues/23&quot;&gt;security update&lt;/a&gt; for the two current LTS versions, v11 and v7, on 2 May 2025.
We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Helm chart v12&lt;/h3&gt;
&lt;p&gt;After the release of Forgejo v11.0, the helm chart was updated to &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v12.0.0&quot;&gt;version 12&lt;/a&gt; a day later to ensure compatibility with the latest major Forgejo release.
In addition, the release is no longer published to &lt;a href=&quot;https://code.forgejo.org/forgejo-contrib/forgejo-helm&quot;&gt;https://code.forgejo.org/forgejo-contrib/forgejo-helm&lt;/a&gt; and several dependencies have been updated.
In addition, there have been &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v12.3.0&quot;&gt;minor releases&lt;/a&gt; adding support for Anubis to make it &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/pulls/1208#issue-6989&quot;&gt;easier to use&lt;/a&gt; Anubis.
Work has also &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/pulls/1209&quot;&gt;started&lt;/a&gt; on replacing Redis with &lt;a href=&quot;https://valkey.io/&quot;&gt;Valkey&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Call for help&lt;/h2&gt;
&lt;h3&gt;Accessibility and usability&lt;/h3&gt;
&lt;p&gt;Contributions to Forgejo are growing steadily, but the human effort to maintain it doesn&apos;t seem to be growing proportionally.
Achieving high quality in Forgejo is a goal, but this also requires reviewing pull requests for accessibility and regressions in usability.&lt;/p&gt;
&lt;p&gt;Currently, the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#accessibility&quot;&gt;accessibility&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#user-research&quot;&gt;user research&lt;/a&gt; teams are understaffed.
So if you have some spare time and are interested in these topics, we would appreciate your help to make Forgejo even better and more inclusive.
Please have a look at the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/323&quot;&gt;call for help&lt;/a&gt; if you are interested.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;For a high-level overview, check out the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Earlier this month a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7035&quot;&gt;PR&lt;/a&gt; about enabling &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/commit/9605b4f308e4686eba77c85da86494c7dba9d99c/doc/http-sig-validation.md&quot;&gt;HTTP signatures&lt;/a&gt; on all ActivityPub endpoints was merged.
HTTP signatures in the context of ActivityPub are often required to interact with a server for authentication and moderation purposes.
This merged PR provides an important foundation for further federation work.&lt;/p&gt;
&lt;p&gt;In addition, work resumed on the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4767&quot;&gt;pull request&lt;/a&gt; from last year that implements following user activities.
This will provide support for following a forgejo user from an ActivityPub server and receiving their activity in the feed.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/commit/c89728df2e8ce2ed9fea4d3bf58d840cfbd0761f/2025/2025-04-01-nlnet-ngi0-commons&quot;&gt;new grant application&lt;/a&gt; has been submitted for the April 2025 NLnet funding round.
Several contributors have applied for a total of €50,000 to complete various tasks.
We intend to work on improved moderation tooling, better Git LFS support, making our themes more accessible, and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/131&quot;&gt;overhauling the contributor workflow&lt;/a&gt;.
We expect to hear a decision on this application in a few months.&lt;/p&gt;
&lt;p&gt;Funded work on the moderation tooling has continued, and we hope to complete all remaining tasks from previous grants soon.&lt;/p&gt;
&lt;h2&gt;User interface&lt;/h2&gt;
&lt;p&gt;New improvements to the user interface were merged, making it more modern, consistent and accessible.
Some highlights include a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7481&quot;&gt;reworked switch&lt;/a&gt; between comment editor modes and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7616&quot;&gt;change to the pagination buttons&lt;/a&gt; to ensure that screen readers announce them correctly.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;h3&gt;SSH connection failures&lt;/h3&gt;
&lt;p&gt;Not long after &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;https://code.forgejo.org/&lt;/a&gt; was upgraded to run the Forgejo v11.0 release candidate, &lt;a href=&quot;https://code.forgejo.org/infrastructure/k8s-cluster/issues/408&quot;&gt;intermittent SSH connection failures&lt;/a&gt; were noticed.
It took a few days to realize that the problem was not client-side, but server-side: trying to &lt;code&gt;git fetch&lt;/code&gt; a repository every 30 seconds would fail at least once an hour for a few minutes.
This was frequent enough to start looking for the root cause.&lt;/p&gt;
&lt;p&gt;A number of theories were considered, ranging from a v11.0 regression to a client-side bug mistaken for server-side behavior.
Finally, it was suggested that the cause might be &lt;a href=&quot;https://github.com/openssh/openssh-portable/blob/master/srclimit.c&quot;&gt;OpenSSH&apos;s built-in&lt;/a&gt; mechanism to terminate a connection early if it comes from an IP with a history of abuse, such as an excessive number of failed login attempts.&lt;/p&gt;
&lt;p&gt;SSH connections to &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;https://code.forgejo.org/&lt;/a&gt; are &lt;a href=&quot;https://doc.traefik.io/traefik/v3.1/routing/providers/kubernetes-crd/#kind-ingressroutetcp&quot;&gt;reverse proxied&lt;/a&gt;, and all connections to the OpenSSH server originate from the same internal (IPv4 or IPv6) IP.
It follows that if a bot tries to brute force the SSH port, it will count against these internal IPs, and if the server decides that&apos;s too much, it will effectively block everyone for a few minutes by blocking a single IP.
The problem is not new, and such intermittent outages have been occurring since &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;https://code.forgejo.org/&lt;/a&gt; migrated to the k8s cluster.
It was only recently that they became more frequent and people started to notice.&lt;/p&gt;
&lt;p&gt;The chosen solution was to disable OpenSSH&apos;s built-in rate limiting feature altogether (&lt;code&gt;PerSourcePenalties no&lt;/code&gt;) and rely instead on the reverse proxy that sits in front of OpenSSH.
This is &lt;a href=&quot;https://github.com/traefik/traefik/issues/5999&quot;&gt;not without its challenges&lt;/a&gt;, but it is where such a feature belongs instead of being implemented in every service (OpenSSH, Forgejo, etc.) in a different and sometimes unexpected way.&lt;/p&gt;
&lt;h3&gt;Crawlers hitting Forgejo instances&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320&quot;&gt;discussion about the global trend of excessive crawling&lt;/a&gt; hitting Forgejo instances continued as &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;https://code.forgejo.org/&lt;/a&gt; continues &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/331&quot;&gt;to be hit&lt;/a&gt; by waves of up to 600,000 unique IPs per day.
Thanks to improvements to the &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster&quot;&gt;k8s infrastructure&lt;/a&gt; since the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/297&quot;&gt;February event&lt;/a&gt;, it held up and there was no downtime.&lt;/p&gt;
&lt;p&gt;Analysis of this month&apos;s event (and various experiments) over ten days revealed the following&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This is a case of &lt;strong&gt;excessive crawling rather than a DDoS&lt;/strong&gt;, as it continued at the same pace without impacting service availability.&lt;/li&gt;
&lt;li&gt;Most of the millions of unique &lt;strong&gt;IPs involved are from &lt;a href=&quot;https://www.orangecyberdefense.com/global/blog/research/residential-proxies&quot;&gt;residential proxy providers&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;This is not cheap&lt;/strong&gt;: 10TB of data was sent over 10 days, exceeding &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320#issuecomment-3857304&quot;&gt;all advertised proxy provider&lt;/a&gt; plans.
This is a competitive market where users, voluntarily or through malicious applications, contribute their private IPs and bandwidth in exchange for an estimated $0.1 per GB, which is then sold to the customer for profit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These findings do not provide clarity on why such excessive crawling occurs, how it is funded, or by whom.
However, they are useful in eliminating some speculation.
For example, the theory that an individual or organization maliciously tries to increase the load of a Forgejo instance out of anger.
This would be plausible if it cost a hundred USD or less.
It is very unlikely if it costs at least thousands of USD and requires a non-standard contract with a private proxy provider.&lt;/p&gt;
&lt;p&gt;While experimenting, some Forgejo users were blocked on 26 April when attempting to block hundreds of &lt;a href=&quot;https://code.forgejo.org/forgejo/ipranges/&quot;&gt;IP ranges&lt;/a&gt;.
Hundreds of IPs in the same range as them were being used for crawling, and they got caught in the middle.
This is a concrete example of how effective residential proxy providers are.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/319&quot;&gt;Anubis&lt;/a&gt; has been &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/src/commit/1e71d03e233cf6cd0a5ddafedc9e40fbebc29484/flux/apps/base/forgejo-next/forgejo/forgejo.yaml#L86-L122&quot;&gt;deployed&lt;/a&gt; on &lt;a href=&quot;https://try.next.forgejo.org/&quot;&gt;https://try.next.forgejo.org/&lt;/a&gt; and &lt;a href=&quot;https://dev.next.forgejo.org/&quot;&gt;https://dev.next.forgejo.org/&lt;/a&gt;.
The instances are victims of excessive crawling and this will reduce the pressure on the Forgejo infrastructure.
This was made &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/commit/1e71d03e233cf6cd0a5ddafedc9e40fbebc29484&quot;&gt;easy&lt;/a&gt; by leveraging new features of the latest &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v12.3.0&quot;&gt;Forgejo helm 12.3.0 release&lt;/a&gt;.
The goal is to eventually do the same on &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;https://code.forgejo.org/&lt;/a&gt; after gaining devops experience running Anubis, if only to &lt;a href=&quot;https://sourcehut.org/blog/2025-04-15-you-cannot-have-our-users-data/&quot;&gt;deny the data&lt;/a&gt; to the organization behind the excessive crawling.&lt;/p&gt;
&lt;p&gt;If you want to know more or have insights to share, check out the discussion &quot;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320&quot;&gt;Crawlers hitting Forgejo instances - global abuse trend&lt;/a&gt;&quot;.&lt;/p&gt;
&lt;h2&gt;Other&lt;/h2&gt;
&lt;h3&gt;Forgejo Contribution Workshop&lt;/h3&gt;
&lt;p&gt;On 27 April 2025, &lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;n0toose&lt;/a&gt; held a Forgejo Contribution Workshop at the &lt;a href=&quot;https://aachen.ccc.de/&quot;&gt;Chaos Computer Club Aachen e.V. (CCCAC)&lt;/a&gt;.
The workshop was held in person and four people attended.
It was a success and led to the discovery of some problems with the onboarding documentation.
In addition, it resulted in two completed PRs and some others that are currently in progress.
We welcome every new contributor to Forgejo!&lt;/p&gt;
&lt;p&gt;There are plans to repeat such a workshop in the future at other locations.&lt;/p&gt;
&lt;h3&gt;Talk about Federation&lt;/h3&gt;
&lt;p&gt;Jerger will &lt;a href=&quot;https://cfp.ctbk.de/fsck-2025/talk/3B38PB/&quot;&gt;give a talk&lt;/a&gt; &lt;strong&gt;in German&lt;/strong&gt; about the state of federation at the &lt;a href=&quot;https://wiki.ctbk.de/FSCK2025&quot;&gt;FSCK&lt;/a&gt; in Backnang, Germany.
It will be a short talk giving insights into the engine room, security considerations, challenges and the way forward.&lt;/p&gt;
&lt;p&gt;A recording should be available at &lt;a href=&quot;https://media.ccc.de/&quot;&gt;https://media.ccc.de/&lt;/a&gt; afterwards.&lt;/p&gt;
&lt;h3&gt;Recognition by the Git project&lt;/h3&gt;
&lt;p&gt;The official Git website, &lt;a href=&quot;https://git-scm.com/&quot;&gt;https://git-scm.com/&lt;/a&gt;, has undergone a &lt;a href=&quot;https://github.com/git/git-scm.com/pull/1986&quot;&gt;recent update&lt;/a&gt;.
The updated homepage now features a section highlighting various Forges.
This change prominently showcases the logos of Forgejo and Codeberg, highlighting the contribution to the broader Git ecosystem.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.
The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0x5f&quot;&gt;https://codeberg.org/0x5f&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/achyrva&quot;&gt;https://codeberg.org/achyrva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/acidbong&quot;&gt;https://codeberg.org/acidbong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adamu&quot;&gt;https://codeberg.org/adamu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aec&quot;&gt;https://codeberg.org/aec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alperen&quot;&gt;https://codeberg.org/alperen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Aminda&quot;&gt;https://codeberg.org/Aminda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/angelnu&quot;&gt;https://codeberg.org/angelnu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/antaanimosity&quot;&gt;https://codeberg.org/antaanimosity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arija&quot;&gt;https://codeberg.org/arija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atalanttore&quot;&gt;https://codeberg.org/Atalanttore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atemu&quot;&gt;https://codeberg.org/Atemu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/awiteb&quot;&gt;https://codeberg.org/awiteb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Baa&quot;&gt;https://codeberg.org/Baa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bbqrob&quot;&gt;https://codeberg.org/bbqrob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bjoernager&quot;&gt;https://codeberg.org/bjoernager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bkil&quot;&gt;https://codeberg.org/bkil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bmorel&quot;&gt;https://codeberg.org/bmorel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brechtvl&quot;&gt;https://codeberg.org/brechtvl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bziemons&quot;&gt;https://codeberg.org/bziemons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/camillo&quot;&gt;https://codeberg.org/camillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christopher-besch&quot;&gt;https://codeberg.org/christopher-besch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cobak78&quot;&gt;https://codeberg.org/cobak78&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cstaky&quot;&gt;https://codeberg.org/cstaky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darkswordreams&quot;&gt;https://codeberg.org/darkswordreams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dbat&quot;&gt;https://codeberg.org/dbat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DD-P&quot;&gt;https://codeberg.org/DD-P&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dejan&quot;&gt;https://codeberg.org/dejan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/devnewton&quot;&gt;https://codeberg.org/devnewton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dorianim&quot;&gt;https://codeberg.org/dorianim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dovah-kiin&quot;&gt;https://codeberg.org/dovah-kiin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dploeger&quot;&gt;https://codeberg.org/dploeger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dragast&quot;&gt;https://codeberg.org/dragast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EkaterinePapava&quot;&gt;https://codeberg.org/EkaterinePapava&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eloy&quot;&gt;https://codeberg.org/eloy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/faravah&quot;&gt;https://codeberg.org/faravah&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Felitendo&quot;&gt;https://codeberg.org/Felitendo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FileX&quot;&gt;https://codeberg.org/FileX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fito&quot;&gt;https://codeberg.org/fito&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fkiraly&quot;&gt;https://codeberg.org/fkiraly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forestjohnson&quot;&gt;https://codeberg.org/forestjohnson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/frankm&quot;&gt;https://codeberg.org/frankm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fraschm98&quot;&gt;https://codeberg.org/fraschm98&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/frnmst&quot;&gt;https://codeberg.org/frnmst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GewoonLeon&quot;&gt;https://codeberg.org/GewoonLeon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gnaaarwhal&quot;&gt;https://codeberg.org/Gnaaarwhal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gridhead&quot;&gt;https://codeberg.org/gridhead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gustavblass&quot;&gt;https://codeberg.org/gustavblass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwenya&quot;&gt;https://codeberg.org/gwenya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwhitney&quot;&gt;https://codeberg.org/gwhitney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hannesm&quot;&gt;https://codeberg.org/hannesm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hansi231&quot;&gt;https://codeberg.org/Hansi231&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/happwrap&quot;&gt;https://codeberg.org/happwrap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/harabat&quot;&gt;https://codeberg.org/harabat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HaraldToepfer&quot;&gt;https://codeberg.org/HaraldToepfer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hexa&quot;&gt;https://codeberg.org/hexa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HinoByte&quot;&gt;https://codeberg.org/HinoByte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HJVT&quot;&gt;https://codeberg.org/HJVT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hughrun&quot;&gt;https://codeberg.org/hughrun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/izzy&quot;&gt;https://codeberg.org/izzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jackc&quot;&gt;https://codeberg.org/jackc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jak2k&quot;&gt;https://codeberg.org/jak2k&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jcheatum&quot;&gt;https://codeberg.org/jcheatum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Jengro&quot;&gt;https://codeberg.org/Jengro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jexner&quot;&gt;https://codeberg.org/jexner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmjl&quot;&gt;https://codeberg.org/jmjl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jonzuka&quot;&gt;https://codeberg.org/jonzuka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JSchlarb&quot;&gt;https://codeberg.org/JSchlarb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justknow&quot;&gt;https://codeberg.org/justknow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kayprish&quot;&gt;https://codeberg.org/kayprish&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kbruen&quot;&gt;https://codeberg.org/kbruen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kibner&quot;&gt;https://codeberg.org/kibner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kidswiss&quot;&gt;https://codeberg.org/Kidswiss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kladky&quot;&gt;https://codeberg.org/Kladky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/klausfyhn&quot;&gt;https://codeberg.org/klausfyhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kokomo&quot;&gt;https://codeberg.org/Kokomo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/krisavi&quot;&gt;https://codeberg.org/krisavi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kryptonian&quot;&gt;https://codeberg.org/kryptonian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kwoot&quot;&gt;https://codeberg.org/kwoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lachstec&quot;&gt;https://codeberg.org/Lachstec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LinuxUserGD&quot;&gt;https://codeberg.org/LinuxUserGD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/litchipi&quot;&gt;https://codeberg.org/litchipi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ltning&quot;&gt;https://codeberg.org/ltning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lucasmz&quot;&gt;https://codeberg.org/lucasmz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maartenbeeckmans&quot;&gt;https://codeberg.org/maartenbeeckmans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maks1mS&quot;&gt;https://codeberg.org/Maks1mS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/markturney&quot;&gt;https://codeberg.org/markturney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Matlib&quot;&gt;https://codeberg.org/Matlib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mayaleeeeee&quot;&gt;https://codeberg.org/Mayaleeeeee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mdk&quot;&gt;https://codeberg.org/mdk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meaz&quot;&gt;https://codeberg.org/meaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Menelion&quot;&gt;https://codeberg.org/Menelion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mengzhuo&quot;&gt;https://codeberg.org/mengzhuo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MerlijnWajer&quot;&gt;https://codeberg.org/MerlijnWajer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mez&quot;&gt;https://codeberg.org/Mez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mibar&quot;&gt;https://codeberg.org/mibar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Miguel_PL&quot;&gt;https://codeberg.org/Miguel_PL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirkoperillo&quot;&gt;https://codeberg.org/mirkoperillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mmorais&quot;&gt;https://codeberg.org/mmorais&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mnalis&quot;&gt;https://codeberg.org/mnalis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moonglum&quot;&gt;https://codeberg.org/moonglum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mpsijm&quot;&gt;https://codeberg.org/mpsijm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Naxdy&quot;&gt;https://codeberg.org/Naxdy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neighborsbear&quot;&gt;https://codeberg.org/neighborsbear&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nekoedges&quot;&gt;https://codeberg.org/nekoedges&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nikolayKeniston&quot;&gt;https://codeberg.org/nikolayKeniston&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NormPlum&quot;&gt;https://codeberg.org/NormPlum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nostar&quot;&gt;https://codeberg.org/nostar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/omenos&quot;&gt;https://codeberg.org/omenos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/onitake&quot;&gt;https://codeberg.org/onitake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oscarotero&quot;&gt;https://codeberg.org/oscarotero&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/otf31&quot;&gt;https://codeberg.org/otf31&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paspflue&quot;&gt;https://codeberg.org/paspflue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pastk&quot;&gt;https://codeberg.org/pastk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pboguslawski&quot;&gt;https://codeberg.org/pboguslawski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pennersr&quot;&gt;https://codeberg.org/pennersr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pep&quot;&gt;https://codeberg.org/pep&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PeterDaveHello&quot;&gt;https://codeberg.org/PeterDaveHello&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pixelcode&quot;&gt;https://codeberg.org/pixelcode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Pneuma&quot;&gt;https://codeberg.org/Pneuma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/polyfloyd&quot;&gt;https://codeberg.org/polyfloyd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Porrumentzio&quot;&gt;https://codeberg.org/Porrumentzio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ProjectPatatoe&quot;&gt;https://codeberg.org/ProjectPatatoe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/puzzle-it-nu&quot;&gt;https://codeberg.org/puzzle-it-nu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/radon512&quot;&gt;https://codeberg.org/radon512&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rarogcmex&quot;&gt;https://codeberg.org/rarogcmex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rfc2549&quot;&gt;https://codeberg.org/rfc2549&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ringofstorms&quot;&gt;https://codeberg.org/ringofstorms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ripple_prozac&quot;&gt;https://codeberg.org/ripple_prozac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RivenSkaye&quot;&gt;https://codeberg.org/RivenSkaye&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RokeJulianLockhart&quot;&gt;https://codeberg.org/RokeJulianLockhart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvba&quot;&gt;https://codeberg.org/rvba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryanlerch&quot;&gt;https://codeberg.org/ryanlerch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sandro&quot;&gt;https://codeberg.org/sandro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sandwitch&quot;&gt;https://codeberg.org/sandwitch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sawntoe&quot;&gt;https://codeberg.org/sawntoe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/senekor&quot;&gt;https://codeberg.org/senekor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ShadowPeo&quot;&gt;https://codeberg.org/ShadowPeo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Shuroii&quot;&gt;https://codeberg.org/Shuroii&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skyper&quot;&gt;https://codeberg.org/Skyper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slatian&quot;&gt;https://codeberg.org/slatian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/spiffyk&quot;&gt;https://codeberg.org/spiffyk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stephanm&quot;&gt;https://codeberg.org/stephanm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stku&quot;&gt;https://codeberg.org/stku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tag&quot;&gt;https://codeberg.org/tag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tebriel&quot;&gt;https://codeberg.org/tebriel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tecosaur&quot;&gt;https://codeberg.org/tecosaur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/themandalorian&quot;&gt;https://codeberg.org/themandalorian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toolforger&quot;&gt;https://codeberg.org/toolforger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toras9000&quot;&gt;https://codeberg.org/toras9000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tpoisseau&quot;&gt;https://codeberg.org/tpoisseau&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unikitty&quot;&gt;https://codeberg.org/unikitty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ver4a&quot;&gt;https://codeberg.org/ver4a&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vroyer&quot;&gt;https://codeberg.org/vroyer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/webfly2&quot;&gt;https://codeberg.org/webfly2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/whytf&quot;&gt;https://codeberg.org/whytf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolftune&quot;&gt;https://codeberg.org/wolftune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/XOYZ69&quot;&gt;https://codeberg.org/XOYZ69&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yuki0iq&quot;&gt;https://codeberg.org/yuki0iq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yurtpage&quot;&gt;https://codeberg.org/yurtpage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zerica&quot;&gt;https://codeberg.org/zerica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zeridon&quot;&gt;https://codeberg.org/zeridon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zloidemon&quot;&gt;https://codeberg.org/zloidemon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zokki&quot;&gt;https://codeberg.org/zokki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo v11.0 is available</title><link>https://forgejo.org/2025-04-release-v11-0/</link><guid isPermaLink="true">https://forgejo.org/2025-04-release-v11-0/</guid><description>Forgejo v11.0 is available. It comes with a number of new features and improvements making user experience more convenient and productive. It features a new UI language, easy access token regeneration, better search options, and makes it possible to download entire folders in one click. As an LTS version, it will be supported until 15 July 2026.</description><pubDate>Wed, 16 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v11.0&lt;/a&gt; was released on 16 April 2025. You will find a short selection of the changes it introduces below and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/9323&quot;&gt;complete list in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release marks the end of life for the previous stable version v10. The LTS series Forgejo v7 is still supported until 16 July 2025. Forgejo v11.0 will be supported until &lt;a href=&quot;https://forgejo.org/docs/next/admin/release-schedule/&quot;&gt;15 July 2026&lt;/a&gt;, when Forgejo v16.0 is published. Admins of Forgejo instances with version v10 are recommended to prepare for an upgrade in time so that applying potential future security patches does not involve a major upgrade.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://v11.next.forgejo.org/&quot;&gt;dedicated test instance&lt;/a&gt; is available to try it out. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v11.0/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/9323&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;in the chat room&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Forgejo v11.0 is the second LTS (Long Term Support) release, following &lt;a href=&quot;https://forgejo.org/2024-04-release-v7-0/&quot;&gt;v7.0 published in April 2024&lt;/a&gt;. It is the preferred choice for instances that value stability more than newer features published quarterly. Forgejo v7.0 will be supported for three more months, until &lt;a href=&quot;https://forgejo.org/docs/next/admin/release-schedule/&quot;&gt;16 July 2025&lt;/a&gt;, an overlap that allows Forgejo admins to upgrade on their own time.&lt;/p&gt;
&lt;p&gt;In addition to this blog post, the blog posts of the releases published since v7.0 contain the highlights of the changes that an instance upgrading directly from v7.0 to v11.0 will benefit from.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/2024-07-release-v8-0/&quot;&gt;v8.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/2024-10-release-v9-0/&quot;&gt;v9.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/2025-01-release-v10-0/&quot;&gt;v10.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;New features&lt;/h2&gt;
&lt;p&gt;Below is short selection of the most notable changes. The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/9323&quot;&gt;complete list is available in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6602&quot;&gt;PR&lt;/a&gt;: user interface to see an overview of the quotas.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6963&quot;&gt;PR&lt;/a&gt;: add the ability to regenerate access tokens.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7030&quot;&gt;PR&lt;/a&gt;: welcome screen for user dashboard. It is shown when there&apos;s no activity in the feed and can also be customized by instance admins.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6863&quot;&gt;PR&lt;/a&gt;: display to maintainers in PR when it is editable.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6952&quot;&gt;PR&lt;/a&gt;: adds the following boolean operators for searching issues when using an indexer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;+term&lt;/code&gt;: &lt;code&gt;term&lt;/code&gt; MUST be present for any result&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-term&lt;/code&gt;: negation; exclude results that contain &lt;code&gt;term&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&quot;this is a term&quot;&lt;/code&gt;: matches the exact phrase &lt;code&gt;this is a term&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In all cases the special characters can be escaped by prefixing them with &lt;code&gt;\&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6300&quot;&gt;PR&lt;/a&gt;: add API endpoints with the ability to search for Forgejo Actions jobs (repo, org and global level).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Container images based on Alpine 3.21&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/11&quot;&gt;v11 container images&lt;/a&gt; are &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v11.0/forgejo/Dockerfile#L54&quot;&gt;built&lt;/a&gt; from the latest &lt;a href=&quot;https://www.alpinelinux.org/posts/Alpine-3.18.12-3.19.7-3.20.6-3.21.3-released.html&quot;&gt;Alpine 3.21 patch release&lt;/a&gt;. It includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=git&amp;amp;branch=v3.21&quot;&gt;Git 2.47&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=gnupg&amp;amp;branch=v3.21&quot;&gt;GnuPG 2.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=sqlite&amp;amp;branch=v3.21&quot;&gt;SQLite 3.48&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=openssh&amp;amp;branch=v3.21&quot;&gt;OpenSSH 9.9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Autoscaling capabilities and k8s&lt;/h2&gt;
&lt;p&gt;End of 2024, &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/241&quot;&gt;a discussion on autoscaling&lt;/a&gt; was initiated by a team that is growing, and the workloads they run on Forgejo Actions were increasing. To meet these demands, they needed to increase parallelization when running jobs without unnecessarily blocking or over-provisioning resources. Moving to an autoscaling model would help them achieve this, ensuring that resources are only allocated when there are tasks to process.&lt;/p&gt;
&lt;p&gt;Here are the key points:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pending tasks&lt;ul&gt;
&lt;li&gt;To enable autoscaling for Forgejo runners, Forgejo itself needs to provide a way to obtain the number of tasks waiting to be executed.&lt;/li&gt;
&lt;li&gt;Conversations started with &lt;a href=&quot;https://www.cncf.io/projects/keda/&quot;&gt;KEDA&lt;/a&gt; contributors to create a PR where you can define a Forgejo autoscalers based on these pending tasks.&lt;/li&gt;
&lt;li&gt;These tasks should be accessible at the organization, user, and repository levels and will match how you configure the autoscaler.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Forgejo Runner lifecycle change&lt;ul&gt;
&lt;li&gt;Forgejo runners operate as persistent daemons. To better integrate with KEDA job autoscaling it was proposed to change the runner lifecycle to function as jobs instead of long-running processes.&lt;/li&gt;
&lt;li&gt;An experimental fork of the actual runners existed and added a new command on the code to execute all tasks and exit.&lt;/li&gt;
&lt;li&gt;This allowed runners to scale to 0 when no jobs are running, optimizing resource usage in dynamic environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This project was concluded early 2025 and is available both in Forgejo v11.0 and the Forgejo runner v6.3.1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/1073&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6300&quot;&gt;Forgejo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/423&quot;&gt;Forgejo runner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Release schedule and Long Term Support&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;/docs/v11.0/admin/release-schedule/&quot;&gt;time based release schedule&lt;/a&gt; was established to publish a release every three months. Patch releases will be published more frequently, depending on the severity of the bug or security fixes they contain.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;7.0 (LTS)&lt;/td&gt;
&lt;td&gt;23 April 2024&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2025&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.0&lt;/td&gt;
&lt;td&gt;16 January 2025&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.0 (LTS)&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;15 July 2026&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;11.0-test daily releases&lt;/h3&gt;
&lt;p&gt;Releases are built daily from the latest changes found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v11.0/forgejo&quot;&gt;v11.0/forgejo&lt;/a&gt; development branch. They are deployed to the &lt;a href=&quot;https://v11.next.forgejo.org&quot;&gt;https://v11.next.forgejo.org&lt;/a&gt; instance for manual verification in case a bug fix is of particular interest ahead of the next patch release. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/11.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/11.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v11.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their names are staying the same but they are replaced by new builds every day.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;Forgejo is now available in Danish! The work was started and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7287&quot;&gt;completed&lt;/a&gt; by Tacaly with help of other contributors and coordinated by the localization team.&lt;/p&gt;
&lt;p&gt;This release is the first to be shipped with a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6203&quot;&gt;new format&lt;/a&gt; for storing translations better suited for this purpose, enabling better translatability, easier integration with external tooling and better defined syntax. This version supports both new and legacy formats and mostly relies on the latter. A more significant impact of this change is expected to be seen in upcoming versions of Forgejo.&lt;/p&gt;
&lt;h2&gt;Get Forgejo v11.0&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&quot;/download/&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/9323&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/9323&quot;&gt;breaking bug fixes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v11.0.0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/11.0.0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/11.0&quot;&gt;&lt;code&gt;11.0&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;11.0.Y&lt;/code&gt; patch release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v11.0/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
&lt;h3&gt;Donate&lt;/h3&gt;
&lt;p&gt;Forgejo is proud to be &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/&quot;&gt;funded transparently&lt;/a&gt;. Additionally, it accept donations &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;through Liberapay&lt;/a&gt;. It is also possible to &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donate to Codeberg e.V.&lt;/a&gt; in case the Liberapay option does not work out for you, and part of the funding is used to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/#forgejo-resources-per-year&quot;&gt;compensate for work on Forgejo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, the Liberapay team allows for money to go directly to developers without a round-trip to Codeberg. Additionally, Liberapay allows for a steady and reliable funding stream next to other options, a crucial aspect for the project. The distribution of funds through Liberapay is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;transparently controlled using the decision-making process&lt;/a&gt;, and Forgejo contributors are encouraged to consider applying to benefit from this funding opportunity.&lt;/p&gt;
&lt;p&gt;Thank you for using Forgejo and considering a donation, in case your financial situation allows you to.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - March 2025</title><link>https://forgejo.org/2025-03-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2025-03-monthly-update/</guid><description>Forgejo v11.0 is on track for release on 16 April 2025. New versions of v7.0 and v10.0 have been released. Improvements to the availability of Forgejo actions have been completed and the Forgejo runner has received new versions. The DDoS attack on code.forgejo.org has ceased and precautions have been taken for the future.</description><pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month.
If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Forgejo v11.0 on its way&lt;/h2&gt;
&lt;p&gt;The Forgejo v11.0 branch was cut on 26 March 2025 as &lt;a href=&quot;https://forgejo.org/docs/next/admin/release-schedule/&quot;&gt;planned&lt;/a&gt; for the target release date of 16 April 2025.
It is the second major release prepared with the &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager&quot;&gt;Forgejo release manager&lt;/a&gt;.
It was not quite right yet, and &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager/commit/a869b10fc24c2e5f588595d41af812c7ff79c435&quot;&gt;the sequence of automated and manually steps&lt;/a&gt; has been rearranged for clarity.
There is still a lot of room for automation, but the bits that are in place (cutting branches in git, setting new branch protection, archiving backport labels and creating new ones, etc.) already save valuable human time.&lt;/p&gt;
&lt;p&gt;Forgejo v11.0 will be an LTS release and will therefore receive security updates for at least a year.
However, this also means that the old LTS release v7.0 is approaching the end of support.
The end of life for Forgejo v7.0 is scheduled for 16 July 2025.
You should therefore be prepared to upgrade your instance if you are running version 7.0.&lt;/p&gt;
&lt;h2&gt;Forgejo v7.0.14, v10.0.2 and v10.0.3&lt;/h2&gt;
&lt;p&gt;Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v7.0.14&quot;&gt;v7.0.14&lt;/a&gt; has been released on 19 March 2025.
This release is part of the LTS release cycle and contains &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/release-notes-published/7.0.14.md&quot;&gt;two bug fixes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On 21 March 2025, Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v10.0.2&quot;&gt;v10.0.2&lt;/a&gt; has been released.
This release contains several bug fixes, but also introduced a regression that caused unnecessary escaping of URLs.
Symptoms were e.g. not being able to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/7294&quot;&gt;access theme files if they contained a space&lt;/a&gt; or &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/7292&quot;&gt;double escaping of links&lt;/a&gt;.
Work to fix this regression started immediately after receiving the report and was fixed in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v10.0.3&quot;&gt;v10.0.3&lt;/a&gt;, which was released on 23 March 2025.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm&quot;&gt;Helm chart&lt;/a&gt; for the use of Forgejo in k8s has been &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;updated&lt;/a&gt; according to the Forgejo releases.&lt;/p&gt;
&lt;h2&gt;Forgejo runner&lt;/h2&gt;
&lt;p&gt;Two new versions (&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v6.3.0&quot;&gt;v6.3.0&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v6.3.1&quot;&gt;v6.3.1&lt;/a&gt;) of the Forgejo runner have been released.
The latest version v6.3.1 was released on &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v6.3.1&quot;&gt;24 March 2025&lt;/a&gt;.
Version v6.3 contains &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#6-3-1&quot;&gt;a security fix related to caches&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition, a blog post is being drafted that summarizes the findings of the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/204&quot;&gt;security audit&lt;/a&gt; that began last year and explains how they relate to the latest security fixes.&lt;/p&gt;
&lt;h2&gt;Accessibility and usability&lt;/h2&gt;
&lt;p&gt;Contributions to Forgejo are growing steadily, but the human effort to maintain it doesn&apos;t seem to be growing proportionally.
Achieving high quality in Forgejo is a goal, but this also requires reviewing pull requests for accessibility and regressions in usability.&lt;/p&gt;
&lt;p&gt;Currently, the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#accessibility&quot;&gt;accessibility&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#user-research&quot;&gt;user research&lt;/a&gt; teams are understaffed.
So if you have some spare time and are interested in these topics, we would appreciate your help to make Forgejo even better and more inclusive.
Please have a look at the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/323&quot;&gt;call for help&lt;/a&gt; if you are interested.&lt;/p&gt;
&lt;h2&gt;code.forgejo.org downtime&lt;/h2&gt;
&lt;p&gt;An incident occurred on 3 March that caused &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;code.forgejo.org&lt;/a&gt; to be unavailable for 7 hours.
This was the longest downtime since September 2024, all others lasted less than 10 minutes.
The cause is still unknown and it shouldn&apos;t happen again: k8s has been modified to restart Forgejo if it goes down for a long time.
The pattern of this bug is unknown and has not reappeared since.&lt;/p&gt;
&lt;h2&gt;Improved Forgejo actions availability&lt;/h2&gt;
&lt;p&gt;The last step of a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/220&quot;&gt;major effort&lt;/a&gt; to improve the availability of the Forgejo actions repositories has been completed.
It started with moving the infrastructure to a &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/&quot;&gt;k8s cluster&lt;/a&gt; and was completed this month with making the actions available as read-only repositories.
The setup is based on a &lt;a href=&quot;https://git-scm.com/docs/git-http-backend&quot;&gt;git-http-backend&lt;/a&gt; behind an &lt;a href=&quot;https://git-scm.com/docs/git-http-backend&quot;&gt;apache2 server&lt;/a&gt; that is publicly exposed through a &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/src/commit/fba6c80f4fba390a2aa3a6b744988d1156375608/flux/apps/forgejo-code/git-mirror.yaml&quot;&gt;traefik reverse proxy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This improves the availability of &lt;a href=&quot;https://data.forgejo.org/&quot;&gt;data.forgejo.org&lt;/a&gt; because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is not affected by the DDoS or excessive crawling that recently hit &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;code.forgejo.org&lt;/a&gt;, as it does not provide a web interface, only &lt;a href=&quot;https://git-scm.com/book/be/v2/Git-on-the-Server-Smart-HTTP&quot;&gt;Git Smart HTTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;It is independent of code.forgejo.org and simpler (no authentication, read-only)&lt;/li&gt;
&lt;li&gt;There are two servers at all times.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As DDoS and excessive crawling &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320&quot;&gt;intensify in 2025&lt;/a&gt;, and the likelihood of &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;code.forgejo.org&lt;/a&gt; becoming slow or even unavailable increases, these changes will prevent the Forgejo runner workflows that need to &lt;code&gt;git clone&lt;/code&gt; actions such as &lt;a href=&quot;https://code.forgejo.org/actions/checkout&quot;&gt;actions/checkout&lt;/a&gt; or &lt;a href=&quot;https://code.forgejo.org/docker/build-push-action/&quot;&gt;docker/build-push-action&lt;/a&gt; from being affected.&lt;/p&gt;
&lt;h2&gt;OCI registries rate limiting&lt;/h2&gt;
&lt;p&gt;The Forgejo runner relies heavily on OCI images.
They are cached locally when possible, but they eventually hit the registry and can run into rate limiting.
Last year the Forgejo CI was interrupted because the host was rate limited by &lt;a href=&quot;https://docs.docker.com/docker-hub/&quot;&gt;Docker Hub&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/oci/-/packages&quot;&gt;mirrors&lt;/a&gt; were set up to work around the problem.
It took a while to change all the references, but it has been months since a rate-limiting problem has surfaced.&lt;/p&gt;
&lt;p&gt;A critical moment will come on 1 April 2025, when an even tighter rate limit will be &lt;a href=&quot;https://docs.docker.com/docker-hub/usage/&quot;&gt;imposed by Docker Hub&lt;/a&gt;.
If some references were overlooked, disruptions may occur.&lt;/p&gt;
&lt;h2&gt;DDoS on code.forgejo.org and crawlers&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/2025-02-monthly-update/#ddos-on-codeforgejoorg&quot;&gt;DDoS that hit code.forgejo.org&lt;/a&gt; last month has not returned, and the IP ranges that were blocked are no longer blocked.
They mostly covered residential areas, not data centers.
The ranges could have been used by a virus activated on a network-connected device connecting from a residential home.
There&apos;s really no way to tell, and it didn&apos;t feel right to continue blocking a large number of IPs, as one of them could belong to a real Forgejo user.&lt;/p&gt;
&lt;p&gt;In recent weeks, a growing number of Free Software-related projects (&lt;a href=&quot;https://web.archive.org/web/20260101121924/https://social.kernel.org/notice/AqJkUigsjad3gQc664&quot;&gt;LWN&lt;/a&gt;, &lt;a href=&quot;https://blog.sysopscafe.com/posts/ai-crawlers-hammering-git-repos/&quot;&gt;FreeBSD&lt;/a&gt;, &lt;a href=&quot;https://www.scrye.com/blogs/nirik/posts/2025/03/15/mid-march-infra-bits-2025/&quot;&gt;Pagure&lt;/a&gt;, etc.) have reported similar problems, and there is an &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/320&quot;&gt;ongoing discussion&lt;/a&gt; collecting comments and links to what seems to be a global trend in 2025.&lt;/p&gt;
&lt;p&gt;This month there was excessive and anonymous crawling by a previously known offender using a different set of IP ranges.
This was dealt with quickly as usual by &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/src/commit/fba6c80f4fba390a2aa3a6b744988d1156375608/flux/apps/forgejo-code/forgejo-route.yaml#L45&quot;&gt;blocking a few IP ranges&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In an effort to improve monitoring of the cluster, &lt;a href=&quot;https://headlamp.dev/&quot;&gt;Headlamp&lt;/a&gt; has been added to the cluster, displaying &lt;a href=&quot;https://prometheus.io/&quot;&gt;prometheus&lt;/a&gt; graphs of the resource usage of the services running on the k8s cluster.
It is promising, but has yet to prove effective for forensic analysis and monitoring of ongoing and emerging problems.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;Improvements have been made to the merge workflow.
Previously, when merging pull requests, translation updates were squashed into a single commit.
This meant that Weblate components had to be temporarily locked, and it&apos;s internal Git branch had to be reset each time.
This month, the &lt;a href=&quot;https://docs.weblate.org/en/weblate-5.10.2/admin/addons.html#squash-git-commits&quot;&gt;squash add-on&lt;/a&gt; was installed so that Weblate always produces a single squashed commit.
This change has made merging pull requests safer, with fewer additional actions.
The documentation &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/1118&quot;&gt;has been updated&lt;/a&gt; to reflect this.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7278&quot;&gt;new linter&lt;/a&gt; has been introduced to verify that all translation keys used are present in at least the base language.
By default, this linter issues warnings and has already identified several &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7109#issuecomment-2918305&quot;&gt;missing translations&lt;/a&gt;.
This is a valuable addition to the existing testing requirements for new features or fixes and improves the overall quality.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://translate.codeberg.org/projects/forgejo/-/da/&quot;&gt;Danish translation&lt;/a&gt; is now complete.
The work was started by Tacaly in December 2024 and took about 3 months to complete with the help of other contributors.
It will be available in the UI with the v11.0 LTS release.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment.
We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature.
The following list of contributors is intended to reflect this diversity and to acknowledge all the contributions made over the past month.
If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0x5f&quot;&gt;https://codeberg.org/0x5f&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/1011&quot;&gt;https://codeberg.org/1011&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/8xLGyCLz&quot;&gt;https://codeberg.org/8xLGyCLz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/achyrva&quot;&gt;https://codeberg.org/achyrva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ajs124&quot;&gt;https://codeberg.org/ajs124&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alanmena&quot;&gt;https://codeberg.org/alanmena&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alex3305&quot;&gt;https://codeberg.org/alex3305&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alopez&quot;&gt;https://codeberg.org/alopez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alsutton&quot;&gt;https://codeberg.org/alsutton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andyquinterom&quot;&gt;https://codeberg.org/andyquinterom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anonymous&quot;&gt;https://codeberg.org/anonymous&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anschuetz&quot;&gt;https://codeberg.org/anschuetz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ArnaudLier&quot;&gt;https://codeberg.org/ArnaudLier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atalanttore&quot;&gt;https://codeberg.org/Atalanttore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/athrun&quot;&gt;https://codeberg.org/athrun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avesst&quot;&gt;https://codeberg.org/avesst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/axelsilverdew&quot;&gt;https://codeberg.org/axelsilverdew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Baempaieo&quot;&gt;https://codeberg.org/Baempaieo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/banaanihillo&quot;&gt;https://codeberg.org/banaanihillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/barrie&quot;&gt;https://codeberg.org/barrie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bbastin&quot;&gt;https://codeberg.org/bbastin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benjidial&quot;&gt;https://codeberg.org/benjidial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benniekiss&quot;&gt;https://codeberg.org/benniekiss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/billynoah&quot;&gt;https://codeberg.org/billynoah&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/blaahaj&quot;&gt;https://codeberg.org/blaahaj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buhtz&quot;&gt;https://codeberg.org/buhtz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bziemons&quot;&gt;https://codeberg.org/bziemons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cagrant&quot;&gt;https://codeberg.org/cagrant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CenTdemeern1&quot;&gt;https://codeberg.org/CenTdemeern1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cgzones&quot;&gt;https://codeberg.org/cgzones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/christopher-besch&quot;&gt;https://codeberg.org/christopher-besch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cobak78&quot;&gt;https://codeberg.org/cobak78&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cswimr&quot;&gt;https://codeberg.org/cswimr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cynosphere&quot;&gt;https://codeberg.org/Cynosphere&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dallyger&quot;&gt;https://codeberg.org/dallyger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/darin755&quot;&gt;https://codeberg.org/darin755&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davidche&quot;&gt;https://codeberg.org/davidche&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/detpikachu&quot;&gt;https://codeberg.org/detpikachu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/devnewton&quot;&gt;https://codeberg.org/devnewton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dsseng&quot;&gt;https://codeberg.org/dsseng&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eduardosm&quot;&gt;https://codeberg.org/eduardosm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eloy&quot;&gt;https://codeberg.org/eloy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eramirezinvx&quot;&gt;https://codeberg.org/eramirezinvx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eraviart&quot;&gt;https://codeberg.org/eraviart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/erikdesmedt&quot;&gt;https://codeberg.org/erikdesmedt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EssGeeEich&quot;&gt;https://codeberg.org/EssGeeEich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fareycircles&quot;&gt;https://codeberg.org/fareycircles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fauno&quot;&gt;https://codeberg.org/fauno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fio&quot;&gt;https://codeberg.org/fio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fito&quot;&gt;https://codeberg.org/fito&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fkooman&quot;&gt;https://codeberg.org/fkooman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fogti&quot;&gt;https://codeberg.org/fogti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/frnmst&quot;&gt;https://codeberg.org/frnmst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fschrempf&quot;&gt;https://codeberg.org/fschrempf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ftrueck&quot;&gt;https://codeberg.org/ftrueck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Furai&quot;&gt;https://codeberg.org/Furai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/furkangkhsn&quot;&gt;https://codeberg.org/furkangkhsn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/g-a-c&quot;&gt;https://codeberg.org/g-a-c&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gabriel-samfira&quot;&gt;https://codeberg.org/gabriel-samfira&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gh0stD3x&quot;&gt;https://codeberg.org/Gh0stD3x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gnaaarwhal&quot;&gt;https://codeberg.org/Gnaaarwhal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gondolyr&quot;&gt;https://codeberg.org/gondolyr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwenya&quot;&gt;https://codeberg.org/gwenya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwhitney&quot;&gt;https://codeberg.org/gwhitney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/h11736083&quot;&gt;https://codeberg.org/h11736083&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/halibut&quot;&gt;https://codeberg.org/halibut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Haui&quot;&gt;https://codeberg.org/Haui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hojerst&quot;&gt;https://codeberg.org/hojerst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/httpsterio&quot;&gt;https://codeberg.org/httpsterio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/huagang&quot;&gt;https://codeberg.org/huagang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hucksy&quot;&gt;https://codeberg.org/hucksy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ilyas0Iks&quot;&gt;https://codeberg.org/Ilyas0Iks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/izzy&quot;&gt;https://codeberg.org/izzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Jack252&quot;&gt;https://codeberg.org/Jack252&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadeprime&quot;&gt;https://codeberg.org/jadeprime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jank1619&quot;&gt;https://codeberg.org/jank1619&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jgarber&quot;&gt;https://codeberg.org/jgarber&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/julianmarcos&quot;&gt;https://codeberg.org/julianmarcos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jusko&quot;&gt;https://codeberg.org/jusko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwolvers&quot;&gt;https://codeberg.org/jwolvers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kemitix&quot;&gt;https://codeberg.org/kemitix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KFears&quot;&gt;https://codeberg.org/KFears&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kladky&quot;&gt;https://codeberg.org/Kladky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/klausfyhn&quot;&gt;https://codeberg.org/klausfyhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kokomo&quot;&gt;https://codeberg.org/Kokomo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kriffos&quot;&gt;https://codeberg.org/kriffos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kryptonian&quot;&gt;https://codeberg.org/kryptonian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kwoot&quot;&gt;https://codeberg.org/kwoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lectia&quot;&gt;https://codeberg.org/lectia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lennartS_lfb&quot;&gt;https://codeberg.org/lennartS_lfb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Link1J&quot;&gt;https://codeberg.org/Link1J&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/linos&quot;&gt;https://codeberg.org/linos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/linuxpython&quot;&gt;https://codeberg.org/linuxpython&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/litchipi&quot;&gt;https://codeberg.org/litchipi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lordwektabyte&quot;&gt;https://codeberg.org/lordwektabyte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lslalbai&quot;&gt;https://codeberg.org/lslalbai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/luxzi&quot;&gt;https://codeberg.org/luxzi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maletil&quot;&gt;https://codeberg.org/maletil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltejur&quot;&gt;https://codeberg.org/maltejur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mark22k&quot;&gt;https://codeberg.org/mark22k&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MarkL4YG&quot;&gt;https://codeberg.org/MarkL4YG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/markturney&quot;&gt;https://codeberg.org/markturney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Marti&quot;&gt;https://codeberg.org/Marti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martianh&quot;&gt;https://codeberg.org/martianh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Matlib&quot;&gt;https://codeberg.org/Matlib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Merith-TK&quot;&gt;https://codeberg.org/Merith-TK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfocko&quot;&gt;https://codeberg.org/mfocko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MGChecker&quot;&gt;https://codeberg.org/MGChecker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Miguel_PL&quot;&gt;https://codeberg.org/Miguel_PL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirkoperillo&quot;&gt;https://codeberg.org/mirkoperillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/misyl&quot;&gt;https://codeberg.org/misyl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mixed&quot;&gt;https://codeberg.org/mixed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mmarif&quot;&gt;https://codeberg.org/mmarif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/monty24&quot;&gt;https://codeberg.org/monty24&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moparisthebest&quot;&gt;https://codeberg.org/moparisthebest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msavoritias&quot;&gt;https://codeberg.org/msavoritias&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mst&quot;&gt;https://codeberg.org/mst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Musselman&quot;&gt;https://codeberg.org/Musselman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mverkleij&quot;&gt;https://codeberg.org/mverkleij&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nobodyinperson&quot;&gt;https://codeberg.org/nobodyinperson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nostar&quot;&gt;https://codeberg.org/nostar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nykula&quot;&gt;https://codeberg.org/nykula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/OrbitalMartian&quot;&gt;https://codeberg.org/OrbitalMartian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ozgur&quot;&gt;https://codeberg.org/ozgur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pastk&quot;&gt;https://codeberg.org/pastk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/philpep&quot;&gt;https://codeberg.org/philpep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pinjontall94&quot;&gt;https://codeberg.org/pinjontall94&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PlexSheep&quot;&gt;https://codeberg.org/PlexSheep&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pluhmen&quot;&gt;https://codeberg.org/pluhmen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ProjectPatatoe&quot;&gt;https://codeberg.org/ProjectPatatoe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/puer-robustus&quot;&gt;https://codeberg.org/puer-robustus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/r3pek&quot;&gt;https://codeberg.org/r3pek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rahrah&quot;&gt;https://codeberg.org/rahrah&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/reynir&quot;&gt;https://codeberg.org/reynir&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/richardhuxton&quot;&gt;https://codeberg.org/richardhuxton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/roughnecks&quot;&gt;https://codeberg.org/roughnecks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ruurd&quot;&gt;https://codeberg.org/ruurd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvba&quot;&gt;https://codeberg.org/rvba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryanlerch&quot;&gt;https://codeberg.org/ryanlerch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Sahtor&quot;&gt;https://codeberg.org/Sahtor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/seyfu-t&quot;&gt;https://codeberg.org/seyfu-t&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/silverpill&quot;&gt;https://codeberg.org/silverpill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sneakers-the-rat&quot;&gt;https://codeberg.org/sneakers-the-rat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/soc&quot;&gt;https://codeberg.org/soc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sosasees&quot;&gt;https://codeberg.org/sosasees&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stevenroose&quot;&gt;https://codeberg.org/stevenroose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stku&quot;&gt;https://codeberg.org/stku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stop5&quot;&gt;https://codeberg.org/stop5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strypey&quot;&gt;https://codeberg.org/strypey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/suikan4github&quot;&gt;https://codeberg.org/suikan4github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/the-real-herowl&quot;&gt;https://codeberg.org/the-real-herowl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thebigbone&quot;&gt;https://codeberg.org/thebigbone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/theoryshaw&quot;&gt;https://codeberg.org/theoryshaw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Thesola10&quot;&gt;https://codeberg.org/Thesola10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ThomasBoom89&quot;&gt;https://codeberg.org/ThomasBoom89&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thomasjwebb&quot;&gt;https://codeberg.org/thomasjwebb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tobru&quot;&gt;https://codeberg.org/tobru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/umglurf&quot;&gt;https://codeberg.org/umglurf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unikitty&quot;&gt;https://codeberg.org/unikitty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unixery&quot;&gt;https://codeberg.org/unixery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wookiefriseur&quot;&gt;https://codeberg.org/wookiefriseur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yaash&quot;&gt;https://codeberg.org/yaash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ytimenkov&quot;&gt;https://codeberg.org/ytimenkov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yuvi&quot;&gt;https://codeberg.org/yuvi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zloidemon&quot;&gt;https://codeberg.org/zloidemon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo monthly report - February 2025</title><link>https://forgejo.org/2025-02-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2025-02-monthly-update/</guid><description>FOSDEM impressions were published and feedback is being collected regarding migrations to Forgejo and commercial usages of Forgejo. code.forgejo.org got hit by a DDoS that was successfully mitigated. A new localization component is now in use and work on federation continued.</description><pubDate>Wed, 19 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2025-02-release-v10-0-1/&quot;&gt;Forgejo Security Releases v10.0.1 and v7.0.13 were published&lt;/a&gt; 8 February 2025 mainly for fixing permissions enforcement of Forgejo Actions and projects; few other bug fixes were also included.&lt;/p&gt;
&lt;p&gt;The Forgejo Helm chart had 4 bugfix &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;releases&lt;/a&gt;, 2 for each of both v11 and v7.&lt;/p&gt;
&lt;h2&gt;FOSDEM&lt;/h2&gt;
&lt;p&gt;As briefly mentioned in the last monthly report, some of the Forgejo developers have been to FOSDEM and met at the Codeberg+Forgejo stand. They met a lot of happy users, discussed ideas and code architecture and finally managed to meet each other in person.&lt;/p&gt;
&lt;p&gt;There have been meetings with other projects that are considering to move to Forgejo or became curious about the project. There has been more in-depths meeting with the people at Fedora and talks about future collaboration. Two Forgejo developers have been invited to dinner by Fedora, thank you for that!&lt;/p&gt;
&lt;p&gt;You can find a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/290&quot;&gt;discussion with more impressions from FOSDEM&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Moving to Forgejo&lt;/h2&gt;
&lt;p&gt;During FOSDEM, we have learned about many projects that are considering or planning a migration to Forgejo, but are blocked due to various aspects. These range from missing features to the need of help setting up or planning the migration. To help keep in touch with interested projects, coordinating migration assistance and tracking necessary additions to Forgejo, a &lt;a href=&quot;https://codeberg.org/forgejo-contrib/moving-to-forgejo/&quot;&gt;dedicated repository for migrations to Forgejo&lt;/a&gt; has been set up.&lt;/p&gt;
&lt;p&gt;If you have a success story to share about your usage of Forgejo, or if you have projects that you&apos;d like to see on Forgejo but that are not yet decided or blocked for some reason, feel free to submit to the tracker and let us know.&lt;/p&gt;
&lt;h2&gt;Forgejo for Enterprise&lt;/h2&gt;
&lt;p&gt;There is high interest in using a simple and lightweight Git forge for commercial projects. During FOSDEM, we have been surprised to learn about quite some big companies (&quot;off the recording&quot;) using Forgejo. However, many potential users are hesitating due to the perceived difficulty in finding commercial support for the software.&lt;/p&gt;
&lt;p&gt;Forgejo&apos;s ecosystem has several advantages to enterprise customers. Contrary to competing software such as the fully proprietary GitHub, the open core GitLab and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/102&quot;&gt;Gitea&lt;/a&gt;, there is no vendor lock in for Forgejo since is not under the control of a single organization. There is an inventory of &lt;a href=&quot;https://codeberg.org/forgejo/professional-services/issues&quot;&gt;professional service providers&lt;/a&gt; that slowly evolves to an ecosystem where Forgejo users can freely choose from depending on their needs and satisfaction.&lt;/p&gt;
&lt;p&gt;However, these advantages are not yet clearly used to attract customers, and open questions about the influence of business interest have to be discussed. A discussion issue about &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/308&quot;&gt;Forgejo for enterprise&lt;/a&gt; has been created for this purpose, tracking the status quo and potential improvements.&lt;/p&gt;
&lt;p&gt;If you are using Forgejo for commercial purpose, it might help us a lot if you (ask if you can) publicly write about your case as a success story. Let us know in the issue.&lt;/p&gt;
&lt;h2&gt;DDoS on code.forgejo.org&lt;/h2&gt;
&lt;p&gt;On &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/297&quot;&gt;9 February&lt;/a&gt;, code.forgejo.org got hit by a DDoS. To this day, it is still unclear if it was malicious or an excessive number of requests from a crawler.&lt;/p&gt;
&lt;p&gt;When code.forgejo.org timedout for the first time on that day, it was thought to be excessive crawling to be blocked, like a number of others in the past months. And indeed, such a crawler was quickly discovered by looking at the logs. It was not obeying &lt;code&gt;robots.txt&lt;/code&gt; and did not identify itself with a proper &lt;code&gt;User-Agent&lt;/code&gt; header. A small range of IP addresses was added to the existing block list.&lt;/p&gt;
&lt;p&gt;When code.forgejo.org timedout again that same day, it was suspected that some IPs of the range were missed. However, after analyzing the logs, it appeared that the large number of requests did not originate from a small number of IP addresses: they were coming from thousands of them.&lt;/p&gt;
&lt;p&gt;The k8s cluster hosting code.forgejo.org was setup at the end of 2024 and lacked good visibility on the incoming requests, which turned out to be a problem in this situation. While trying to figure this out, the DDoS slowed down code.forgejo.org so much that it stopped responding. The &lt;a href=&quot;https://status.forgejo.ovh/&quot;&gt;monitoring in place&lt;/a&gt; worked and rang the alarm of the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#devops&quot;&gt;devops team&lt;/a&gt;. However it recovered a few minutes later, as if the author of the DDoS was satisfied the service went down and left the scene.&lt;/p&gt;
&lt;p&gt;After two days of general slowness and occasional disruptions enough logs were collected and analyzed to conclude that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The DDoS happened in waves, a few hours apart.&lt;/li&gt;
&lt;li&gt;A wave had from 10,000 to 50,000 unique IPs, each sending an average of two requests.&lt;/li&gt;
&lt;li&gt;Between 200,000 and 300,000 unique IPs sent requests on a given day.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That was enough to try a simple mitigation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The IP ranges to which each IP belongs were collected (e.g. &lt;a href=&quot;https://stat.ripe.net/widget/whois#w.resource=1.7.64.1&quot;&gt;1.7.64.1&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;The top 500 IP ranges that contributed the most number of IPs to the DDoS were blocked.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This successfully stopped over 90% of the DDoS and code.forgejo.org recovered. However, blocking entire IP ranges, sometime millions of IPs at a time, was bound to also impact legitimate users. It was discovered on that occasion that the Golang proxies (keeping a copy of Go packages) are using a few different IP ranges and send requests from hundreds of different IPs. They were unblocked, as well as an individual contributor also blocked by accident.&lt;/p&gt;
&lt;p&gt;A week later, on &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/297#issuecomment-2842888&quot;&gt;18 February&lt;/a&gt;, the DDoS stopped as suddenly as it started. The number of unique IPs hitting code.forgejo.org went from over 200,000 daily to 15,000 overnight. That concluded a DDoS which used around one million unique IPs to hit code.forgejo.org.&lt;/p&gt;
&lt;h2&gt;DDoS mitigation&lt;/h2&gt;
&lt;p&gt;The mitigation of the above mentioned DDoS was hand made. It was surprising to discover that &lt;a href=&quot;https://traefik.io/&quot;&gt;Traefik&lt;/a&gt;, the reverse proxy used by the k8s cluster hosting code.forgejo.org, does not provide a method to compute and block the top most used IP ranges. It is a radical but effective measure, a practical way to keep the service afloat until the DDoS goes away.&lt;/p&gt;
&lt;p&gt;It took a few days to figure out and implement this mitigation, using a number of shell snippets and learning how IP ranges are distributed over the net. In the spirit of saving time to deal with a similar DDoS, an &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/6907&quot;&gt;implementation of this method was described&lt;/a&gt; to be part of Forgejo. But it does not belong in Forgejo: it should be implemented in a reverse proxy that sits in front and the idea was abandoned.&lt;/p&gt;
&lt;p&gt;A blocker to such an implementation was however resolved: figuring out the list of IP ranges currently in use worldwide. In theory it could be extracted from the same database that is used by &lt;a href=&quot;https://man.archlinux.org/man/whois.1&quot;&gt;whois&lt;/a&gt;. But some of the &lt;a href=&quot;https://www.arin.net/about/welcome/region/#regional-internet-registry-regions&quot;&gt;Regional Internet Registries (RIRs)&lt;/a&gt; publish their database under restrictive usage terms. Instead, the &lt;a href=&quot;https://ris.ripe.net/docs/mrt/#name-and-location&quot;&gt;Routing Information Base (RIB)&lt;/a&gt; used by BGP &lt;a href=&quot;https://code.forgejo.org/forgejo/ipranges/src/commit/1220c093240966b421170850d2323ba78ccc1312/.forgejo/workflows/release.yml&quot;&gt;is analyzed weekly&lt;/a&gt; and around 500,000 IP ranges are compiled and &lt;a href=&quot;https://code.forgejo.org/forgejo/ipranges&quot;&gt;published&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The next time a DDoS hits code.forgejo.org, the logs will be ready for forensic analysis. The &lt;a href=&quot;https://code.forgejo.org/forgejo/ipranges&quot;&gt;latest database of IP ranges&lt;/a&gt; will be used for blocking some of them, keeping the DDoS contained until it goes away.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/meeting-minutes/2025-02-21-dev-gathering.md&quot;&gt;second Federation Dev-Gathering&lt;/a&gt; took place on 21 February during which the attendees discussed about the current state and possible ways to involve more contributors in order to speed up the development. Also, an old &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5393&quot;&gt;PR&lt;/a&gt; for fixing federated stars in case of servers using allow lists for email domain was finally completed and merged while further work was done for unstar action (a first PR was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6740&quot;&gt;merged&lt;/a&gt; and another one is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/7035&quot;&gt;in progress&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;A new component &lt;code&gt;forgejo-next&lt;/code&gt; is now in use. Unlike the main component, this one uses JSON for storing strings. It is easier to parse and free of many quirks the INI format has. Currently it only has a few strings, but it suggested that new strings are now added to it. We&apos;ll also be moving old strings to it, to eventually get rid of the INI translations completely.&lt;/p&gt;
&lt;p&gt;With JSON format Forgejo now also supports language-specific plurals, making translator experience more pleasant and UI more cohesive for languages where there&apos;s different number of plurals than two. This improvement will be available in Forgejo v11.&lt;/p&gt;
&lt;p&gt;New translations have been started: &lt;a href=&quot;https://translate.codeberg.org/projects/forgejo/-/he/&quot;&gt;Hebrew&lt;/a&gt; and &lt;a href=&quot;https://translate.codeberg.org/projects/forgejo/-/ro/&quot;&gt;Romanian&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://nlnet.nl/&quot;&gt;NLnet&lt;/a&gt;, a dutch foundation devoted to the support of free/libre software development, agreed to extend a previous grant for Forgejo by a few months and repurpose the leftover budget. An &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/commit/22c15e2ef92585259c4c0000286845f1a160caef/2022-12-01-nlnet/2025-02-07-extended-workplan.md&quot;&gt;amendment workplan&lt;/a&gt; was agreed on and several contributors started working on it.&lt;/p&gt;
&lt;p&gt;The new tasks focus on improving the Forgejo documentation as well as bringing limited moderation capabilities (the option to report content to an instance&apos;s administrators). The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6977&quot;&gt;architecture and database structure has been agreed on&lt;/a&gt;. The next tasks include an admin UI. If you are moderating communities via other software or otherwise have valuable insights that could help us design the UX workflows for admins, feel free to let us know in the &lt;a href=&quot;https://codeberg.org/forgejo/design/issues/30&quot;&gt;corresponding design issue&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adriand&quot;&gt;https://codeberg.org/adriand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aimuz&quot;&gt;https://codeberg.org/aimuz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Albirew&quot;&gt;https://codeberg.org/Albirew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amearb&quot;&gt;https://codeberg.org/amearb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anonymous&quot;&gt;https://codeberg.org/anonymous&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anze&quot;&gt;https://codeberg.org/anze&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aogier&quot;&gt;https://codeberg.org/aogier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arija&quot;&gt;https://codeberg.org/arija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ArnaudLier&quot;&gt;https://codeberg.org/ArnaudLier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/asandikci&quot;&gt;https://codeberg.org/asandikci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashur_iraq&quot;&gt;https://codeberg.org/ashur_iraq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Aviac&quot;&gt;https://codeberg.org/Aviac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Baempaieo&quot;&gt;https://codeberg.org/Baempaieo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bakaroni&quot;&gt;https://codeberg.org/bakaroni&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Be.ing&quot;&gt;https://codeberg.org/Be.ing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/be4zad&quot;&gt;https://codeberg.org/be4zad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Berns&quot;&gt;https://codeberg.org/Berns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bntn&quot;&gt;https://codeberg.org/bntn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/boughtonp&quot;&gt;https://codeberg.org/boughtonp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brenard&quot;&gt;https://codeberg.org/brenard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BrunoBernardino&quot;&gt;https://codeberg.org/BrunoBernardino&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BtbN&quot;&gt;https://codeberg.org/BtbN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bvandevliet&quot;&gt;https://codeberg.org/bvandevliet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Carlos17Kopra&quot;&gt;https://codeberg.org/Carlos17Kopra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/carnivorecookies&quot;&gt;https://codeberg.org/carnivorecookies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Chealer&quot;&gt;https://codeberg.org/Chealer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cobak78&quot;&gt;https://codeberg.org/cobak78&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/comcloudway&quot;&gt;https://codeberg.org/comcloudway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ConfusedOnCOFFEE&quot;&gt;https://codeberg.org/ConfusedOnCOFFEE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/coralpink&quot;&gt;https://codeberg.org/coralpink&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cstaky&quot;&gt;https://codeberg.org/cstaky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cuboid&quot;&gt;https://codeberg.org/cuboid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dallyger&quot;&gt;https://codeberg.org/dallyger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/daniel-baumann&quot;&gt;https://codeberg.org/daniel-baumann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dejan&quot;&gt;https://codeberg.org/dejan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/denschub&quot;&gt;https://codeberg.org/denschub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/depeo&quot;&gt;https://codeberg.org/depeo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DKMellow&quot;&gt;https://codeberg.org/DKMellow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dreamboat9222&quot;&gt;https://codeberg.org/Dreamboat9222&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dsseng&quot;&gt;https://codeberg.org/dsseng&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/endernon&quot;&gt;https://codeberg.org/endernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/evie&quot;&gt;https://codeberg.org/evie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/evrial&quot;&gt;https://codeberg.org/evrial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fareycircles&quot;&gt;https://codeberg.org/fareycircles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fishwaldo&quot;&gt;https://codeberg.org/Fishwaldo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fkooman&quot;&gt;https://codeberg.org/fkooman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fvezzoli&quot;&gt;https://codeberg.org/fvezzoli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gedankenstuecke&quot;&gt;https://codeberg.org/gedankenstuecke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GKuhn&quot;&gt;https://codeberg.org/GKuhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GottemHams&quot;&gt;https://codeberg.org/GottemHams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gridhead&quot;&gt;https://codeberg.org/gridhead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwhitney&quot;&gt;https://codeberg.org/gwhitney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/henrysheehy&quot;&gt;https://codeberg.org/henrysheehy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hexa&quot;&gt;https://codeberg.org/hexa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hiraku&quot;&gt;https://codeberg.org/Hiraku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hugoalh&quot;&gt;https://codeberg.org/hugoalh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ika-roa&quot;&gt;https://codeberg.org/ika-roa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ikidd&quot;&gt;https://codeberg.org/ikidd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/IndieHum&quot;&gt;https://codeberg.org/IndieHum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/infinoid&quot;&gt;https://codeberg.org/infinoid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/izzy&quot;&gt;https://codeberg.org/izzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jacobwillden&quot;&gt;https://codeberg.org/jacobwillden&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadedctrl&quot;&gt;https://codeberg.org/jadedctrl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jahanson&quot;&gt;https://codeberg.org/jahanson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jankatins&quot;&gt;https://codeberg.org/jankatins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JeremyStarTM&quot;&gt;https://codeberg.org/JeremyStarTM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jinnatar&quot;&gt;https://codeberg.org/jinnatar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JorTurFer&quot;&gt;https://codeberg.org/JorTurFer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JuniorJPDJ&quot;&gt;https://codeberg.org/JuniorJPDJ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwijenbergh&quot;&gt;https://codeberg.org/jwijenbergh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kampka&quot;&gt;https://codeberg.org/kampka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kbruen&quot;&gt;https://codeberg.org/kbruen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kdh8219&quot;&gt;https://codeberg.org/kdh8219&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/khaeru&quot;&gt;https://codeberg.org/khaeru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kreamond&quot;&gt;https://codeberg.org/kreamond&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/laegnur&quot;&gt;https://codeberg.org/laegnur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lapo&quot;&gt;https://codeberg.org/lapo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ledyba&quot;&gt;https://codeberg.org/ledyba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/litchipi&quot;&gt;https://codeberg.org/litchipi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lynnesbian&quot;&gt;https://codeberg.org/lynnesbian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltejur&quot;&gt;https://codeberg.org/maltejur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltfield&quot;&gt;https://codeberg.org/maltfield&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maniues&quot;&gt;https://codeberg.org/Maniues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marat2509&quot;&gt;https://codeberg.org/marat2509&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MarkL4YG&quot;&gt;https://codeberg.org/MarkL4YG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martianh&quot;&gt;https://codeberg.org/martianh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matkoniecz&quot;&gt;https://codeberg.org/matkoniecz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mattie_sanz&quot;&gt;https://codeberg.org/mattie_sanz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mehrad&quot;&gt;https://codeberg.org/mehrad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meisam&quot;&gt;https://codeberg.org/meisam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mewp&quot;&gt;https://codeberg.org/mewp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mhughes9&quot;&gt;https://codeberg.org/mhughes9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Miguel_PL&quot;&gt;https://codeberg.org/Miguel_PL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirkoperillo&quot;&gt;https://codeberg.org/mirkoperillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mmarif&quot;&gt;https://codeberg.org/mmarif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MSalah73&quot;&gt;https://codeberg.org/MSalah73&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mstuehrenberg&quot;&gt;https://codeberg.org/mstuehrenberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mynacol&quot;&gt;https://codeberg.org/Mynacol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n2o&quot;&gt;https://codeberg.org/n2o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Neureka&quot;&gt;https://codeberg.org/Neureka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ng-dm&quot;&gt;https://codeberg.org/ng-dm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nicoco&quot;&gt;https://codeberg.org/nicoco&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nicou&quot;&gt;https://codeberg.org/nicou&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nitrousoxide&quot;&gt;https://codeberg.org/Nitrousoxide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/noiro&quot;&gt;https://codeberg.org/noiro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nvy&quot;&gt;https://codeberg.org/nvy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nykula&quot;&gt;https://codeberg.org/nykula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/otf31&quot;&gt;https://codeberg.org/otf31&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patka&quot;&gt;https://codeberg.org/patka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pietervdvn&quot;&gt;https://codeberg.org/pietervdvn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pipcet&quot;&gt;https://codeberg.org/pipcet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PlayBoxTech&quot;&gt;https://codeberg.org/PlayBoxTech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/puzzle-it-nu&quot;&gt;https://codeberg.org/puzzle-it-nu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/r-w-x&quot;&gt;https://codeberg.org/r-w-x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/raimue&quot;&gt;https://codeberg.org/raimue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RealEnder&quot;&gt;https://codeberg.org/RealEnder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rhbvkleef&quot;&gt;https://codeberg.org/rhbvkleef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ricky-Tigg&quot;&gt;https://codeberg.org/Ricky-Tigg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RonaldAJ&quot;&gt;https://codeberg.org/RonaldAJ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Routhinator&quot;&gt;https://codeberg.org/Routhinator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/runxiyu&quot;&gt;https://codeberg.org/runxiyu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvba&quot;&gt;https://codeberg.org/rvba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rwolters&quot;&gt;https://codeberg.org/rwolters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryanlerch&quot;&gt;https://codeberg.org/ryanlerch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s-l-s&quot;&gt;https://codeberg.org/s-l-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s1m&quot;&gt;https://codeberg.org/s1m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salim&quot;&gt;https://codeberg.org/salim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sandebert&quot;&gt;https://codeberg.org/sandebert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sarahjamielewis&quot;&gt;https://codeberg.org/sarahjamielewis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scMarkus&quot;&gt;https://codeberg.org/scMarkus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shgew&quot;&gt;https://codeberg.org/shgew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Slate3919&quot;&gt;https://codeberg.org/Slate3919&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sneakers-the-rat&quot;&gt;https://codeberg.org/sneakers-the-rat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/soc&quot;&gt;https://codeberg.org/soc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strk&quot;&gt;https://codeberg.org/strk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/superjamie&quot;&gt;https://codeberg.org/superjamie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ted423&quot;&gt;https://codeberg.org/ted423&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ThomasBoom89&quot;&gt;https://codeberg.org/ThomasBoom89&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thosea&quot;&gt;https://codeberg.org/thosea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Thyxus&quot;&gt;https://codeberg.org/Thyxus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tim-richter&quot;&gt;https://codeberg.org/tim-richter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tiran133&quot;&gt;https://codeberg.org/tiran133&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmaster&quot;&gt;https://codeberg.org/tuxmaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ty802&quot;&gt;https://codeberg.org/ty802&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unikitty&quot;&gt;https://codeberg.org/unikitty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unlogic&quot;&gt;https://codeberg.org/unlogic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/urda&quot;&gt;https://codeberg.org/urda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vibce&quot;&gt;https://codeberg.org/vibce&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/virtulis&quot;&gt;https://codeberg.org/virtulis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vpeltnt&quot;&gt;https://codeberg.org/vpeltnt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/waldyrious&quot;&gt;https://codeberg.org/waldyrious&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Werenter&quot;&gt;https://codeberg.org/Werenter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wvffle&quot;&gt;https://codeberg.org/wvffle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yaash&quot;&gt;https://codeberg.org/yaash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yarikoptic&quot;&gt;https://codeberg.org/yarikoptic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeager&quot;&gt;https://codeberg.org/yeager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yorunin&quot;&gt;https://codeberg.org/yorunin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zukka77&quot;&gt;https://codeberg.org/zukka77&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo monthly report - January 2025</title><link>https://forgejo.org/2025-01-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2025-01-monthly-update/</guid><description>New releases, improvements to the website and an update to the current state of federation in Forgejo. January was a productive month that ended in preparations to FOSDEM and allowed some team members to meet in real life for the first time.</description><pubDate>Tue, 11 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2025-01-release-v10-0/&quot;&gt;Forgejo v10.0.0 was published&lt;/a&gt; on 16 January, one day after the planned release date because &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/6575&quot;&gt;a regression&lt;/a&gt; was discovered at the last minute. Another issue surfaced a few days later, when migrating Forgejo instances that contained &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/6637&quot;&gt;orphaned records in a database table&lt;/a&gt;. Such records are not found in any test environment and do not prevent Forgejo from running, but they interfered with the upgrade of two instances. Fortunately, there is a rather simple workaround and the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6639&quot;&gt;doctor is now able to dispose of them&lt;/a&gt;. Codeberg was able to upgrade without incident a week later.&lt;/p&gt;
&lt;p&gt;The Forgejo release manager was &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager/commits/commit/8b19f663f41429f4c2e0f06a168a027670bb29b6&quot;&gt;improved on this occasion&lt;/a&gt;. The tasks that are common between patch releases and major releases (&lt;a href=&quot;https://code.forgejo.org/forgejo/release-tasks&quot;&gt;release-tasks&lt;/a&gt;, &lt;a href=&quot;https://code.forgejo.org/forgejo/release-announce&quot;&gt;release-announce&lt;/a&gt;, &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager/src/commit/8b19f663f41429f4c2e0f06a168a027670bb29b6/.forgejo/workflows&quot;&gt;etc...&lt;/a&gt;) were re-used as-is. There are still a number of items that need to be done manually and they can gradually be automated within this framework.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v6.2.1&quot;&gt;Forgejo runner v6&lt;/a&gt; major release was published continuing the effort to fix security issues and to bring it closer to a beta stage. It also contains &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/423&quot;&gt;support for ephemeral runners&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls/406&quot;&gt;force rebuilds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;new major release&lt;/a&gt; of the Forgejo helm chart was published 15 January. It contained &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/pulls/1056&quot;&gt;a regression&lt;/a&gt; that was fixed the next day, with &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v11.0.1&quot;&gt;11.0.1&lt;/a&gt;. It has &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v11.0.0&quot;&gt;a few breaking changes&lt;/a&gt; and defaults to using Forgejo v10.0.0. The &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.1.7&quot;&gt;Forgejo helm v7.1.7&lt;/a&gt; patch release to be used with Forgejo v7 was also published.&lt;/p&gt;
&lt;h2&gt;Translations&lt;/h2&gt;
&lt;p&gt;A PR initiating the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6203&quot;&gt;switch to a more flexible translation format&lt;/a&gt; has been merged, however, a bug was discovered in Weblate that prevented a new component from being used right away, seemingly because Forgejo is pioneering usage of go-i18-v2 format in Weblate. @Gusted figured it out and &lt;a href=&quot;https://github.com/translate/translate/pull/5471&quot;&gt;submitted a fix to upstream&lt;/a&gt;. It has been merged, but we&apos;re waiting for a Weblate update which will include that fix.&lt;/p&gt;
&lt;p&gt;Filipino translations were completed (thanks to the effort of @kita) in December 2024 and have been released for the first time in the v10 release in January. Similarly, Lower German is now available as a new language. Especially since there are comparatively few speakers, we are proud to be among the software projects available in these locales.&lt;/p&gt;
&lt;h2&gt;FOSDEM&lt;/h2&gt;
&lt;p&gt;Forgejo and Codeberg had a stand during &lt;a href=&quot;https://archive.fosdem.org/2025/&quot;&gt;FOSDEM&lt;/a&gt; February 1 and 2 in Brussels. We might go into details about this in the February update (because, well, apart from travelling there most of it happened in February anyway and we still need to wrap things up on our end). You can read and participate in our &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/290&quot;&gt;discussion about this year&apos;s FOSDEM&lt;/a&gt;, feel free to share your impressions.&lt;/p&gt;
&lt;p&gt;It was a pleasure talking to so many of you, and the first time many of our team members have seen each other in person. Thank you for your trust and support, and for distributing our stickers!&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;If you follow the Forgejo monthly reports, you might have noticed that we haven&apos;t written about federation recently, and some of you asked about it. We apologize for the omission, but rest assured: Federation is still a high priority and we haven&apos;t given up on it.&lt;/p&gt;
&lt;p&gt;Due to personal constraints, things have slowed down a little bit by the end of the year. With federated star, a first user-visible feature has been implemented and some follow-up PRs have been in development, but not yet merged. Federated unstar (which complements the starring of repos) will be the next task, but due to it being a little destructive, more backend work is happening. The developers briefly talked about this &lt;a href=&quot;https://archive.fosdem.org/2025/schedule/event/fosdem-2025-5610-show-and-tell-federation-at-forgejo/&quot;&gt;during their FOSDEM talk&lt;/a&gt; and first code was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6740&quot;&gt;submitted by the end of January&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo-contrib/federation/src/branch/main/FederationRoadmap.md&quot;&gt;federation roadmap was developed&lt;/a&gt; and discussed, which provides the next steps and their requirements to make federation useful in some capacity. There is commitment to complete some of these milestones in 2025.&lt;/p&gt;
&lt;p&gt;To ensure the federation project can move on regardless of limited funding capabilities, &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/215&quot;&gt;it was agreed to compensate the current federation maintainers for maintenance jobs&lt;/a&gt; such as code review and onboarding with up to € 500 / month. This ensures that community contributions to federation can be reviewed and merged quickly. The funding was &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/72&quot;&gt;provided to Forgejo by Codeberg e.V.&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Website and documentation&lt;/h2&gt;
&lt;p&gt;Forgejo actions were implemented to check for spelling mistakes upon pull requests, both for &lt;a href=&quot;https://codeberg.org/forgejo/docs/src/commit/42520fbfa70ab020817d7b91e0711890109e301a/.forgejo/workflows/pr.yml#L22&quot;&gt;documentation&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/website/src/commit/545e218907e509910b535884d059e49949e4e533/.forgejo/workflows/pr.yml#L23&quot;&gt;website&lt;/a&gt; using the source code checker &lt;a href=&quot;https://github.com/crate-ci/typos&quot;&gt;typos&lt;/a&gt;. To our positive surprise, there weren&apos;t many spelling mistakes on the website, which means that Forgejo&apos;s contributors already did a good job in detecting those during blog post draft approval.&lt;/p&gt;
&lt;p&gt;Broken links are an annoyance to readers of the website. The amount of those in the documentation was &lt;a href=&quot;https://codeberg.org/forgejo/docs/issues/583&quot;&gt;significantly reduced&lt;/a&gt; thanks to the scheduled link check action. It uses the &lt;a href=&quot;https://lychee.cli.rs/&quot;&gt;lychee&lt;/a&gt; binary and was &lt;a href=&quot;https://codeberg.org/forgejo/website/src/commit/545e218907e509910b535884d059e49949e4e533/.forgejo/workflows/links.yml&quot;&gt;added to the website pages&lt;/a&gt;, too. While implementing, too many requests were sent to &lt;a href=&quot;https://codeberg.org&quot;&gt;codeberg.org&lt;/a&gt; and mistaken for abuse, we&apos;re sorry for that! Fortunately, the server is set up with automatic mitigation of such events by blocking the concerned IP address for half an hour. The reason was the massive amount of links to &lt;a href=&quot;#we-forge&quot;&gt;contributors&lt;/a&gt;, which are now &lt;a href=&quot;https://codeberg.org/forgejo/website/src/commit/545e218907e509910b535884d059e49949e4e533/.lychee.toml#L9-L10&quot;&gt;excluded from the daily link checks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Apart from the &lt;a href=&quot;https://codeberg.org/forgejo/docs/activity/monthly&quot;&gt;usual documentation improvements&lt;/a&gt;, the documentation footer on the website has been improved to &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/544&quot;&gt;properly attribute the authors of derived CC-licensed work&lt;/a&gt; and the edit link has been replaced to point always to the related document in the &lt;a href=&quot;https://codeberg.org/forgejo/docs/src/branch/next&quot;&gt;next&lt;/a&gt; branch.&lt;/p&gt;
&lt;p&gt;To further simplify the release process, when building the website, latest and LTS releases are now automatically retrieved using the recently introduced &lt;a href=&quot;https://forgejo.org/2024-11-monthly-update/#forgejo-releases&quot;&gt;release schedule&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Work has started to improve the accessibility of the Forgejo&apos;s website, such as adding a global search and documentation version switches. Contributions are always welcome to both the &lt;a href=&quot;https://codeberg.org/forgejo/website&quot;&gt;website source&lt;/a&gt; and the &lt;a href=&quot;https://codeberg.org/forgejo/docs&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;On the day of the Forgejo v10.0.0 release, the IP of the machine running the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/5813244ff8283eb6f53fb124683a701636031433/.forgejo/workflows/build-release.yml&quot;&gt;workflows responsible for the release&lt;/a&gt; was rate limited by &lt;a href=&quot;https://hub.docker.com/&quot;&gt;https://hub.docker.com/&lt;/a&gt; which host most of the container images used in the CI. It disrupted a number of workflows and had to be dealt with immediately. All workflows were modified months ago to use &lt;a href=&quot;https://code.forgejo.org/oci/-/packages&quot;&gt;Forgejo hosted mirrors&lt;/a&gt; updated &lt;a href=&quot;https://code.forgejo.org/forgejo/oci-mirror/src/commit/aa76bff0ec16a19096f45d9178e6a644b3e5faaa/.forgejo/workflows/mirror.yml&quot;&gt;daily&lt;/a&gt; to prevent that kind of disruption but some references were overlooked. After they were fixed, the workflow responsible for the release was no longer rate limited and the release could proceed.&lt;/p&gt;
&lt;p&gt;code.forgejo.org went down during 15 minutes on 21 January 2025. It was the first unscheduled downtime since &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/220&quot;&gt;9 September&lt;/a&gt; which lasted about 10 hours. &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/267&quot;&gt;Read more in the post-mortem&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;About two years ago, Forgejo action runners were installed manually on &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation#hetzner01&quot;&gt;a machine&lt;/a&gt; that is still in use today. It grew over time and around twenty were also &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/src/commit/b0cd0c924349fe01026db319c6d51a56032b222e/runner-lxc.md&quot;&gt;installed manually&lt;/a&gt;. Ideally they could all be migrated to the new k8s cluster but there is no LXC support in k8s and it is required for a number of workflows that cannot run out of application containers (podman or docker).&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/commit/5df67e66fe2fb5ac7f3ef246d2158d457c6073c8/examples/lxc-systemd&quot;&gt;script managing a systemd unit dedicated to the runner&lt;/a&gt; was created and &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/src/commit/3399353bd41396550ebcc2cea80eeea1bde6b8f2/runner-lxc.md&quot;&gt;used to manage all runners&lt;/a&gt; with familiar commands such as &lt;code&gt;systemctl start forgejo-runner@42&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Dependency management&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/renovate-config/commits/commit/bf629bcb867def68e03f2c6e8e38ea4109f83a48/default.json&quot;&gt;forgejo dependency configuration&lt;/a&gt; and the &lt;a href=&quot;https://code.forgejo.org/renovate&quot;&gt;renovate&lt;/a&gt; organization (formerly in &lt;code&gt;forgejo-contrib&lt;/code&gt;) are the central point from which the dozens of repositories involved in the making of Forgejo (CI, tools or releases) are watched. It automates the obvious but tedious task of ensuring, for instance, that the go release found in &lt;code&gt;go.mod&lt;/code&gt; has an up-to-date version with regard to security vulnerabilities.&lt;/p&gt;
&lt;p&gt;Doing so for an individual repository (which was the starting point of that effort with &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/5813244ff8283eb6f53fb124683a701636031433/renovate.json&quot;&gt;the main Forgejo repository&lt;/a&gt; in 2024) is convenient but it does not scale well. To help with that, shared configurations (see the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/5813244ff8283eb6f53fb124683a701636031433/renovate.json#L3&quot;&gt;one used by Forgejo&lt;/a&gt; for instance) have been created and underwent significant improvements this month.&lt;/p&gt;
&lt;p&gt;In some cases, such as dependencies that are only used in the CI, it is OK for a pull request containing an upgrade to be merged unattended as soon as the workflows pass. This is what the automerge feature is for but it left a branch behind because it was not supported prior to Forgejo v10. The Forgejo driver for renovate &lt;a href=&quot;https://github.com/renovatebot/renovate/pull/33871/files#diff-ce0247a11f9ad18bc0beefe4553f73f3a50b146ca558f4afa9bae2dd2e7502ad&quot;&gt;was patched&lt;/a&gt; and there are no longer lingering branches after an automerge.&lt;/p&gt;
&lt;p&gt;A number of additional repositories were added to &lt;a href=&quot;https://code.forgejo.org/renovate/renovate/src/commit/1a92eab6b45dc600f3ec42dd2a62e14828f461b3/src/config.json&quot;&gt;the pool of repositories&lt;/a&gt; that renovate watches and it is no longer necessary to individually approve them, as long as they belong to a known organization.&lt;/p&gt;
&lt;p&gt;Because renovate was not in use in 2023 (or in some cases where scripting is involved), some dependencies are not specified in a way that renovate can natively discover. For those, dedicated rules are being developed which run the equivalent of &lt;code&gt;sed -i -e &apos;s/old version/new version/&apos;&lt;/code&gt; on the designated file (e.g &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo/src/commit/834d6ebe2a7f956c319721b2380a2b344c41af5b/renovate.json#L5-L14&quot;&gt;upgrading the RUNNER_VERSION&lt;/a&gt; file in &lt;code&gt;setup-forgejo&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Now that dependency management has mature tooling in all Forgejo spaces, it is easier for both volunteers or paid staff to review each individual upgrade. There are just a few every day but most of them require human scrutiny. A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/262&quot;&gt;call for participation&lt;/a&gt; was posted and will hopefully be attractive to people willing to contribute to Forgejo.&lt;/p&gt;
&lt;h2&gt;Moderation incidents&lt;/h2&gt;
&lt;p&gt;January was a little noisy regarding moderation actions. There have been cases of community members that created a lot of noisy issues, presumably with the help of AI tools. While probably in good faith, throwing walls of text by increasing the amount of open issues in forgejo/discussions by 10% in only a few days as well as responding with huge amounts of text to even simple questions was exceeding the capacity of our volunteers to deal with.&lt;/p&gt;
&lt;p&gt;Additionally, some new contributors required a lot of help, started heated discussions, or obstinately pushed their own ideas even if they faced disagreement by several other community members. These incidents have created a slightly tense atmosphere for a few days.&lt;/p&gt;
&lt;p&gt;Luckily, the community has openly talked about the incidents, both in issues and in the Matrix channel, and most of the problems could be resolved quickly. There have been cases where the noise has led to premature reactions by some maintainers, for example when a lengthy issue has been reported as &quot;spam&quot; or &quot;trolling&quot;, even if they might have been created without bad intents.&lt;/p&gt;
&lt;p&gt;We apologize if you have been impacted by any of these incidents, either because an issue you have reported has been flooded with heated discussions, or because a contribution from you has been flagged too quickly. If you think one of your contributions did not receive the attention it deserved, feel free to carefully reopen or recreate it, respecting the pace at which the community can possibly deal with them.&lt;/p&gt;
&lt;p&gt;The exceptional level of tensions lasted for a few days and calmed down again. We expect that this was mainly bad timing to have multiple such cases at the same time and there are no signs this would repeat in the new future. Nevertheless, a new &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/219&quot;&gt;moderator was proposed&lt;/a&gt; to increase the human resources within the Forgejo moderation team.&lt;/p&gt;
&lt;p&gt;Forgejo strives to be an inclusive project where everyone can participate in a safe environment. If you, as a community member, feel unsafe for any reason, feel free to reach out to the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MODERATION-PROCESS.md#moderation-contact&quot;&gt;moderation team&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/2franix&quot;&gt;https://codeberg.org/2franix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aimuz&quot;&gt;https://codeberg.org/aimuz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex619829&quot;&gt;https://codeberg.org/Alex619829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amoutill&quot;&gt;https://codeberg.org/amoutill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/angelnu&quot;&gt;https://codeberg.org/angelnu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AntoninDelFabbro&quot;&gt;https://codeberg.org/AntoninDelFabbro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Apfelwurm&quot;&gt;https://codeberg.org/Apfelwurm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aqtrans&quot;&gt;https://codeberg.org/aqtrans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashur_iraq&quot;&gt;https://codeberg.org/ashur_iraq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atalanttore&quot;&gt;https://codeberg.org/Atalanttore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atul_Eterno&quot;&gt;https://codeberg.org/Atul_Eterno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/awiteb&quot;&gt;https://codeberg.org/awiteb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bakaroni&quot;&gt;https://codeberg.org/bakaroni&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/banaanihillo&quot;&gt;https://codeberg.org/banaanihillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bartavi&quot;&gt;https://codeberg.org/bartavi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bbastin&quot;&gt;https://codeberg.org/bbastin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Be.ing&quot;&gt;https://codeberg.org/Be.ing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/billynoah&quot;&gt;https://codeberg.org/billynoah&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bmorel&quot;&gt;https://codeberg.org/bmorel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BtbN&quot;&gt;https://codeberg.org/BtbN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/burakozaydin&quot;&gt;https://codeberg.org/burakozaydin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bvandevliet&quot;&gt;https://codeberg.org/bvandevliet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/c8h4&quot;&gt;https://codeberg.org/c8h4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/carnivorecookies&quot;&gt;https://codeberg.org/carnivorecookies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CEbbinghaus&quot;&gt;https://codeberg.org/CEbbinghaus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Chealer&quot;&gt;https://codeberg.org/Chealer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cloud&quot;&gt;https://codeberg.org/cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cobak78&quot;&gt;https://codeberg.org/cobak78&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ConfusedOnCOFFEE&quot;&gt;https://codeberg.org/ConfusedOnCOFFEE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cstaky&quot;&gt;https://codeberg.org/cstaky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/d96b&quot;&gt;https://codeberg.org/d96b&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dallyger&quot;&gt;https://codeberg.org/dallyger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/daniel-baumann&quot;&gt;https://codeberg.org/daniel-baumann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DanielRuf&quot;&gt;https://codeberg.org/DanielRuf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davbfr&quot;&gt;https://codeberg.org/davbfr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/davrot&quot;&gt;https://codeberg.org/davrot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/div72&quot;&gt;https://codeberg.org/div72&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/doasu&quot;&gt;https://codeberg.org/doasu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dreamboat9222&quot;&gt;https://codeberg.org/Dreamboat9222&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/elit-matas&quot;&gt;https://codeberg.org/elit-matas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emilylange&quot;&gt;https://codeberg.org/emilylange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/endernon&quot;&gt;https://codeberg.org/endernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fauno&quot;&gt;https://codeberg.org/fauno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/filmroellchen&quot;&gt;https://codeberg.org/filmroellchen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fishwaldo&quot;&gt;https://codeberg.org/Fishwaldo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flyingfishflash&quot;&gt;https://codeberg.org/flyingfishflash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fossdd&quot;&gt;https://codeberg.org/fossdd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Frankkkkk&quot;&gt;https://codeberg.org/Frankkkkk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Froini&quot;&gt;https://codeberg.org/Froini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fvezzoli&quot;&gt;https://codeberg.org/fvezzoli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GKuhn&quot;&gt;https://codeberg.org/GKuhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gratux&quot;&gt;https://codeberg.org/gratux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/guinevere&quot;&gt;https://codeberg.org/guinevere&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/harbourcoleman&quot;&gt;https://codeberg.org/harbourcoleman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hashirama&quot;&gt;https://codeberg.org/hashirama&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hexa&quot;&gt;https://codeberg.org/hexa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hiraku&quot;&gt;https://codeberg.org/Hiraku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hoppinglife&quot;&gt;https://codeberg.org/hoppinglife&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hucksy&quot;&gt;https://codeberg.org/hucksy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ikidd&quot;&gt;https://codeberg.org/ikidd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ikuyo&quot;&gt;https://codeberg.org/ikuyo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/infinoid&quot;&gt;https://codeberg.org/infinoid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ironfractal&quot;&gt;https://codeberg.org/Ironfractal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/izzy&quot;&gt;https://codeberg.org/izzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JadedBlueEyes&quot;&gt;https://codeberg.org/JadedBlueEyes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jasonb&quot;&gt;https://codeberg.org/jasonb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/javiertury&quot;&gt;https://codeberg.org/javiertury&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jedik&quot;&gt;https://codeberg.org/jedik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jkirk&quot;&gt;https://codeberg.org/jkirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmakov&quot;&gt;https://codeberg.org/jmakov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jornfranke&quot;&gt;https://codeberg.org/jornfranke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JuniorJPDJ&quot;&gt;https://codeberg.org/JuniorJPDJ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justbispo&quot;&gt;https://codeberg.org/justbispo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kampka&quot;&gt;https://codeberg.org/kampka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kdh8219&quot;&gt;https://codeberg.org/kdh8219&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kdtresh&quot;&gt;https://codeberg.org/kdtresh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/khaeru&quot;&gt;https://codeberg.org/khaeru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kidsan&quot;&gt;https://codeberg.org/kidsan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/killawabbit&quot;&gt;https://codeberg.org/killawabbit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lapo&quot;&gt;https://codeberg.org/lapo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lenikadali&quot;&gt;https://codeberg.org/lenikadali&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lhinderberger&quot;&gt;https://codeberg.org/lhinderberger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/litchipi&quot;&gt;https://codeberg.org/litchipi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lordwektabyte&quot;&gt;https://codeberg.org/lordwektabyte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lynnesbian&quot;&gt;https://codeberg.org/lynnesbian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maarrk&quot;&gt;https://codeberg.org/maarrk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcelovicentegc&quot;&gt;https://codeberg.org/marcelovicentegc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MarcoZehe&quot;&gt;https://codeberg.org/MarcoZehe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MarkL4YG&quot;&gt;https://codeberg.org/MarkL4YG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marshmallow&quot;&gt;https://codeberg.org/marshmallow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Marti&quot;&gt;https://codeberg.org/Marti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mary-ext&quot;&gt;https://codeberg.org/mary-ext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mattie_sanz&quot;&gt;https://codeberg.org/mattie_sanz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mcnesium&quot;&gt;https://codeberg.org/mcnesium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mehrad&quot;&gt;https://codeberg.org/mehrad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meisam&quot;&gt;https://codeberg.org/meisam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/melonion&quot;&gt;https://codeberg.org/melonion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Merith-TK&quot;&gt;https://codeberg.org/Merith-TK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mhughes9&quot;&gt;https://codeberg.org/mhughes9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micash&quot;&gt;https://codeberg.org/micash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/michael-sparrow&quot;&gt;https://codeberg.org/michael-sparrow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Miguel_PL&quot;&gt;https://codeberg.org/Miguel_PL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirkoperillo&quot;&gt;https://codeberg.org/mirkoperillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mortzu&quot;&gt;https://codeberg.org/mortzu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MSalah73&quot;&gt;https://codeberg.org/MSalah73&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mstuehrenberg&quot;&gt;https://codeberg.org/mstuehrenberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mynacol&quot;&gt;https://codeberg.org/Mynacol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n2o&quot;&gt;https://codeberg.org/n2o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nasmevka&quot;&gt;https://codeberg.org/nasmevka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/natct&quot;&gt;https://codeberg.org/natct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/natkr&quot;&gt;https://codeberg.org/natkr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Neureka&quot;&gt;https://codeberg.org/Neureka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neuschaefer&quot;&gt;https://codeberg.org/neuschaefer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Neustradamus&quot;&gt;https://codeberg.org/Neustradamus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NiclasPe&quot;&gt;https://codeberg.org/NiclasPe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nobodyinperson&quot;&gt;https://codeberg.org/nobodyinperson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/omenos&quot;&gt;https://codeberg.org/omenos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Omichron&quot;&gt;https://codeberg.org/Omichron&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/OrbitalMartian&quot;&gt;https://codeberg.org/OrbitalMartian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/panekj&quot;&gt;https://codeberg.org/panekj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pasabanov&quot;&gt;https://codeberg.org/pasabanov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patka&quot;&gt;https://codeberg.org/patka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pietervdvn&quot;&gt;https://codeberg.org/pietervdvn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pipcet&quot;&gt;https://codeberg.org/pipcet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PlayBoxTech&quot;&gt;https://codeberg.org/PlayBoxTech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/post-factum&quot;&gt;https://codeberg.org/post-factum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Protestant&quot;&gt;https://codeberg.org/Protestant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PurpleBooth&quot;&gt;https://codeberg.org/PurpleBooth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/puzzle-it-nu&quot;&gt;https://codeberg.org/puzzle-it-nu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/r-w-x&quot;&gt;https://codeberg.org/r-w-x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rabit&quot;&gt;https://codeberg.org/rabit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rdwz&quot;&gt;https://codeberg.org/rdwz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/revi&quot;&gt;https://codeberg.org/revi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ricky-Tigg&quot;&gt;https://codeberg.org/Ricky-Tigg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Routhinator&quot;&gt;https://codeberg.org/Routhinator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rudolph&quot;&gt;https://codeberg.org/rudolph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s-light&quot;&gt;https://codeberg.org/s-light&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s1m&quot;&gt;https://codeberg.org/s1m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Salt&quot;&gt;https://codeberg.org/Salt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salzig&quot;&gt;https://codeberg.org/salzig&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sammefishe&quot;&gt;https://codeberg.org/sammefishe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scMarkus&quot;&gt;https://codeberg.org/scMarkus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sdomi&quot;&gt;https://codeberg.org/sdomi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sg-phoenix-technologies&quot;&gt;https://codeberg.org/sg-phoenix-technologies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shgew&quot;&gt;https://codeberg.org/shgew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skivling&quot;&gt;https://codeberg.org/Skivling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Slate3919&quot;&gt;https://codeberg.org/Slate3919&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smxi&quot;&gt;https://codeberg.org/smxi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Spinning9247&quot;&gt;https://codeberg.org/Spinning9247&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stb&quot;&gt;https://codeberg.org/stb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stop5&quot;&gt;https://codeberg.org/stop5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ted423&quot;&gt;https://codeberg.org/ted423&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefinn93&quot;&gt;https://codeberg.org/thefinn93&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/theoryshaw&quot;&gt;https://codeberg.org/theoryshaw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thilinajayanath&quot;&gt;https://codeberg.org/thilinajayanath&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thodorisl&quot;&gt;https://codeberg.org/thodorisl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ThomasBoom89&quot;&gt;https://codeberg.org/ThomasBoom89&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thor&quot;&gt;https://codeberg.org/thor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Thyxus&quot;&gt;https://codeberg.org/Thyxus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tkbremnes&quot;&gt;https://codeberg.org/tkbremnes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tusooa&quot;&gt;https://codeberg.org/tusooa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmaster&quot;&gt;https://codeberg.org/tuxmaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ujr&quot;&gt;https://codeberg.org/ujr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/umglurf&quot;&gt;https://codeberg.org/umglurf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/unikitty&quot;&gt;https://codeberg.org/unikitty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/virtulis&quot;&gt;https://codeberg.org/virtulis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vpeltnt&quot;&gt;https://codeberg.org/vpeltnt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vpotyarkin&quot;&gt;https://codeberg.org/vpotyarkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/waldyrious&quot;&gt;https://codeberg.org/waldyrious&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wneessen&quot;&gt;https://codeberg.org/wneessen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolftune&quot;&gt;https://codeberg.org/wolftune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wvffle&quot;&gt;https://codeberg.org/wvffle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xavidcr&quot;&gt;https://codeberg.org/xavidcr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/XeroX&quot;&gt;https://codeberg.org/XeroX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xmort&quot;&gt;https://codeberg.org/xmort&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yaash&quot;&gt;https://codeberg.org/yaash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yann-soubeyrand&quot;&gt;https://codeberg.org/yann-soubeyrand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yannicka&quot;&gt;https://codeberg.org/yannicka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ytimenkov&quot;&gt;https://codeberg.org/ytimenkov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zukka77&quot;&gt;https://codeberg.org/zukka77&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Forgejo Security Releases v10.0.1 and v7.0.13</title><link>https://forgejo.org/2025-02-release-v10-0-1/</link><guid isPermaLink="true">https://forgejo.org/2025-02-release-v10-0-1/</guid><description>The Forgejo v10.0.1 and v7.0.13 releases contain critical security fixes related to permissions enforcement of web endpoints.</description><pubDate>Sat, 08 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v10.0.1&quot;&gt;Forgejo v10.0.1&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v7.0.13&quot;&gt;Forgejo v7.0.13&lt;/a&gt; were released 8 February 2025.&lt;/p&gt;
&lt;p&gt;This release fixes permissions enforcement of Forgejo Actions and projects.&lt;/p&gt;
&lt;p&gt;This release also contains other bug fixes, as detailed &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/9468&quot;&gt;in the corresponding milestone&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Impact&lt;/h3&gt;
&lt;p&gt;These security issues can be exploited:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;by users who are registered on the instance, to delete Forgejo Actions runners and variables or modify variables.&lt;/li&gt;
&lt;li&gt;to get the titles, authors, labels and creation dates of issues or pull requests in private repositories, when they are referenced by a project from the containing user or organization.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Forgejo Actions web endpoints vulnerable to manually crafted identifiers&lt;/h3&gt;
&lt;p&gt;Some Forgejo Actions related web endpoints, such as deleting a &lt;a href=&quot;https://forgejo.org/docs/next/user/actions/#variables&quot;&gt;Forgejo Actions variable&lt;/a&gt;, rely on an identifier unique to an object (a variable in this example).&lt;/p&gt;
&lt;p&gt;The permissions required for the user performing the action on the
repository are properly enforced. But a check was missing to ensure
that the object (a variable in the example) also belongs to the
repository the permissions are checked against. Without this check it
was possible both to perform destructive actions (runners and
variables) or to modify variables in repositories unrelated to the
request, including private ones.&lt;/p&gt;
&lt;p&gt;The vulnerable endpoints were fixed and tests were added to verify the fixes are effective.&lt;/p&gt;
&lt;h3&gt;User or organization wide projects leaking information about private issues or pull requests&lt;/h3&gt;
&lt;p&gt;If a project is created in a user or an organization, it can be used to display some information about issues or pull requests extracted from the repositories they contain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;author&lt;/li&gt;
&lt;li&gt;creation date&lt;/li&gt;
&lt;li&gt;labels&lt;/li&gt;
&lt;li&gt;URL to the issue or pull request&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When a publicly readable user or organization contains a private
repository, a user with access to this private repository can add an
issue or pull request to the publicly available project. A user who
was not allowed to read the private repository was able to see the
information about the issue or pull request displayed in the
project. When this same user visits the URL of the issue or pull
request, they are denied access because they do not have the required permissions.&lt;/p&gt;
&lt;p&gt;The vulnerable web endpoints were fixed and tests written to verify the fix is effective.&lt;/p&gt;
&lt;h3&gt;Forgejo gives advance warning of security releases&lt;/h3&gt;
&lt;p&gt;Similar to what is done when a Go release contains a security fix,
Forgejo publishes advance warning of security releases. They
do not reveal the details of the vulnerability but will allow
Forgejo admins to plan ahead and better secure their instance. Anyone
can watch the
&lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/&quot;&gt;dedicated tracker&lt;/a&gt; or
&lt;a href=&quot;https://codeberg.org/forgejo/security-announcements.rss&quot;&gt;subscribe to the RSS feed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Third parties may also get more information ahead of time when they agree to comply with
the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/commit/48c2d7fe8e5f7e43ec40e39e7081e2b3a8f79978/SECURITY-POLICY.md#forgejo-security-policy&quot;&gt;Forgejo Security Policy&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v10.0 is available</title><link>https://forgejo.org/2025-01-release-v10-0/</link><guid isPermaLink="true">https://forgejo.org/2025-01-release-v10-0/</guid><description>Forgejo v10.0 is available. TOTP secrets were made more secure. The UI was made more accessible and reworked to improve the UX. Searching users, repositories, releases and issues was improved. Low German (Plattdüütsch) translation was completed. This is the last version to allow a transparent upgrade from Gitea v1.22 or lower.</description><pubDate>Thu, 16 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v10.0&lt;/a&gt; was released 16 January 2025. You will find a short selection of the changes it introduces below and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8377&quot;&gt;complete list in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release marks the end of life for the previous stable version v9. The LTS series Forgejo v7 is still supported until 16 July 2025. Forgejo v10.0 will be supported until &lt;a href=&quot;https://forgejo.org/docs/next/admin/release-schedule/&quot;&gt;16 April 2025&lt;/a&gt;, when Forgejo v11.0 is published. Admins of Forgejo instances with version v9 are recommended to prepare for an upgrade in time so that applying potential future security patches does not involve a major upgrade.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://v10.next.forgejo.org/&quot;&gt;dedicated test instance&lt;/a&gt; is available to try it out. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v10.0/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8377&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;in the chat room&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Forgejo v10.0 is &lt;a href=&quot;/2024-12-gitea-compatibility/&quot;&gt;the last version to allow a transparent upgrade from Gitea v1.22 or lower&lt;/a&gt;. In 2023 Forgejo was a soft fork, a set of patches maintained by the Forgejo community on top of Gitea. Early 2024 &lt;a href=&quot;/2024-02-forking-forward/&quot;&gt;it became a hard fork&lt;/a&gt; and the codebases started to diverge. Forgejo and Gitea are now effectively different codebases although they share the same history back from the early days of Gogs.&lt;/p&gt;
&lt;p&gt;If you are running Gitea v1.22 or lower and consider migrating to Forgejo long after v10.0 was published, &lt;a href=&quot;https://forgejo.org/docs/next/admin/upgrade/#preparing-an-upgrade-from-gitea&quot;&gt;it will still be possible&lt;/a&gt;, provided you upgrade to Forgejo v10.0 first and then upgrade to a newer Forgejo version. This will be a two steps upgrade instead of a single step.&lt;/p&gt;
&lt;h2&gt;New features&lt;/h2&gt;
&lt;p&gt;Below is short selection of the most notable changes. The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8377&quot;&gt;complete list is available in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6386&quot;&gt;PR&lt;/a&gt;: Rework the new repository dialog.
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4753&quot;&gt;PR&lt;/a&gt;: Git notes can be modified via the API or the UI.
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5589&quot;&gt;PR&lt;/a&gt;: Add button to create Markdown table.
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5677&quot;&gt;PR&lt;/a&gt;: If you select a portion of a comment and use the &apos;Quote reply&apos; feature in the context menu, only that portion will be quoted. The markdown syntax is preserved.
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4125&quot;&gt;PR&lt;/a&gt;: Add link to show all issues and pull requests.
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5899&quot;&gt;PR&lt;/a&gt;: Highlight user mention in comments and commit messages.
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6053&quot;&gt;PR&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6269&quot;&gt;PR&lt;/a&gt;: Add a &quot;summary card&quot; to issues, PRs, repositories and releases for consumption by OpenGraph clients.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6143&quot;&gt;PR&lt;/a&gt;: Filepath filter for code search.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6274&quot;&gt;PR&lt;/a&gt;: Add links to commit lists in contributors graph page.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5777&quot;&gt;PR&lt;/a&gt;: Add search to releases page.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6074&quot;&gt;PR&lt;/a&gt;: Migrate TOTP secrets to &lt;code&gt;keying&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5819&quot;&gt;PR&lt;/a&gt;: When &lt;a href=&quot;https://forgejo.org/docs/next/admin/config-cheat-sheet/#indexer-indexer&quot;&gt;bleve is used for issue search&lt;/a&gt;, a &lt;code&gt;fuzzy&lt;/code&gt; search now applies to each word instead of all of them, as if they were a phrase. For instance, searching for &lt;code&gt;activitypub spam moderation&lt;/code&gt; previously returned no result in Forgejo discussions and now returns the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues?state=open&amp;amp;type=all&amp;amp;q=activitypub+spam+moderation&amp;amp;fuzzy=true&quot;&gt;relevant issues&lt;/a&gt;. If the search results are too broad, or for searching exact phrases prefer using an &lt;code&gt;exact&lt;/code&gt; search. Sorting by newest is still available as a non default option under &lt;code&gt;Sort&lt;/code&gt;. The query was also reworked to improve performances. It makes a significant difference for large instances such as Codeberg.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6146&quot;&gt;PR&lt;/a&gt;: Improve performance of notifications page for MySQL.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hardened TOTP secrets&lt;/h2&gt;
&lt;p&gt;The TOTP secrets were stored using the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/de4053db8370c5d06adb48165fd833363333c5ea/modules/secret/&quot;&gt;secret module&lt;/a&gt;. They now use the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/de4053db8370c5d06adb48165fd833363333c5ea/modules/keying/&quot;&gt;keying module&lt;/a&gt; which is easier to use and relies on better practices to store secrets in a databases.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;keying&lt;/code&gt; module tries to solve two problems, the lack of key separation and the lack of AEAD being used for encryption. The &lt;code&gt;secret&lt;/code&gt; module doesn&apos;t provide this and is hard to adjust to provide this functionality.&lt;/p&gt;
&lt;p&gt;For encryption, the additional data is now a parameter that can be used, as the underlying primitive is an AEAD construction. This allows for context binding to happen and can be seen as defense-in-depth; it ensures that if a value &lt;code&gt;X&lt;/code&gt; is encrypted for context &lt;code&gt;Y&lt;/code&gt; (e.g. &lt;code&gt;ID=3&lt;/code&gt;, &lt;code&gt;Column=&quot;private_key&quot;&lt;/code&gt;) it will only decrypt if that context &lt;code&gt;Y&lt;/code&gt; is also given in the &lt;code&gt;Decrypt&lt;/code&gt; function. This makes a &lt;a href=&quot;https://en.wikipedia.org/wiki/Confused_deputy_problem&quot;&gt;confused deputy&lt;/a&gt; attack harder to exploit.&lt;/p&gt;
&lt;h2&gt;Gitea compatibility&lt;/h2&gt;
&lt;p&gt;Forgejo v10.0 has &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/upgrade/upgrade.sh#L56-L57&quot;&gt;automated upgrade tests from Gitea v1.22 to Forgejo v10.0&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An instance running Gitea versions up to v1.21 can be upgraded to Forgejo v7.0 or v8.0&lt;/li&gt;
&lt;li&gt;An instance running Gitea v1.22 can be upgraded to Forgejo v8.0, v9.0 or v10.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Future Forgejo versions will not support upgrades from Gitea instances running version v1.23 or above. Read more about &lt;a href=&quot;/2024-12-gitea-compatibility/&quot;&gt;Gitea compatibility and upgrades in the dedicated blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Note on some harmless warnings&lt;/h2&gt;
&lt;p&gt;You may see migration warnings (and in some cases errors) when Forgejo starts. Most of them can be ignored as long as they do not prevent the instance from starting. However, they are confusing and you may want to get rid of them. More information can be found about that in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/6583&quot;&gt;corresponding issue&lt;/a&gt;, as well as instructions to resolve them. If in doubt, do not hesitate to ask for advice.&lt;/p&gt;
&lt;h2&gt;Release schedule and Long Term Support&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;/docs/v10.0/admin/release-schedule/&quot;&gt;time based release schedule&lt;/a&gt; was established to publish a release every three months. Patch releases will be published more frequently, depending on the severity of the bug or security fixes they contain.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;7.0 (LTS)&lt;/td&gt;
&lt;td&gt;23 April 2024&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2025&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9.0&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;td&gt;16 January 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10.0&lt;/td&gt;
&lt;td&gt;16 January 2025&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11.0 (LTS)&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;15 July 2026&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;10.0-test daily releases&lt;/h3&gt;
&lt;p&gt;Releases are built daily from the latest changes found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v10.0/forgejo&quot;&gt;v10.0/forgejo&lt;/a&gt; development branch. They are deployed to the &lt;a href=&quot;https://v10.next.forgejo.org&quot;&gt;https://v10.next.forgejo.org&lt;/a&gt; instance for manual verification in case a bug fix is of particular interest ahead of the next patch release. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/10.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/10.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v10.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their names are staying the same but they are replaced by new builds every day.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;This release contains the latest translation updates from the project on Codeberg Translate. They include a significant number of new translations and improvements to many languages, with particularly large refactors in Latvian and Simplified Chinese.&lt;/p&gt;
&lt;p&gt;A new language has been made available: Low German (Plattdüütsch). It is already fully completed, only proofreading remains.&lt;/p&gt;
&lt;p&gt;A new convenient feature has been added which allows to easily identify translation keys in the interface by simply appending &lt;code&gt;lang=dummy&lt;/code&gt; to the URL parameters. It is also useful to quickly look up the UI template within the source code.&lt;/p&gt;
&lt;h2&gt;Get Forgejo v10.0&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&quot;/download/&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8377&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8377&quot;&gt;Breaking bug fixes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v10.0.0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/10.0.0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/10.0&quot;&gt;&lt;code&gt;10.0&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;10.0.Y&lt;/code&gt; patch release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v10.0/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
&lt;h3&gt;Donate&lt;/h3&gt;
&lt;p&gt;Forgejo is proud to be &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/&quot;&gt;funded transparently&lt;/a&gt;. Additionally, it accept donations &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;through Liberapay&lt;/a&gt;. It is also possible to &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donate to Codeberg e.V.&lt;/a&gt; in case the Liberapay option does not work out for you, and part of the funding is used to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/#forgejo-resources-per-year&quot;&gt;compensate for work on Forgejo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, the Liberapay team allows for money to go directly to developers without a round-trip to Codeberg. Additionally, Liberapay allows for a steady and reliable funding stream next to other options, a crucial aspect for the project. The distribution of funds through Liberapay is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;transparently controlled using the decision-making process&lt;/a&gt;, and Forgejo contributors are encouraged to consider applying to benefit from this funding opportunity.&lt;/p&gt;
&lt;p&gt;Thank you for using Forgejo and considering a donation, in case your financial situation allows you to.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - December 2024</title><link>https://forgejo.org/2024-12-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-12-monthly-update/</guid><description>All the best for the new year from Forgejo. We are in the preparations for the upcoming v10 release, have improved testing and automation. A a big thanks to everyone who makes Forgejo a success, including upstream projects and libraries Forgejo depends on.</description><pubDate>Sun, 05 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We wish all contributors, Forgejo users and interested followers all the best for 2025, especially for the projects you develop on Forgejo.&lt;/p&gt;
&lt;h2&gt;Welcome to Forgejo&lt;/h2&gt;
&lt;p&gt;It makes us very happy to hear from so many people who are migrating from various services to Forgejo, often based on their new year&apos;s resolutions. We are looking forward to see you as active members in our community and appreciate your feedback as new users.&lt;/p&gt;
&lt;p&gt;We are pleased to read that the Fedora project is &lt;a href=&quot;https://communityblog.fedoraproject.org/fedora-chooses-forgejo/&quot;&gt;going to use Forgejo&lt;/a&gt;, and we are excited to improve the software and project in mutual collaboration. Some Forgejo contributors have met &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/115&quot;&gt;Fedora community members at FOSDEM 2024&lt;/a&gt; and we are looking forward to a nice long-term partnership.&lt;/p&gt;
&lt;h2&gt;Visual testing&lt;/h2&gt;
&lt;p&gt;Decent test coverage to guard against bugs and regressions is an important goal of the Forgejo maintainers. However, testing the user-visible frontend is often challenging. In recent months, a lot of browser tests have been written using &lt;a href=&quot;https://playwright.dev/&quot;&gt;Playwright&lt;/a&gt; (also see the recent monthly reports) to test the behaviour of Forgejo as seen by a user.&lt;/p&gt;
&lt;p&gt;Now, the tests are additionally used to create and compare screenshots to enable &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/257&quot;&gt;visual regression testing&lt;/a&gt;. The screenshots are managed in &lt;a href=&quot;https://code.forgejo.org/forgejo/visual-browser-testing/&quot;&gt;a separate repository&lt;/a&gt; to keep the size of the Forgejo repository low.&lt;/p&gt;
&lt;p&gt;The screenshots are compared against previous state to see if pixel&apos;s match exactly. If they don&apos;t, a contributor reviews if the difference is expected (e.g. due to an improvement), acceptable (e.g. a minor side effect due to a change) or poses an issue. A few &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/6385&quot;&gt;minor issues&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6344#issuecomment-2549594&quot;&gt;regressions&lt;/a&gt; have already been discovered and fixed with the help of the screenshots.&lt;/p&gt;
&lt;p&gt;This workflow is more efficient than manually clicking through Forgejo&apos;s UI, because test coverage is guaranteed and measurable. It is more accurate than human vision alone. The only remaining task is verifying the few changed pages.&lt;/p&gt;
&lt;h2&gt;Development work&lt;/h2&gt;
&lt;p&gt;There are only two weeks to go before the v10 Forgejo release (scheduled for January 15, see the &lt;a href=&quot;https://forgejo.org/docs/next/admin/release-schedule/&quot;&gt;release schedule&lt;/a&gt;). If you want to help make the release a great success, please &lt;a href=&quot;https://forgejo.org/docs/latest/contributor/localization/&quot;&gt;finish translations&lt;/a&gt; and optionally test the release early and report issues.&lt;/p&gt;
&lt;p&gt;Numerous improvements have made it into the release in December, such as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6143&quot;&gt;searching in a subpath of your repo&lt;/a&gt;, performance improvements for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6146&quot;&gt;notifications&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6100&quot;&gt;new repo dialog&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6269&quot;&gt;OpenGraph previews for repositories and releases&lt;/a&gt; and more.&lt;/p&gt;
&lt;p&gt;Several forms have been reworked to make use of the &lt;a href=&quot;https://codeberg.org/forgejo/design/src/branch/main/guides/forms.md&quot;&gt;new forms styleguide&lt;/a&gt;. They have improved consistency and accessibility and user experience was slightly improved. You will be available to enjoy a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6386&quot;&gt;simplified new repo&lt;/a&gt; dialog and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6407&quot;&gt;adjusted profile settings&lt;/a&gt; in the next release, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6361&quot;&gt;and more to come&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please report any accessibility issues and minor inconvenience to either the issue tracker or Mastodon.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;p&gt;The Forgejo release process is documented as a checklist of actions to be performed by &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#release&quot;&gt;a member of the release team&lt;/a&gt; (see for instance &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/5972&quot;&gt;the checklist for the 9.0.2 patch release&lt;/a&gt; or &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/5380&quot;&gt;the checklist for the 9.0.0 major release&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Work started &lt;a href=&quot;https://forgejo.org/2024-11-monthly-update/#forgejo-releases&quot;&gt;last month&lt;/a&gt; to automate most of the tasks. In a nutshell, the new &lt;a href=&quot;https://code.forgejo.org/forgejo/release-manager&quot;&gt;release manager&lt;/a&gt; creates a &lt;a href=&quot;https://code.forgejo.org/forgejo/release-tasks&quot;&gt;list of tasks&lt;/a&gt; for a given release (it is different for a major release or a patch release). Each task is an issue in a dedicated Forgejo repository that was created for this purpose only.&lt;/p&gt;
&lt;p&gt;The description of the issue (such as cutting a branch) explains what is going to be done automatically and what is the responsibility of the release team member (such as writing a blog post). By placing the &lt;code&gt;run&lt;/code&gt; label on the issue, the release manager will carry out the task. In &lt;code&gt;dry run&lt;/code&gt; mode it shows what would be done and documents it as a comment on the issue. The gory details are found in the output of the workflow, for debugging purposes.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8833&quot;&gt;Forgejo v9.0.3&lt;/a&gt; release was published using the release manager for the first time. It was a bumpy experience that uncovered a dozen bugs and even brought down code.forgejo.org during 15 minutes. Although the individual actions involved in the process are tested (see &lt;a href=&quot;https://code.forgejo.org/forgejo/release-scheduler/src/commit/0f105cac9225eae823b9d5cf63da2335039e3cd1/.forgejo/workflows/test.yml&quot;&gt;this example test workflow&lt;/a&gt;), bugs happen.&lt;/p&gt;
&lt;p&gt;The Forgejo helm chart has seen &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;two security updates&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;The migration of the &lt;a href=&quot;https://forgejo.org/2024-11-monthly-update/#infrastructure&quot;&gt;Forgejo infrastructure to a k8s cluster&lt;/a&gt; that was completed last month can be used to improve the availability of &lt;a href=&quot;https://forgejo.org/docs/v9.0/admin/actions/#default-actions-url&quot;&gt;the default instance&lt;/a&gt; from which actions are downloaded.&lt;/p&gt;
&lt;p&gt;As of Forgejo v10.0 &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6313&quot;&gt;actions will be downloaded from https://data.forgejo.org&lt;/a&gt;, separating read-only assets that can easily be replicated and updated with a delay from the repositories where development happen such as &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;end-to-end tests&lt;/a&gt; or the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Dependency management&lt;/h2&gt;
&lt;p&gt;Almost a year ago, a large scale effort was undertaken to &lt;a href=&quot;https://forgejo.org/docs/next/contributor/dependencies/&quot;&gt;improve dependency management&lt;/a&gt; on the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/ec20eaee44375ee065379e698feb1cedd9891923/renovate.json&quot;&gt;Forgejo repository itself&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was generalized to all Forgejo instances and repositories involved in the making of Forgejo. To keep it dry, &lt;a href=&quot;https://code.forgejo.org/forgejo/renovate-config&quot;&gt;a shared configuration&lt;/a&gt; is used. A number of repositories where dependencies were lagging behind were updated (&lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo/pulls/248&quot;&gt;the setup-forgejo action&lt;/a&gt; is one of many such updates).&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;Two ongoing grants have ended this month, the first one on December 1st and the second on December 31rd. We are thankful for &lt;a href=&quot;https://NLnet.nl/&quot;&gt;the NLnet foundation&lt;/a&gt; for the great funding opportunity.&lt;/p&gt;
&lt;p&gt;The funds compensated the work of Forgejo contributors with a total € 40.250.
Generously, some contributors have decided to send their request for payment in the name of Codeberg e.V., which has received a total of € 32.750 from the NLnet grants, multiplying the effect of the grant by allowing the money to be re-invested to sustain the development of Forgejo.&lt;/p&gt;
&lt;p&gt;Unfortunately, some portion of the grant was not claimed and expired, mostly because contributors were not available to complete the work they initially planned to do.&lt;/p&gt;
&lt;p&gt;During a &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/meetings/2024-12-28.md&quot;&gt;sustainability meeting on December 28&lt;/a&gt;, ideas and plans for next funding opportunities were exchanged. The goal is to complete a list of potential milestones within two weeks and propose a workplan to NLnet.&lt;/p&gt;
&lt;p&gt;If financial compensation would allow you to contribute to Forgejo, we are interested in hearing from you. You can join the chat of the sustainability team on Matrix: &lt;a href=&quot;https://matrix.to/#/%23forgejo-sustainability%3Amatrix.org&quot;&gt;#forgejo-sustainability:matrix.org&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Acknowledgements to projects that improve Forgejo&lt;/h2&gt;
&lt;p&gt;Forgejo exists thanks to thousands of contributors in the free software ecosystem. They maintain libraries and development tools that save the Forgejo contributors time and effort. Their impact on the codebase is significant, but it is often only visible in case bugs originate from these upstream developers.&lt;/p&gt;
&lt;p&gt;In the future, we would like to add &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/252&quot;&gt;explicit acknowledgements&lt;/a&gt; to the contributors of the ecosystem that makes Forgejo what it is, and we appreciate help and pointers on how to efficiently do this.&lt;/p&gt;
&lt;p&gt;There is no secrecy about our relation to Gitea, the project we forked two years ago, and we have applied due diligence and best practices to retain authorship information and references for code that we imported from the Gitea open source codebase.&lt;/p&gt;
&lt;p&gt;Nevertheless, we have been &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/251#issuecomment-2513035&quot;&gt;accused of stealing code from Gitea&lt;/a&gt;, combined with a threat for legal action by a Gitea contributor and CommitGO/Gitea Ltd. shareholder. Apparently, the primary issue was confusion about the cherry-picks, commit signatures as well as the exact definition of &quot;hard fork&quot;. Note that we rely on the default behaviour of Git when used with GPG keys. Since not everyone involved in the thread can be expected to be familiar with the characteristics of Git, we &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/251#issuecomment-2513108&quot;&gt;explained the behaviour&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In short: &lt;code&gt;git cherry-pick&lt;/code&gt; retains the authorship of the commit as the &quot;author&quot; metadata, and signs the commit to preserve information about who created the cherry-pick. Signing the commits with GPG keys of Gitea contributors is obviously not possible, because only they have access to their private keys and sharing them would undermine the security benefits of the signatures.&lt;/p&gt;
&lt;p&gt;To clear up any confusion, we have reworded certain parts of our website and explain the current cherry-picking process once more.
Nearly every week, a Forgejo contributor &lt;a href=&quot;https://codeberg.org/forgejo/tools/src/branch/main/scripts&quot;&gt;uses a tool&lt;/a&gt; to categorize activity in Gitea and create a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6391&quot;&gt;pull request&lt;/a&gt; that contains references to the origin of contributions and an assessment of relevancy for Forgejo.&lt;/p&gt;
&lt;p&gt;A small subset of contributions is picked because they are relevant to Forgejo and save effort for the Forgejo contributors. Some more commits are marked for a closer look, for instance because test coverage is not sufficient for a merge in Forgejo, because they require more discussion and review for usability, accessibility and design, or because there is a conflict that needs resolution (we refer to this as &quot;porting&quot;). Many commits are skipped for various reasons, e.g. because they have already been implemented in Forgejo before, because they are specific to Gitea&apos;s workflows, or otherwise are not agreed on by Forgejo reviewers. For an impression, the stats for the last weekly cherry-pick look like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Between gitea@35c86af164 and gitea@a92f5057ae, 41 commits have been reviewed. We picked 4, skipped 31 (of which 6 were already in Forgejo!), and decided to port 6.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After the set of cherry-picks has been reviewed and approved, the commits are merged so that they retain authorship information about the Gitea contributors.&lt;/p&gt;
&lt;p&gt;Over time, the two codebases will diverge further, and this procedure will become unfeasible some day. While contributors are still free to port individual changes from Gitea, it will stop being a routine task.&lt;/p&gt;
&lt;p&gt;We hope this reduces confusion about our current and expected future workflow. Please let us know in case there are any questions left or suggestions from your side.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/71rd&quot;&gt;https://codeberg.org/71rd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/achyrva&quot;&gt;https://codeberg.org/achyrva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AdamMajer&quot;&gt;https://codeberg.org/AdamMajer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alex619829&quot;&gt;https://codeberg.org/Alex619829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amano.kenji&quot;&gt;https://codeberg.org/amano.kenji&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anbraten&quot;&gt;https://codeberg.org/anbraten&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/angelnu&quot;&gt;https://codeberg.org/angelnu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/antaanimosity&quot;&gt;https://codeberg.org/antaanimosity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aqtrans&quot;&gt;https://codeberg.org/aqtrans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/atalanttore&quot;&gt;https://codeberg.org/atalanttore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avobs&quot;&gt;https://codeberg.org/avobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/awiteb&quot;&gt;https://codeberg.org/awiteb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/blumia&quot;&gt;https://codeberg.org/blumia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bmorel&quot;&gt;https://codeberg.org/bmorel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BSD&quot;&gt;https://codeberg.org/BSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/c8h4&quot;&gt;https://codeberg.org/c8h4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cdotnow&quot;&gt;https://codeberg.org/cdotnow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CEbbinghaus&quot;&gt;https://codeberg.org/CEbbinghaus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cobak78&quot;&gt;https://codeberg.org/cobak78&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/codenyte&quot;&gt;https://codeberg.org/codenyte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ConfusedOnCOFFEE&quot;&gt;https://codeberg.org/ConfusedOnCOFFEE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cwpute&quot;&gt;https://codeberg.org/Cwpute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/d2735&quot;&gt;https://codeberg.org/d2735&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/d96b&quot;&gt;https://codeberg.org/d96b&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danielbaumann&quot;&gt;https://codeberg.org/danielbaumann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/David-Guillot&quot;&gt;https://codeberg.org/David-Guillot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ddriggs&quot;&gt;https://codeberg.org/ddriggs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/doasu&quot;&gt;https://codeberg.org/doasu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dragon&quot;&gt;https://codeberg.org/dragon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EchedelleLR&quot;&gt;https://codeberg.org/EchedelleLR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emilylange&quot;&gt;https://codeberg.org/emilylange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eNBeWe&quot;&gt;https://codeberg.org/eNBeWe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/end3r-man&quot;&gt;https://codeberg.org/end3r-man&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ExtremelyMAD&quot;&gt;https://codeberg.org/ExtremelyMAD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/faoquad&quot;&gt;https://codeberg.org/faoquad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Frankkkkk&quot;&gt;https://codeberg.org/Frankkkkk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/furkangkhsn&quot;&gt;https://codeberg.org/furkangkhsn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gabrielgio&quot;&gt;https://codeberg.org/gabrielgio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/george.bartolomey&quot;&gt;https://codeberg.org/george.bartolomey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gratux&quot;&gt;https://codeberg.org/gratux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gravy59&quot;&gt;https://codeberg.org/Gravy59&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hacknorris&quot;&gt;https://codeberg.org/hacknorris&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/itsTurnip&quot;&gt;https://codeberg.org/itsTurnip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jak2k&quot;&gt;https://codeberg.org/jak2k&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jinn&quot;&gt;https://codeberg.org/jinn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jkirk&quot;&gt;https://codeberg.org/jkirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmakov&quot;&gt;https://codeberg.org/jmakov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnMoon-VTS&quot;&gt;https://codeberg.org/JohnMoon-VTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jornfranke&quot;&gt;https://codeberg.org/jornfranke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JSchlarb&quot;&gt;https://codeberg.org/JSchlarb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/julianfoad&quot;&gt;https://codeberg.org/julianfoad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kampka&quot;&gt;https://codeberg.org/kampka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kidsan&quot;&gt;https://codeberg.org/kidsan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/klausfyhn&quot;&gt;https://codeberg.org/klausfyhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kokomo&quot;&gt;https://codeberg.org/Kokomo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lapo&quot;&gt;https://codeberg.org/lapo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LinuxinaBit&quot;&gt;https://codeberg.org/LinuxinaBit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/litchipi&quot;&gt;https://codeberg.org/litchipi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lslalbai&quot;&gt;https://codeberg.org/lslalbai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lunny&quot;&gt;https://codeberg.org/lunny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/m_eiman_tlab&quot;&gt;https://codeberg.org/m_eiman_tlab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maks1mS&quot;&gt;https://codeberg.org/Maks1mS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/malik-n&quot;&gt;https://codeberg.org/malik-n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maniues&quot;&gt;https://codeberg.org/Maniues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcellmars&quot;&gt;https://codeberg.org/marcellmars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Matze99&quot;&gt;https://codeberg.org/Matze99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mbateman&quot;&gt;https://codeberg.org/mbateman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meaz&quot;&gt;https://codeberg.org/meaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Merith-TK&quot;&gt;https://codeberg.org/Merith-TK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/metamuffin&quot;&gt;https://codeberg.org/metamuffin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MHLut&quot;&gt;https://codeberg.org/MHLut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MichaelAgarkov&quot;&gt;https://codeberg.org/MichaelAgarkov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mimot&quot;&gt;https://codeberg.org/mimot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirkoperillo&quot;&gt;https://codeberg.org/mirkoperillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MrEvil&quot;&gt;https://codeberg.org/MrEvil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mvdkleijn&quot;&gt;https://codeberg.org/mvdkleijn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nazunalika&quot;&gt;https://codeberg.org/nazunalika&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nette&quot;&gt;https://codeberg.org/nette&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ng-dm&quot;&gt;https://codeberg.org/ng-dm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nirei&quot;&gt;https://codeberg.org/Nirei&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nobodyinperson&quot;&gt;https://codeberg.org/nobodyinperson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nostar&quot;&gt;https://codeberg.org/nostar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/notpushkin&quot;&gt;https://codeberg.org/notpushkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pasabanov&quot;&gt;https://codeberg.org/pasabanov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pedroberg&quot;&gt;https://codeberg.org/pedroberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pgmtx&quot;&gt;https://codeberg.org/pgmtx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/post-factum&quot;&gt;https://codeberg.org/post-factum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pylixonly&quot;&gt;https://codeberg.org/pylixonly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/QazCetelic&quot;&gt;https://codeberg.org/QazCetelic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/R1ckSanchez_C137&quot;&gt;https://codeberg.org/R1ckSanchez_C137&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/r3pek&quot;&gt;https://codeberg.org/r3pek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rosna2321&quot;&gt;https://codeberg.org/rosna2321&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scabala&quot;&gt;https://codeberg.org/scabala&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scruel&quot;&gt;https://codeberg.org/scruel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sdomi&quot;&gt;https://codeberg.org/sdomi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/senorsmile&quot;&gt;https://codeberg.org/senorsmile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sg-phoenix-technologies&quot;&gt;https://codeberg.org/sg-phoenix-technologies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ShalokShalom&quot;&gt;https://codeberg.org/ShalokShalom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shaowenwan&quot;&gt;https://codeberg.org/shaowenwan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SLASHLogin&quot;&gt;https://codeberg.org/SLASHLogin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/solonovamax&quot;&gt;https://codeberg.org/solonovamax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/spiffyk&quot;&gt;https://codeberg.org/spiffyk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stevenroose&quot;&gt;https://codeberg.org/stevenroose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tacaly&quot;&gt;https://codeberg.org/tacaly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/therealpim&quot;&gt;https://codeberg.org/therealpim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thezzisu&quot;&gt;https://codeberg.org/thezzisu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thilinajayanath&quot;&gt;https://codeberg.org/thilinajayanath&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timotheyca&quot;&gt;https://codeberg.org/timotheyca&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tobru&quot;&gt;https://codeberg.org/tobru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tusooa&quot;&gt;https://codeberg.org/tusooa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxmaster&quot;&gt;https://codeberg.org/tuxmaster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VadZ&quot;&gt;https://codeberg.org/VadZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vpotyarkin&quot;&gt;https://codeberg.org/vpotyarkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wang3076&quot;&gt;https://codeberg.org/wang3076&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wisher&quot;&gt;https://codeberg.org/wisher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/withlithum&quot;&gt;https://codeberg.org/withlithum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wneessen&quot;&gt;https://codeberg.org/wneessen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolftune&quot;&gt;https://codeberg.org/wolftune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xorander00&quot;&gt;https://codeberg.org/xorander00&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtrm&quot;&gt;https://codeberg.org/xtrm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeziruo&quot;&gt;https://codeberg.org/yeziruo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yp05327&quot;&gt;https://codeberg.org/yp05327&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zukka77&quot;&gt;https://codeberg.org/zukka77&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Gitea 1.22 is the last version to allow a transparent upgrade to Forgejo</title><link>https://forgejo.org/2024-12-gitea-compatibility/</link><guid isPermaLink="true">https://forgejo.org/2024-12-gitea-compatibility/</guid><description>The Forgejo v10.0.0 release to be published 15 January 2025 supports upgrade from Gitea instances up to version v1.22 included. Future Forgejo versions will not support upgrades from Gitea instances running version v1.23 or above.</description><pubDate>Wed, 18 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Forgejo v10.0.0 release to be published 15 January 2025 supports
upgrade from Gitea instances up to version v1.22 included. Future
Forgejo versions will not support upgrades from Gitea instances
running version v1.23 or above.&lt;/p&gt;
&lt;h2&gt;How will this impact me?&lt;/h2&gt;
&lt;p&gt;If you are running a Gitea instance and would like to upgrade your instance, here are your options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gitea versions up to v1.21 can be upgraded to Forgejo v7.0 (Long Term Support) or higher, up to v10.0 included&lt;/li&gt;
&lt;li&gt;Gitea v1.22 can be upgraded to Forgejo v8.0 or higher, up to v10.0 included&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Upgrade from Gitea to Forgejo versions higher than v10.0 is a two step process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migrate Gitea to Forgejo (e.g. Gitea v1.21 to Forgejo v7.0.10)&lt;/li&gt;
&lt;li&gt;Upgrade Forgejo to the desired version (e.g. Forgejo v7.0.10 to Forgejo v11.0.5)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are running Gitea 1.23 or higher, it may be possible to upgrade
to Forgejo v8.0.0 or higher, if you are ready to manually modify the
database and move the data around. You can get help in attempting that
but you should not expect more than a best effort.&lt;/p&gt;
&lt;p&gt;If you would like to move data from a Gitea instance that cannot be
upgraded to Forgejo, you can move repositories one-by-one using the
in-app migration tool. It will continue to work for as long as the
Gitea API remains stable.&lt;/p&gt;
&lt;h2&gt;Why is this happening?&lt;/h2&gt;
&lt;p&gt;In 2023 Forgejo was a soft fork, a set of patches maintained by the Forgejo
community on top of Gitea. In 2024 &lt;a href=&quot;/2024-02-forking-forward/&quot;&gt;it became a hard
fork&lt;/a&gt; and the codebases started to
diverge.&lt;/p&gt;
&lt;p&gt;A very significant effort was made by Forgejo contributors to keep
both codebases compatible and share the bug fixes and features.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/tools&quot;&gt;Tooling was developed&lt;/a&gt; to watch
over the Gitea codebase.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=%5Bgitea%5D+week&amp;amp;type=all&amp;amp;fuzzy=false&quot;&gt;Weekly cherry-pick sessions&lt;/a&gt;
were organized to discuss Gitea commits and evaluate their relevance in
Forgejo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the beginning &lt;code&gt;git cherry-pick&lt;/code&gt; was possible without conflict most
of the time. But it is less often the case because large scale
features were implemented in Forgejo such as
&lt;a href=&quot;https://forgejo.org/docs/v9.0/admin/quota/&quot;&gt;quotas&lt;/a&gt; and Gitea engaged
in dozens of refactors.&lt;/p&gt;
&lt;p&gt;Forgejo and Gitea are now effectively different codebases although
they share the same history back from the early days of Gogs. Features
and bug fixes are a source of inspiration to be ported manually and no
longer material for a clean &lt;code&gt;cherry-pick&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Why now?&lt;/h2&gt;
&lt;p&gt;Most hard fork do not invest so much time and effort to keep in sync
with the original codebase. And for a reason: it turns out to not be
very exciting. But it was very beneficial while it lasted: dozens of
bug fixes landed in Forgejo and allowed contributors to focus on more
interesting matters.&lt;/p&gt;
&lt;p&gt;A year ago it was impossible to guess how long it would take for
Forgejo to become incompatible with Gitea. It was inevitable but it
could have happened a lot sooner.&lt;/p&gt;
&lt;p&gt;Forgejo is incompatible with Gitea v1.23 for instance because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modifications in the Gitea database are not in the Forgejo database
(e.g. indices in actions, priority for protected branches)&lt;/li&gt;
&lt;li&gt;Some Gitea features have a completely different implementation in
Forgejo (e.g. admin branch protection)&lt;/li&gt;
&lt;li&gt;Some sub systems have been re-architectured deeply in Forgejo or Gitea
(e.g. webhooks in Forgejo)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Such differences were worked on as part of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=%5Bgitea%5D+week&amp;amp;type=all&amp;amp;fuzzy=false&quot;&gt;weekly
chore&lt;/a&gt;
to keep the two codebases close to each other and ensure a upgrade
from Gitea to Forgejo was a seamless experience. As can be expected,
the difficulty increases in direct proportion of the drift between the
two codebases.&lt;/p&gt;
&lt;p&gt;It reached a point where the benefits are no longer worth the effort.&lt;/p&gt;
&lt;h2&gt;Would Gitea be willing to help?&lt;/h2&gt;
&lt;p&gt;If Gitea was a community driven project, this may have been
possible. But the reason for Forgejo to exist was &lt;a href=&quot;https://gitea-open-letter.coding.social/&quot;&gt;disagreement about
the governance of the project&lt;/a&gt;,
and naturally this situation has not improved. By now,
&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/102&quot;&gt;Gitea is Open Core&lt;/a&gt;
and several attempts by the Forgejo community to upstream changes have lead to
tensions.&lt;/p&gt;
&lt;p&gt;In the past year Gitea did not make any effort to keep both codebases
compatible or help Forgejo. It actually did the exact opposite a
number of times, re-implementing bug fixes or features shortly after
they were published in Forgejo. In doing so, Gitea has intentionally
or carelessly precipitated the divergence.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - November 2024</title><link>https://forgejo.org/2024-11-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-11-monthly-update/</guid><description>A security audit and internal preparations have lead to unprecedented security releases for Forgejo and the Forgejo Actions runner. The migration to a new k8s cluster has made huge progress and is now powering the Forgejo-specific services in production. Improvements have been made to the performance and stability of Forgejo as well as to the automated testing process.</description><pubDate>Thu, 05 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Forgejo releases&lt;/h2&gt;
&lt;p&gt;The Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8610&quot;&gt;v9.0.2&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8609&quot;&gt;v7.0.11&lt;/a&gt; security releases were published. They have an unprecedented number of security fixes, some of which took months to mature. The difficulty in working on multiple security fixes is that they need to be combined and verified before the release date, to minimize the chances that issues are discovered at the last minute, on the day of the release. The release team has set up the tools to work with the security team in these preparations. In a nutshell it duplicates the Forgejo development setup but strips out the workflows that are not useful in this context.&lt;/p&gt;
&lt;p&gt;The Forgejo release process grew and transformed significantly and frequently to adapt to a moving landscape. The two most significant events were the switch from Woodpecker CI to Forgejo Actions as soon as it was released early 2023. And earlier this year, Forgejo became independent of Gitea, which led to the definition of a new release cycle and the first instance of a long term support release.&lt;/p&gt;
&lt;p&gt;It stabilized over the past six months and that allowed for the emergence of tools with the goal automate what is still currently a largely &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/5380&quot;&gt;manual and long checklist&lt;/a&gt;. The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/6055&quot;&gt;checklist for the upcoming v10.0 release&lt;/a&gt; tracks their progress. The first two developments are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/docs/src/branch/next/release-schedule.json&quot;&gt;machine readable release schedule&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;An &lt;a href=&quot;https://code.forgejo.org/forgejo/release-scheduler&quot;&gt;action to cut branches, set branch protections and manage backport labels&lt;/a&gt; to be used by &lt;a href=&quot;https://codeberg.org/forgejo/docs/src/commit/84b315c3985f9f59a17db7a2f6cdfcd2ac124d17/.forgejo/workflows/forgejo-release-sync.yml&quot;&gt;the documentation repository&lt;/a&gt; and later by the Forgejo repository itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Forgejo Actions&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/204&quot;&gt;security audit&lt;/a&gt; began mid November and some of its findings were fixed. It led to the publication of multiple releases from &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v4.0.1&quot;&gt;4.0.1&lt;/a&gt; to &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v5.0.2&quot;&gt;5.0.2&lt;/a&gt;. They also include better control for verbosity and graceful handling of some corner cases that would crash the runner.&lt;/p&gt;
&lt;p&gt;Codeberg started to &lt;a href=&quot;https://codeberg.org/actions/meta&quot;&gt;offer hosted Forgejo Actions&lt;/a&gt;, the service is considered open alpha.
If you didn&apos;t get to trying Forgejo Actions with a self-hosted runner yet,
you can now give it a try with the hosted runner,
in case your projects meet the requirements of Codeberg.org.&lt;/p&gt;
&lt;p&gt;The extensive usage of Forgejo Actions for the development of Forgejo itself reveals bugs in edge cases from time to time.
A workflow which checks labels in a pull request as a merge condition was added, temporarily reverted, and
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5886&quot;&gt;re-added&lt;/a&gt; after &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5778&quot;&gt;relevant bugs were addressed&lt;/a&gt;.
Several &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5831&quot;&gt;related issues&lt;/a&gt; were discovered and fixed,
and working with label events in pull requests can now be considered more mature in Forgejo Actions.&lt;/p&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;Some OpenShift compatibility on chart version v10.1 and bug fix releases for v7 and v10 for the Forgejo security releases.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Accessibility&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6059&quot;&gt;Improvements to colorblind themes&lt;/a&gt; were implemented.
There is an ongoing discussion about this topic.
If you rely on Forgejo&apos;s colorblind themes,
or would like to but can&apos;t use the themes,
consider getting involved in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/245&quot;&gt;discussion post&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;Two new members have joined the localization team with the intention of maintaining Latvian and Low German translations.&lt;/p&gt;
&lt;p&gt;The work on the new translation for Low German started in October and the translation is now completed, only proofreading remains. This language will be available to users in Forgejo v10 and can already be tested out on the &lt;a href=&quot;https://dev.next.forgejo.org/&quot;&gt;dev instance&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A new script was created to process translation files. It allows to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6060&quot;&gt;perform backporting of translations safely&lt;/a&gt; which was done for v9 as well as other maintenance chores such as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6090&quot;&gt;removal of orphan strings and duplicates&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/&quot;&gt;k8s cluster&lt;/a&gt; bootstrapped in October has matured and is now in production, hosting all services that previously were &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/src/commit/971bfed24bd2caa448013c33cfa592f5e67d2230/drbd-nginx-lxc.md&quot;&gt;using ad-hoc scripts&lt;/a&gt;. It was initially motivated &lt;a href=&quot;https://forgejo.org/2024-10-monthly-update/#infrastructure&quot;&gt;to improve the availability of the Forgejo resources&lt;/a&gt; in the wake of a downtime that disrupted &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt; during 10 hours in September. For this migration two new &lt;a href=&quot;https://www.hetzner.com/dedicated-rootserver/ex44&quot;&gt;EX44&lt;/a&gt; machines (one in Germany, the other in Finland) were setup and replace a larger &lt;a href=&quot;https://www.hetzner.com/dedicated-rootserver/ex101/&quot;&gt;EX101&lt;/a&gt; machine.&lt;/p&gt;
&lt;p&gt;Another benefit of the k8s cluster is that it does not require manual intervention, it is driven by the repository that defines it. This will allow, for instance, for a workflow to dynamically and automatically provision and modify test instances (&lt;a href=&quot;https://v7.next.forgejo.org&quot;&gt;https://v7.next.forgejo.org&lt;/a&gt;, &lt;a href=&quot;https://v10.next.forgejo.org&quot;&gt;https://v10.next.forgejo.org&lt;/a&gt;, etc.) based on the &lt;a href=&quot;https://codeberg.org/forgejo/docs/src/branch/next/release-schedule.json&quot;&gt;machine readable release schedule&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Renovate&lt;/h2&gt;
&lt;p&gt;Some more repos adopted to use automated Renovate updates.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo-contrib/forgejo-renovate/src/branch/main/src/config.json#L8&quot;&gt;https://code.forgejo.org/forgejo-contrib/forgejo-renovate/src/branch/main/src/config.json#L8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Testing efficiency&lt;/h2&gt;
&lt;p&gt;Careful testing is an important goal within the Forgejo community
and contributions to Forgejo need reasonable test coverage in order to be accepted.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5817&quot;&gt;Migration tests for Gitea&lt;/a&gt; and
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5816&quot;&gt;GitHub&lt;/a&gt; existed, but were not yet run.
They have now been enabled, improving test coverage for migrations across forges.&lt;/p&gt;
&lt;p&gt;Running test pipelines for a project at Forgejo&apos;s scale has significant costs,
not only financially but also ecologically.
Reducing energy consumption as well as feedback time is important.&lt;/p&gt;
&lt;p&gt;Several contributors picked up the task and made the journey to improve the situation.
From &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5771&quot;&gt;improvements&lt;/a&gt; increasing &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5954&quot;&gt;quality and speed&lt;/a&gt; to
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5929&quot;&gt;refactors to improve reliability and avoid unnecessary retries&lt;/a&gt;,
this month was very active with CI/CD and test optimizations.&lt;/p&gt;
&lt;p&gt;Several PRs like &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5956&quot;&gt;this one&lt;/a&gt; successively moved a lot of test data into memory,
not only speeding up the tests but also reducing writes and thus disk wear on the hardware.
Finally, even some database parameters were tuned for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5957&quot;&gt;MySQL&lt;/a&gt;
and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5962&quot;&gt;PostgreSQL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/247&quot;&gt;more ideas on how to continue towards sustainable and efficient CI/CD&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Performance at scale&lt;/h2&gt;
&lt;p&gt;During moments of extreme load at Codeberg,
some insights about &lt;a href=&quot;https://codeberg.org/Codeberg-Infrastructure/build-deploy-forgejo/issues/144&quot;&gt;slow database queries have been shared&lt;/a&gt; to the Forgejo community.
Improvements were quickly integrated in the next version of Forgejo,
scheduled for publication in January 2025.&lt;/p&gt;
&lt;p&gt;Especially subqueries that use &lt;code&gt;WHERE ... IN&lt;/code&gt; instead of &lt;code&gt;JOIN&lt;/code&gt;
can lead to poor performance with MariaDB,
as can be seen on Codeberg.
Small contributions in this area,
such as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6100&quot;&gt;this simple change&lt;/a&gt; can bring significant improvement.
After deploying this change to Codeberg, the &quot;New repository&quot; page now loads significantly faster
(down from up to 3 seconds back into a millisecond range).
More contributions in this area are more than welcome.&lt;/p&gt;
&lt;h2&gt;Stability and database corruption at Codeberg&lt;/h2&gt;
&lt;p&gt;In some cases, Forgejo&apos;s database can get inconsistent,
and there is a &lt;a href=&quot;https://forgejo.org/docs/next/admin/command-line/#doctor-check&quot;&gt;command-line tool&lt;/a&gt;
(the &quot;doctor&quot;) to perform checks and fix the database.
Especially on busy instances, doing this regularly is recommended to clean stale data and discover issues.&lt;/p&gt;
&lt;p&gt;However, while running this on Codeberg, a corruption issue was discovered and fixed.
The consistency checker &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/6054&quot;&gt;incorrectly deleted
global OAuth2 applications&lt;/a&gt;,
because they do not have a user assigned.&lt;/p&gt;
&lt;p&gt;Users of global OAuth2 applications are advised not to run the doctor until the fix is released in Forgejo v9.0.3.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0n1cOn3&quot;&gt;https://codeberg.org/0n1cOn3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/71rd&quot;&gt;https://codeberg.org/71rd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/achyrva&quot;&gt;https://codeberg.org/achyrva&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aljazerzen&quot;&gt;https://codeberg.org/aljazerzen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anbraten&quot;&gt;https://codeberg.org/anbraten&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andar1an&quot;&gt;https://codeberg.org/andar1an&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/angelnu&quot;&gt;https://codeberg.org/angelnu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/antaanimosity&quot;&gt;https://codeberg.org/antaanimosity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Arsen&quot;&gt;https://codeberg.org/Arsen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atalanttore&quot;&gt;https://codeberg.org/Atalanttore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/atimy&quot;&gt;https://codeberg.org/atimy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atul_Eterno&quot;&gt;https://codeberg.org/Atul_Eterno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avobs&quot;&gt;https://codeberg.org/avobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/awiteb&quot;&gt;https://codeberg.org/awiteb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AYM1607&quot;&gt;https://codeberg.org/AYM1607&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bachorp&quot;&gt;https://codeberg.org/bachorp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Baempaieo&quot;&gt;https://codeberg.org/Baempaieo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/baltazar&quot;&gt;https://codeberg.org/baltazar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bartvdbraak&quot;&gt;https://codeberg.org/bartvdbraak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benniekiss&quot;&gt;https://codeberg.org/benniekiss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/billynoah&quot;&gt;https://codeberg.org/billynoah&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/blaise&quot;&gt;https://codeberg.org/blaise&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bmcclure&quot;&gt;https://codeberg.org/bmcclure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/c8h4&quot;&gt;https://codeberg.org/c8h4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cfebs&quot;&gt;https://codeberg.org/cfebs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CN-P5&quot;&gt;https://codeberg.org/CN-P5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cobak78&quot;&gt;https://codeberg.org/cobak78&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/d-k-bo&quot;&gt;https://codeberg.org/d-k-bo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danielbaumann&quot;&gt;https://codeberg.org/danielbaumann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DanielGibson&quot;&gt;https://codeberg.org/DanielGibson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/David-Guillot&quot;&gt;https://codeberg.org/David-Guillot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/daylien&quot;&gt;https://codeberg.org/daylien&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dcz_pf&quot;&gt;https://codeberg.org/dcz_pf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dobrvlskyi&quot;&gt;https://codeberg.org/dobrvlskyi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ds-cbo&quot;&gt;https://codeberg.org/ds-cbo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ERROR404&quot;&gt;https://codeberg.org/ERROR404&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EssGeeEich&quot;&gt;https://codeberg.org/EssGeeEich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/famfo&quot;&gt;https://codeberg.org/famfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/faoquad&quot;&gt;https://codeberg.org/faoquad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Felitendo&quot;&gt;https://codeberg.org/Felitendo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FermeLeLundi&quot;&gt;https://codeberg.org/FermeLeLundi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fina&quot;&gt;https://codeberg.org/fina&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fjordo&quot;&gt;https://codeberg.org/fjordo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flexstrongo&quot;&gt;https://codeberg.org/flexstrongo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GDWR&quot;&gt;https://codeberg.org/GDWR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gming&quot;&gt;https://codeberg.org/gming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gnu1&quot;&gt;https://codeberg.org/Gnu1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gravy59&quot;&gt;https://codeberg.org/Gravy59&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gregdechene&quot;&gt;https://codeberg.org/gregdechene&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gtsiam&quot;&gt;https://codeberg.org/gtsiam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hacknorris&quot;&gt;https://codeberg.org/hacknorris&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/halibut&quot;&gt;https://codeberg.org/halibut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/io7m&quot;&gt;https://codeberg.org/io7m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ironfractal&quot;&gt;https://codeberg.org/Ironfractal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/itsTurnip&quot;&gt;https://codeberg.org/itsTurnip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iustin&quot;&gt;https://codeberg.org/iustin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jinn&quot;&gt;https://codeberg.org/jinn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmakov&quot;&gt;https://codeberg.org/jmakov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jornfranke&quot;&gt;https://codeberg.org/jornfranke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jpkhawam&quot;&gt;https://codeberg.org/jpkhawam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/julianfoad&quot;&gt;https://codeberg.org/julianfoad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/k8ie&quot;&gt;https://codeberg.org/k8ie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kassuro&quot;&gt;https://codeberg.org/kassuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kokomo&quot;&gt;https://codeberg.org/Kokomo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kurets&quot;&gt;https://codeberg.org/kurets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kwoot&quot;&gt;https://codeberg.org/kwoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lweller&quot;&gt;https://codeberg.org/lweller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lzebulon&quot;&gt;https://codeberg.org/Lzebulon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mafen&quot;&gt;https://codeberg.org/mafen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Maniues&quot;&gt;https://codeberg.org/Maniues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcellmars&quot;&gt;https://codeberg.org/marcellmars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcoaraujojunior&quot;&gt;https://codeberg.org/marcoaraujojunior&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mark3xtrm&quot;&gt;https://codeberg.org/Mark3xtrm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mehrad&quot;&gt;https://codeberg.org/mehrad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Merith-TK&quot;&gt;https://codeberg.org/Merith-TK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mfenniak&quot;&gt;https://codeberg.org/mfenniak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/michael-sparrow&quot;&gt;https://codeberg.org/michael-sparrow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MichaelAgarkov&quot;&gt;https://codeberg.org/MichaelAgarkov&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mjesusdev&quot;&gt;https://codeberg.org/mjesusdev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlucas&quot;&gt;https://codeberg.org/mlucas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/morvy&quot;&gt;https://codeberg.org/morvy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mvdkleijn&quot;&gt;https://codeberg.org/mvdkleijn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mysticmode&quot;&gt;https://codeberg.org/mysticmode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/natct&quot;&gt;https://codeberg.org/natct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ng-dm&quot;&gt;https://codeberg.org/ng-dm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nostar&quot;&gt;https://codeberg.org/nostar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/onerandomusername&quot;&gt;https://codeberg.org/onerandomusername&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paspflue&quot;&gt;https://codeberg.org/paspflue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patrickuhlmann&quot;&gt;https://codeberg.org/patrickuhlmann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Peaksol&quot;&gt;https://codeberg.org/Peaksol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Piturnah&quot;&gt;https://codeberg.org/Piturnah&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pointlessone&quot;&gt;https://codeberg.org/pointlessone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/psentee&quot;&gt;https://codeberg.org/psentee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PurpleBooth&quot;&gt;https://codeberg.org/PurpleBooth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RagnarGrootKoerkamp&quot;&gt;https://codeberg.org/RagnarGrootKoerkamp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/raspher&quot;&gt;https://codeberg.org/raspher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ReptoxX&quot;&gt;https://codeberg.org/ReptoxX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rfc2549&quot;&gt;https://codeberg.org/rfc2549&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shaowenwan&quot;&gt;https://codeberg.org/shaowenwan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shinebayar-g&quot;&gt;https://codeberg.org/shinebayar-g&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Silejonu&quot;&gt;https://codeberg.org/Silejonu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/solonovamax&quot;&gt;https://codeberg.org/solonovamax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SpareJoe&quot;&gt;https://codeberg.org/SpareJoe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/spiffyk&quot;&gt;https://codeberg.org/spiffyk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stb&quot;&gt;https://codeberg.org/stb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefinn93&quot;&gt;https://codeberg.org/thefinn93&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thilinajayanath&quot;&gt;https://codeberg.org/thilinajayanath&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timotheyca&quot;&gt;https://codeberg.org/timotheyca&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Tom3201&quot;&gt;https://codeberg.org/Tom3201&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tseeker&quot;&gt;https://codeberg.org/tseeker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VA1DER&quot;&gt;https://codeberg.org/VA1DER&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VadZ&quot;&gt;https://codeberg.org/VadZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/WithLithum&quot;&gt;https://codeberg.org/WithLithum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolftune&quot;&gt;https://codeberg.org/wolftune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xenrox&quot;&gt;https://codeberg.org/xenrox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yumechi&quot;&gt;https://codeberg.org/yumechi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zip&quot;&gt;https://codeberg.org/Zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - October 2024</title><link>https://forgejo.org/2024-10-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-10-monthly-update/</guid><description>Forgejo is two years old and has been a lively human adventure, a story worth telling. A hackathon organized by Codeberg generated thousands of new translations. Forgejo v9.0.0 was published, as well as a security patch release which was backported to Forgejo v7, the six month old Long Term Support version. A kubernetes cluster was created to replace the current infrastructure, running Forgejo from the Helm Chart.</description><pubDate>Thu, 31 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Two years - a recap&lt;/h2&gt;
&lt;p&gt;In October 2022 &lt;a href=&quot;https://gitea-open-letter.coding.social/&quot;&gt;Forgejo was announced&lt;/a&gt; in reaction to the takeover of &lt;a href=&quot;https://en.wikipedia.org/wiki/Gitea#Forgejo_fork&quot;&gt;Gitea&lt;/a&gt;. After a two months of preparation, &lt;a href=&quot;https://forgejo.org/2022-12-26-monthly-update/&quot;&gt;the first release&lt;/a&gt; was published and &lt;a href=&quot;https://blog.codeberg.org/codeberg-launches-forgejo.html&quot;&gt;Codeberg announced&lt;/a&gt; using it because &lt;em&gt;&quot;it provides Codeberg with an essential feature: trust&quot;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/2023-01-31-monthly-update/#security-releases&quot;&gt;security team&lt;/a&gt; got quite busy soon and &lt;a href=&quot;https://forgejo.org/2023-01-31-monthly-update/&quot;&gt;published multiple releases&lt;/a&gt;. The release team was also able to deliver but &lt;a href=&quot;https://forgejo.org/2023-02-12-tags/&quot;&gt;a mistake was made&lt;/a&gt;. This was the first occasion for Forgejo to show that problems are explained transparently and their impact articulated clearly. The integrated CI, Forgejo Actions, &lt;a href=&quot;https://forgejo.org/2023-02-27-forgejo-actions/&quot;&gt;was announced&lt;/a&gt; and &lt;a href=&quot;https://forgejo.org/2023-03-monthly-update/#dogfooding-forgejo-actions&quot;&gt;started to be used by Forgejo itself&lt;/a&gt; very early on.&lt;/p&gt;
&lt;p&gt;In February 2023 someone new (who wasn’t a contributor that the project is relying on) joined the chat and issue tracker, spoke repeatedly in ways that was hurtful/painful to Forgejo community members, and did not seem to have capacity to speak more sensitively, despite offers for support and repeated requests. &lt;a href=&quot;https://forgejo.org/2023-03-monthly-update/#the-forgejo-community-is-healing&quot;&gt;It distracted community members from productive and important work&lt;/a&gt; on governance, strategy and development. Some community members went silent, others were on edge. The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/commit/5c07b3801537212ed6be1edfec298d7b004ce92d/MODERATION-PROCESS.md&quot;&gt;moderation process&lt;/a&gt; was created during these challenging times. It took months for the community to heal.&lt;/p&gt;
&lt;p&gt;In search for long term sustainability, &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/1&quot;&gt;the first grant application&lt;/a&gt; was sent. It was awarded and the funds allowed Codeberg to hire developers early 2024. It was not perfectly managed and &lt;a href=&quot;https://forgejo.org/2024-09-monthly-update/#sustainability&quot;&gt;in December 2024&lt;/a&gt; a significant part of the funds will be returned because they were not spent. It currently is the priority of the sustainability team &lt;a href=&quot;https://forgejo.org/2024-08-monthly-update/#sustainability&quot;&gt;established in August 2024&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After weeks of discussions, a decision was made to &lt;a href=&quot;https://forgejo.org/2023-06-copyleft/&quot;&gt;welcome copyleft contributions in Forgejo&lt;/a&gt; in June 2023. The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/commit/5c07b3801537212ed6be1edfec298d7b004ce92d/DECISION-MAKING.md&quot;&gt;Forgejo decision making process&lt;/a&gt; requires that all concerns are heard and answered before a decision is final. It takes long but is also a key to being inclusive. It became a reality &lt;a href=&quot;https://forgejo.org/2024-08-gpl/&quot;&gt;a year later, in August 2024&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Forgejo federation is and will always be the highest priority of the Forgejo project. Every month, since the beginning, &lt;a href=&quot;https://forgejo.org/2023-06-monthly-update/#state-of-the-forge-federation-2023-edition&quot;&gt;updates on its progress&lt;/a&gt; are published. It is still not in a usable state, two years later, and that has caused some frustration &lt;a href=&quot;https://forgejo.org/2024-08-monthly-update/#federation&quot;&gt;but the work continues&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In August 2023 &lt;a href=&quot;https://forgejo.org/2023-08-release-v1-20-3-0/#fixing-the-risk-of-data-loss-related-to-storage-sections&quot;&gt;a regression was discovered&lt;/a&gt; to cause data loss. A lot of work went into fixing it and publishing documentation explaining how to recover. It was caused by a refactor that was not properly tested and was one of the main motivation to require that &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/commit/5c07b3801537212ed6be1edfec298d7b004ce92d/PullRequestsAgreement.md&quot;&gt;every pull request merged in Forgejo is tested&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://forgejo.org/2023-09-monthly-update/&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;https://forgejo.org/2023-10-monthly-update/&quot;&gt;last&lt;/a&gt; &lt;a href=&quot;https://forgejo.org/2023-11-monthly-update/&quot;&gt;months&lt;/a&gt; of 2023, Forgejo contributors kept improving while rebasing all the changes on top of the Gitea codebase. However, when Gitea Cloud was announced in December 2023 and after &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/92&quot;&gt;some investigation&lt;/a&gt;, it became clear that &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/102&quot;&gt;Gitea turned Open Core&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In January 2024, &lt;a href=&quot;https://forgejo.org/2024-01-monthly-update/#localization&quot;&gt;the Forgejo localization&lt;/a&gt; team came into existence, in anticipation of a hard fork. Before that, the Forgejo translations depended on Gitea translations which are trapped in a proprietary service. The initial localization team covered Arabic, Dutch, French, Russian, Greek and German and kept growing since.&lt;/p&gt;
&lt;p&gt;Forgejo was ready for such an event and &lt;a href=&quot;https://forgejo.org/2024-02-forking-forward/&quot;&gt;declared its intention to become a hard fork&lt;/a&gt;, separating itself from Gitea even further. Just as for the decision to welcome copyleft contributions, this required weeks of (sometime intense) discussions. And it also &lt;a href=&quot;https://forgejo.org/2024-02-monthly-update/#implementation-of-the-hard-fork&quot;&gt;took weeks of work to be implemented&lt;/a&gt; in March 2023. Coincidentally the Open Core turn of Gitea was confirmed when a the first proprietary version of Gitea was announced around the same time.&lt;/p&gt;
&lt;p&gt;There was a sense of liberation when the hard fork began: it was possible to write code incompatible with the Gitea codebase! But there was also a price to pay: features and bug fixes relying on such code could not be shared with Gitea. It would have been easy to be carried away and get stuck with not enough contributors to maintain a codebase that diverged too quickly. To mitigate that risk &lt;a href=&quot;https://forgejo.org/2024-04-monthly-update/#dependency-management&quot;&gt;dependency management tooling&lt;/a&gt; and a weekly observation of Gitea activity was organized and is still in place.&lt;/p&gt;
&lt;p&gt;The Forgejo v9.0 release that &lt;a href=&quot;https://forgejo.org/2024-10-release-v9-0/&quot;&gt;was published in October 2024&lt;/a&gt; is the third major release after the hard fork. It includes a feature that would have never been possible before (quotas) because it requires architectural changes conflicting with the Gitea codebase. Forgejo v7 is a &lt;a href=&quot;https://forgejo.org/2024-04-release-v7-0/&quot;&gt;Long Term Support release&lt;/a&gt;, the first of its kind, supported during a year instead of three months. It is another benefit of the hard fork, made possible because Forgejo is no longer bound to the Gitea release cycle.&lt;/p&gt;
&lt;p&gt;In these past two years Forgejo matured and transformed into an independent project, with a solid user base and a lively community of contributors. It involved a lot of coding and other time consuming technical work. But it was first and foremost a human adventure, with its share of plot twists and drama.&lt;/p&gt;
&lt;h2&gt;Forgejo releases&lt;/h2&gt;
&lt;p&gt;On 16 October &lt;a href=&quot;https://forgejo.org/2024-10-release-v9-0/&quot;&gt;Forgejo v9.0 was published&lt;/a&gt;. It is the first version to be released under a copyleft license. Codeberg was upgraded a week later. Regressions were discovered and fixed. Some of them were only noticeable visually (diagrams not showing labels or the displayed name of archives). Another was about the container image size that grew significantly (&lt;a href=&quot;https://code.forgejo.org/forgejo/-/packages/container/forgejo/9.0.0&quot;&gt;180MB for v9.0.0&lt;/a&gt;) and was reduced to &lt;a href=&quot;https://code.forgejo.org/forgejo/-/packages/container/forgejo/9.0.1&quot;&gt;70MB for v9.0.1&lt;/a&gt;, back to the size of the &lt;a href=&quot;https://code.forgejo.org/forgejo/-/packages/container/forgejo/7&quot;&gt;Forgejo v7&lt;/a&gt; images.&lt;/p&gt;
&lt;p&gt;On 28 October &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#9-0-1&quot;&gt;Forgejo v9.0.1&lt;/a&gt; was published and fixes those regressions. It also contains two security fixes that were backported and published as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-10&quot;&gt;Forgejo v7.0.10&lt;/a&gt;, the Long Term Support version.&lt;/p&gt;
&lt;p&gt;These releases are the first to reflect the new Forgejo lifecycle. Before Long Term Release support existed, only v9 and v8 would have been supported, i.e. the last two major versions. But since &lt;a href=&quot;https://forgejo.org/docs/next/contributor/release/#release-cycle&quot;&gt;v7 is supported until July 2025&lt;/a&gt;, the supported versions are now v9 and v7, i.e. the latest version and the long term support version.&lt;/p&gt;
&lt;h2&gt;User Research&lt;/h2&gt;
&lt;p&gt;The user research team conducted &lt;a href=&quot;https://codeberg.org/forgejo/user-research/src/branch/main/surveys/repository-settings&quot;&gt;a survey regarding the repository settings&lt;/a&gt; during two weeks in October. It encouraged participation by showing banners to users of Codeberg in the repository section, linking to an external survey on Cryptpad.&lt;/p&gt;
&lt;p&gt;There have been 118 submissions and the analysis is still ongoing, but there is already valuable feedback among the reviewed feedback. Thanks to all the participants!&lt;/p&gt;
&lt;p&gt;There has been a rather &lt;a href=&quot;https://codeberg.org/forgejo/user-research/src/commit/cd211e8cd40497a5e6e677a9d38b5450a2f519f9/interviews/other-feedback/2024-10-10-accessibility.md&quot;&gt;spontaneous interview regarding accessibility&lt;/a&gt; with a Codeberg user. They reported a serious issue with their screen reader, which we didn&apos;t yet manage to reproduce (even after a contributor set up a test environment with the proprietary operating system and the screen reader). Investigation of this issue currently has high priority and we hope to fix the issues as soon as possible.&lt;/p&gt;
&lt;h2&gt;Security Policy&lt;/h2&gt;
&lt;p&gt;Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/185&quot;&gt;published&lt;/a&gt; its &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/SECURITY-POLICY.md&quot;&gt;security policy&lt;/a&gt; to clarify communication and collaboration of the Forgejo security team with external parties such as libraries, security researchers and users.&lt;/p&gt;
&lt;p&gt;Advance notice of security releases are &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues&quot;&gt;available publicly&lt;/a&gt;. They do not contain specific information until the day of the release and are meant to help Forgejo admin plan for an upgrade.&lt;/p&gt;
&lt;p&gt;Gitea was given a detailed description of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/8544&quot;&gt;security issues&lt;/a&gt; fixed in the the v9.0.1 and v7.0.10 releases in advance, as well as a patch waiving copyright to fix them. From now on, any third party willing to receive such details in advance is required to explicitly agree to comply with the security policy.&lt;/p&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;A new major version, &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v10.0.0&quot;&gt;10.0.0&lt;/a&gt; was published. It updates the Forgejo docker tag to v9.&lt;/p&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;security patch updates&lt;/a&gt;, in both v7 and v10. &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.1.3&quot;&gt;Helm chart v7.1.3&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v10.0.1&quot;&gt;v10.0.1&lt;/a&gt; are the latest.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/Codeberg/translathon-2024#translathon-2024&quot;&gt;translation hackathon (translathon)&lt;/a&gt; organized by Codeberg this month resulted in many new contributors joining and making thousands of additions and improvements.&lt;/p&gt;
&lt;p&gt;In total, 57 people contributed to the translations this month, which is significantly more than any previous month.&lt;/p&gt;


&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5703&quot;&gt;new script&lt;/a&gt; was added to process the localization files and verify that they contain only valid HTML insertions that follow the strictly defined rules. This should make it nearly impossible to insert malicious HTML.&lt;/p&gt;
&lt;p&gt;Due to project&apos;s legacy, the localization strings traditionally were able to contain any arbitrary HTML code and often had hardcoded links and other aging code. The addition of this script reduces the number of attack vectors on Forgejo&apos;s codebase and improves it&apos;s maintainability. Fortunately, there have been no security incidents caused by this flaw.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;A new &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/src/commit/42b69d45dc19bfcca53b7174c4b394c89bb3d8c6/README.md&quot;&gt;k8s cluster&lt;/a&gt; was created and planned to replace the &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/src/commit/31044c95882a4dd9b3c463c81f060586f2dc96f2/README.md&quot;&gt;current setup&lt;/a&gt;. Instead of ad-hoc scripts, conventions and associated documentation, it relies on a &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster/src/commit/42b69d45dc19bfcca53b7174c4b394c89bb3d8c6/flux&quot;&gt;declarative description&lt;/a&gt; that updates the cluster when a commit is pushed to the repository.&lt;/p&gt;
&lt;p&gt;It went through a few disaster recovery tests and is now in production, hosting &lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt; and &lt;a href=&quot;https://v7.next.forgejo.org&quot;&gt;https://v7.next.forgejo.org&lt;/a&gt;, ready to welcome other Forgejo instances.&lt;/p&gt;
&lt;p&gt;The motivation for creating this new cluster is to improve the availability of &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt; in the &lt;a href=&quot;https://forgejo.org/2024-09-monthly-update/#infrastructure&quot;&gt;wake of last month downtime&lt;/a&gt;. But it also significantly improves automation and reduces the technical debt. It will obsolete the ad-hoc scripts (&lt;a href=&quot;https://code.forgejo.org/infrastructure/wakeup-on-logs&quot;&gt;wakeup-on-logs&lt;/a&gt;, &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/src/commit/31044c95882a4dd9b3c463c81f060586f2dc96f2/README.md&quot;&gt;shell scripts&lt;/a&gt;, ...), conventions and &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/src/commit/31044c95882a4dd9b3c463c81f060586f2dc96f2/README.md&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A k8s cluster is more attractive to Forgejo contributors who are willing to improve and maintain the infrastructure. They are in familiar territory if they already know k8s and do not need to learn new tools. They can start contributing with pull requests to the &lt;a href=&quot;https://codeberg.org/forgejo/k8s-cluster&quot;&gt;repository describing the cluster&lt;/a&gt; and eventually apply to become a member of the devops team when they gained enough trust.&lt;/p&gt;
&lt;p&gt;It is a lot more work to learn k8s from scratch than it is to learn the current ad-hoc system from scratch. From that point of view, this transformation does not make it easier to find volunteers willing to participate. However, there are a lot of devops who already learned k8s while nobody knows the current ad-hoc system. They do not need to learn k8s and can jump right in.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;The beneficiaries of the NLnet grant application sent in April 2024 are no longer available. A &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/63#issuecomment-2391355&quot;&gt;call for participation&lt;/a&gt; was posted to find Forgejo contributors willing to participate.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/242336&quot;&gt;https://codeberg.org/242336&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/413x1nkp&quot;&gt;https://codeberg.org/413x1nkp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aleksi&quot;&gt;https://codeberg.org/aleksi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AliveDevil&quot;&gt;https://codeberg.org/AliveDevil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/amano.kenji&quot;&gt;https://codeberg.org/amano.kenji&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anbraten&quot;&gt;https://codeberg.org/anbraten&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/artnay&quot;&gt;https://codeberg.org/artnay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/atarwn&quot;&gt;https://codeberg.org/atarwn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atul_Eterno&quot;&gt;https://codeberg.org/Atul_Eterno&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avobs&quot;&gt;https://codeberg.org/avobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/balinteus&quot;&gt;https://codeberg.org/balinteus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/be4zad&quot;&gt;https://codeberg.org/be4zad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/behm&quot;&gt;https://codeberg.org/behm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Benny&quot;&gt;https://codeberg.org/Benny&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brainiac&quot;&gt;https://codeberg.org/brainiac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buhtz&quot;&gt;https://codeberg.org/buhtz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CDN18&quot;&gt;https://codeberg.org/CDN18&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cdotnow&quot;&gt;https://codeberg.org/cdotnow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chrisnicola&quot;&gt;https://codeberg.org/chrisnicola&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ChrSt&quot;&gt;https://codeberg.org/ChrSt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cider&quot;&gt;https://codeberg.org/cider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CL0Pinette&quot;&gt;https://codeberg.org/CL0Pinette&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cryptolukas&quot;&gt;https://codeberg.org/cryptolukas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/d-s&quot;&gt;https://codeberg.org/d-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DamianT&quot;&gt;https://codeberg.org/DamianT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danshearer&quot;&gt;https://codeberg.org/danshearer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/David-Guillot&quot;&gt;https://codeberg.org/David-Guillot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dawn-solace&quot;&gt;https://codeberg.org/dawn-solace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ddogfoodd&quot;&gt;https://codeberg.org/ddogfoodd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/div72&quot;&gt;https://codeberg.org/div72&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dragon&quot;&gt;https://codeberg.org/dragon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/edgalligan&quot;&gt;https://codeberg.org/edgalligan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eldyj&quot;&gt;https://codeberg.org/eldyj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ellpeck&quot;&gt;https://codeberg.org/Ellpeck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/etescartz&quot;&gt;https://codeberg.org/etescartz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ewfg&quot;&gt;https://codeberg.org/ewfg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ezra&quot;&gt;https://codeberg.org/ezra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/feroli&quot;&gt;https://codeberg.org/feroli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fnurkla&quot;&gt;https://codeberg.org/Fnurkla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fuggla&quot;&gt;https://codeberg.org/fuggla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gateway31&quot;&gt;https://codeberg.org/Gateway31&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GDWR&quot;&gt;https://codeberg.org/GDWR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gregdechene&quot;&gt;https://codeberg.org/gregdechene&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grgi&quot;&gt;https://codeberg.org/grgi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grosmanal&quot;&gt;https://codeberg.org/grosmanal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hankskyjames777&quot;&gt;https://codeberg.org/hankskyjames777&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/herzenschein&quot;&gt;https://codeberg.org/herzenschein&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/io7m&quot;&gt;https://codeberg.org/io7m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iustin&quot;&gt;https://codeberg.org/iustin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jaahas&quot;&gt;https://codeberg.org/jaahas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jacobwillden&quot;&gt;https://codeberg.org/jacobwillden&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jogibear9988&quot;&gt;https://codeberg.org/jogibear9988&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JoseDouglas26&quot;&gt;https://codeberg.org/JoseDouglas26&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/julianmarcos&quot;&gt;https://codeberg.org/julianmarcos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jutty&quot;&gt;https://codeberg.org/jutty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwakely&quot;&gt;https://codeberg.org/jwakely&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kecrily&quot;&gt;https://codeberg.org/kecrily&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kidsan&quot;&gt;https://codeberg.org/kidsan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kidswiss&quot;&gt;https://codeberg.org/Kidswiss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kmpm&quot;&gt;https://codeberg.org/kmpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kuolemaa&quot;&gt;https://codeberg.org/kuolemaa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kwoot&quot;&gt;https://codeberg.org/kwoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kytta&quot;&gt;https://codeberg.org/kytta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/l_austenfeld&quot;&gt;https://codeberg.org/l_austenfeld&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lapo&quot;&gt;https://codeberg.org/lapo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lime360&quot;&gt;https://codeberg.org/lime360&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lingling&quot;&gt;https://codeberg.org/lingling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Link1J&quot;&gt;https://codeberg.org/Link1J&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lippoliv&quot;&gt;https://codeberg.org/lippoliv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lumi200&quot;&gt;https://codeberg.org/lumi200&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LunarLambda&quot;&gt;https://codeberg.org/LunarLambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lynoure&quot;&gt;https://codeberg.org/lynoure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MaddinM&quot;&gt;https://codeberg.org/MaddinM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/malik&quot;&gt;https://codeberg.org/malik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcellmars&quot;&gt;https://codeberg.org/marcellmars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcoaraujojunior&quot;&gt;https://codeberg.org/marcoaraujojunior&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marshmallow&quot;&gt;https://codeberg.org/marshmallow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Merith-TK&quot;&gt;https://codeberg.org/Merith-TK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meskobalazs&quot;&gt;https://codeberg.org/meskobalazs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/michael-sparrow&quot;&gt;https://codeberg.org/michael-sparrow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mikolaj&quot;&gt;https://codeberg.org/mikolaj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/minecraftchest1&quot;&gt;https://codeberg.org/minecraftchest1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mzhang&quot;&gt;https://codeberg.org/mzhang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NameLessGO&quot;&gt;https://codeberg.org/NameLessGO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/natct&quot;&gt;https://codeberg.org/natct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neilvandyke&quot;&gt;https://codeberg.org/neilvandyke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neonew&quot;&gt;https://codeberg.org/neonew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nette&quot;&gt;https://codeberg.org/nette&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nick3331&quot;&gt;https://codeberg.org/nick3331&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/niklaskorz&quot;&gt;https://codeberg.org/niklaskorz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nordfriese&quot;&gt;https://codeberg.org/Nordfriese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nostar&quot;&gt;https://codeberg.org/nostar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ntn888&quot;&gt;https://codeberg.org/ntn888&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ossie&quot;&gt;https://codeberg.org/ossie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/overloop&quot;&gt;https://codeberg.org/overloop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patrickuhlmann&quot;&gt;https://codeberg.org/patrickuhlmann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/petris&quot;&gt;https://codeberg.org/petris&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pgmtx&quot;&gt;https://codeberg.org/pgmtx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pinskia&quot;&gt;https://codeberg.org/pinskia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/q3yi&quot;&gt;https://codeberg.org/q3yi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/qwerty287&quot;&gt;https://codeberg.org/qwerty287&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/removewingman&quot;&gt;https://codeberg.org/removewingman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/reynir&quot;&gt;https://codeberg.org/reynir&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvba&quot;&gt;https://codeberg.org/rvba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sandebert&quot;&gt;https://codeberg.org/sandebert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SebasRebazCoding&quot;&gt;https://codeberg.org/SebasRebazCoding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SerikaFrame&quot;&gt;https://codeberg.org/SerikaFrame&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sinsky&quot;&gt;https://codeberg.org/sinsky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SinTan1729&quot;&gt;https://codeberg.org/SinTan1729&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SmolLemon&quot;&gt;https://codeberg.org/SmolLemon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Snoweuph&quot;&gt;https://codeberg.org/Snoweuph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SomeTr&quot;&gt;https://codeberg.org/SomeTr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SpareJoe&quot;&gt;https://codeberg.org/SpareJoe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SR-G&quot;&gt;https://codeberg.org/SR-G&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stb&quot;&gt;https://codeberg.org/stb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stevenroose&quot;&gt;https://codeberg.org/stevenroose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strypey&quot;&gt;https://codeberg.org/strypey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefinn93&quot;&gt;https://codeberg.org/thefinn93&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/theycallhermax&quot;&gt;https://codeberg.org/theycallhermax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thodorisl&quot;&gt;https://codeberg.org/thodorisl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tilegg&quot;&gt;https://codeberg.org/tilegg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timedin&quot;&gt;https://codeberg.org/timedin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tkbremnes&quot;&gt;https://codeberg.org/tkbremnes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tmb&quot;&gt;https://codeberg.org/tmb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Tom3201&quot;&gt;https://codeberg.org/Tom3201&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vadim&quot;&gt;https://codeberg.org/vadim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/whitecold&quot;&gt;https://codeberg.org/whitecold&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/William_Weber_Berrutti&quot;&gt;https://codeberg.org/William_Weber_Berrutti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/WithLithum&quot;&gt;https://codeberg.org/WithLithum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xenrox&quot;&gt;https://codeberg.org/xenrox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeziruo&quot;&gt;https://codeberg.org/yeziruo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yoctozepto&quot;&gt;https://codeberg.org/yoctozepto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yonas&quot;&gt;https://codeberg.org/yonas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ZzenlD&quot;&gt;https://codeberg.org/ZzenlD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v9.0 is available</title><link>https://forgejo.org/2024-10-release-v9-0/</link><guid isPermaLink="true">https://forgejo.org/2024-10-release-v9-0/</guid><description>Forgejo v9.0 is available. It is the first version to be released under a copyleft license. Forgejo has early support for a soft-quota that can protect your server from high disk usage due to abuse. It also removes support for go-git, considered too hazardous for daily usage compared to Git. The translations saw an unprecedented number of improvements thanks to the hackathon organized by Codeberg.</description><pubDate>Wed, 16 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v9.0&lt;/a&gt; was released 16 October 2024. You will find a short selection of the changes it introduces below and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/7235&quot;&gt;complete list in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If stability is more important than new features, consider using Forgejo v7.0 instead: it is a Long Term Support release that will receive bug fixes until 16 July 2025. Forgejo v9.0 will be supported until &lt;a href=&quot;https://forgejo.org/docs/next/contributor/release/#release-cycle&quot;&gt;15 January 2025&lt;/a&gt;, when Forgejo v10.0 is published.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://v9.next.forgejo.org/&quot;&gt;dedicated test instance&lt;/a&gt; is available to try it out. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v9.0/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/7235&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;in the chat room&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Forgejo v9.0 is the first version to be released under a copyleft license, &lt;a href=&quot;https://forgejo.org/2024-08-monthly-update/#forgejo-is-now-copyleft&quot;&gt;after a year of discussions&lt;/a&gt;. Among the motivations for this change is the realization that a pattern emerged over the years, exemplified by Redis, CockroachDB, Terraform and many others. They turned proprietary because people chose their own financial gain over the interest of the general public. Forgejo admins no longer have to worry about this sword of Damocles: relicensing it as a proprietary software is not allowed.&lt;/p&gt;
&lt;p&gt;The removal of the &lt;a href=&quot;https://github.com/go-git/go-git&quot;&gt;go-git&lt;/a&gt; backend is part of a larger effort to make Forgejo easier to maintain, more robust and even smaller than it already is (~100MB). When presented with &lt;code&gt;go-git&lt;/code&gt; as an alternative to Git, a Forgejo admin may overlook that it has less features and a history of &lt;a href=&quot;https://github.com/go-git/go-git/issues/878&quot;&gt;corrupting repositories&lt;/a&gt;. It would have been possible to work on documentation and new tests to ensure administrators do not run into these pitfalls, but the effort would have been out of proportion compared to the benefits it provides.&lt;/p&gt;
&lt;p&gt;The Forgejo localization community was created early 2024 with the ambitious goal of gaining enough momentum to sustain a long term effort. A daunting task considering there are over 5,000 strings to translate, verify and improve. There has been many calls for help in the past and the community keeps growing steadily. Fortunately, the &lt;a href=&quot;https://codeberg.org/Codeberg/translathon-2024#translathon-2024&quot;&gt;translation hackathon (translathon)&lt;/a&gt; organized by Codeberg in October was exceptional. It attracted an unprecedented number of participants who improved or created thousands of translations.&lt;/p&gt;
&lt;h2&gt;New features&lt;/h2&gt;
&lt;p&gt;Below is short selection of the most notable changes. The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/7235&quot;&gt;complete list is available in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4212&quot;&gt;PR&lt;/a&gt;: Added the foundations of a flexible, configurable quota system.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4819&quot;&gt;PR&lt;/a&gt;: Allow push mirrors to use an SSH key as the authentication method for the mirroring action instead of using user:password authentication. The SSH keypair is created by Forgejo and the destination repository must be configured with the public key to allow for push over SSH.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1445&quot;&gt;PR&lt;/a&gt;: A release asset can be a URL instead of a file.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4490&quot;&gt;PR&lt;/a&gt;: Accessibility keyboard support for test actions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5482&quot;&gt;PR&lt;/a&gt; (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5524&quot;&gt;backported&lt;/a&gt;): &quot;Assign to me&quot; button on Pull Requests and Issues.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4903&quot;&gt;PR&lt;/a&gt;: Support grouping by any path for arch package.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4780&quot;&gt;PR&lt;/a&gt;: Add signature support for the RPM module.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4801&quot;&gt;PR&lt;/a&gt;: &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/0c40cff9a44bc79617f2868ee41c77c2cb973674&quot;&gt;commit&lt;/a&gt; The actions logs older than &lt;code&gt;[actions].LOG_RETENTION_DAYS&lt;/code&gt; days are removed (the default is 365).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4607&quot;&gt;PR&lt;/a&gt;: &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/d0227c236aa195bd03990210f968b8e52eb20b79&quot;&gt;commit&lt;/a&gt; issue Templates: add option to have dropdown printed list.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2869&quot;&gt;PR&lt;/a&gt;: Logs journald integration.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4710&quot;&gt;PR&lt;/a&gt;: Refactor repository migration items.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Copyleft&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2024-08-gpl/&quot;&gt;The impact of the license change&lt;/a&gt; has been carefully considered with regard to the variety of usages of Forgejo. Someone might have chosen to avoid copyleft software, for example because it is discouraged in a company. However, Forgejo depends on Git, one of the most successful pieces of copyleft software. Both Forgejo and Git must be used together, either as individual binaries or bundled into the &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/9.0-test&quot;&gt;official container images&lt;/a&gt;. The license of Git is &lt;a href=&quot;https://git-scm.com/about/free-and-open-source&quot;&gt;GNU GPL v2&lt;/a&gt;, another version of the same &lt;a href=&quot;https://www.gnu.org/licenses/copyleft.html&quot;&gt;copyleft license&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The majority of Forgejo&apos;s codebase is still MIT-licensed, but it is expected that an increasing number of files will switch to GNU GPL v3+ over time. With the notable exception of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5083&quot;&gt;API swagger file that is and will stay MIT&lt;/a&gt; to clarify that the intent of the Forgejo authors is that it is used for interoperability with no restriction. It is not an original work and enforcing copyright on that file would probably be difficult anyway.&lt;/p&gt;
&lt;h2&gt;Quotas&lt;/h2&gt;
&lt;p&gt;Forgejo got early support for a soft-quota system that can protect your server from high disk usage due to abuse or user mistakes. This feature is still in development. If you will try to use it, consider sending us feedback via &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/&quot;&gt;a discussion&lt;/a&gt;, or the Matrix channels.&lt;/p&gt;
&lt;p&gt;Forgejo has chosen to use a &quot;soft&quot; quota implementation. It means that Forgejo checks the quota usage only before an action is executed, but it will allow a started action to complete.&lt;/p&gt;
&lt;p&gt;In some cases (like pushing to Git repositories), it is hard to estimate the exact new size, because it depends on how much data is available and how much we can benefit from compression. As a result, it is possible to exceed the quota if the operation was started before the quota was used up. After the quota is exceeded, new operations that would increase the quota won&apos;t be possible.&lt;/p&gt;
&lt;p&gt;Furthermore, there is currently little support for early prevention of operations in the UI: The handling of, for example, web operations that are denied later is not yet optimal.&lt;/p&gt;
&lt;p&gt;Read more in the &lt;a href=&quot;https://forgejo.org/docs/v9.0/admin/quota/&quot;&gt;Soft-Quota page of the documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The multi-architecture OCI leak is fixed&lt;/h2&gt;
&lt;p&gt;When a multi-architecture container image is pushed to the Forgejo registry, the same tag is used but refers to different images. This is what Forgejo itself relies on to provide &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/7&quot;&gt;either arm64 or amd64&lt;/a&gt; depending on the platform (e.g. &lt;code&gt;docker pull codeberg.org/forgejo/forgejo:7&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;This is implemented with &lt;a href=&quot;https://github.com/opencontainers/image-spec/blob/main/image-index.md&quot;&gt;an image index&lt;/a&gt; which points to &lt;a href=&quot;https://github.com/opencontainers/image-spec/blob/main/manifest.md&quot;&gt;image manifests&lt;/a&gt;. This level of indirection was unfortunately not taken into account when cleaning up dangling blobs. When a multi-architecture image was either deleted from the web interface or overridden by pushing new images with the same tag, the blobs were never deleted. This bug has been present in Forgejo since the beginning and went unnoticed for a long time, presumably because multi-architecture images are uncommon.&lt;/p&gt;
&lt;p&gt;Forgejo will remove dangling blobs when it starts as well as in the existing daily container image cleanup. This will show in the logs with when looking for &lt;code&gt;grep -i CleanupSHA256&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2024/10/15 00:00:00 ...er/cleanup_sha256.go:106:cleanupSHA256() [I] Nothing to cleanup
2024/10/15 00:00:00 ...er/cleanup_sha256.go:29:CleanupSHA256() [I] Finished to cleanup dangling images with a sha256:* version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The time required for the cleanup to complete should be under a minute, even if ten of thousands of blobs were leaked. It is however recommended to give it a try using a backup of the Forgejo instance to be sure. For instance when &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt; was upgraded, it cleaned up a few thousand dangling blobs for a total of around 50GB within less than 15 seconds. To accommodate large instances such as Codeberg, blobs are cleaned up 500 at a time.&lt;/p&gt;
&lt;h2&gt;Removal of go-git support&lt;/h2&gt;
&lt;p&gt;Forgejo used to have 2 Git backends: the normal git and &lt;a href=&quot;https://github.com/go-git/go-git&quot;&gt;go-git&lt;/a&gt; which is a Git implementation in pure Go. This the benefit of being a little bit faster than Git on Windows.&lt;/p&gt;
&lt;p&gt;Supporting go-git would mean holding Forgejo back. Every Git Feature that Forgejo wants to use also needs to be implemented in go-git. For example: setting git notes in the Web UI is currently not possible in go-git. In addition go-git may lead to data loss and repository corruption &lt;a href=&quot;https://github.com/go-git/go-git/issues/878&quot;&gt;(one example)&lt;/a&gt;. It is not widely used and does not have extensive testing (see &lt;a href=&quot;https://github.com/go-git/go-git/issues/878&quot;&gt;the latest example of such corruption&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For these reasons, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4941&quot;&gt;go-git was removed from the codebase&lt;/a&gt;. It only affects users who built Forgejo manually using &lt;code&gt;TAGS=gogit&lt;/code&gt;, which no longer has any effect. This removal only happened in the development branch and not in the existing stable Forgejo branches, up to &lt;code&gt;v8.0/forgejo&lt;/code&gt; included.&lt;/p&gt;
&lt;h2&gt;Transparent removal of Couchbase&lt;/h2&gt;
&lt;p&gt;Using &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5090&quot;&gt;Couchbase as a session provider was removed&lt;/a&gt;. This is not a breaking change because it will transparently fallback to the file provider. The rationale for removing Couchbase support is that it is &lt;a href=&quot;https://web.archive.org/web/20240812165718/https://www.couchbase.com/blog/couchbase-adopts-bsl-license/&quot;&gt;not free software&lt;/a&gt; and therefore cannot be tested in Forgejo and neither should be supported.&lt;/p&gt;
&lt;h2&gt;Gitea compatibility&lt;/h2&gt;
&lt;p&gt;Forgejo v9.0 has &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/upgrade/upgrade.sh#L56-L57&quot;&gt;automated upgrade tests from Gitea v1.22 to Forgejo v9.0&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An instance running Gitea versions up to v1.21 can be upgraded to Forgejo v7.0 or v8.0&lt;/li&gt;
&lt;li&gt;An instance running Gitea v1.22 can be upgraded to Forgejo v8.0 or Forgejo v9.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more about &lt;a href=&quot;/2024-02-forking-forward/&quot;&gt;Gitea compatibility in the blog post explaining the hard fork that happened in February 2024&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Release schedule and Long Term Support&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;/docs/v9.0/contributor/release/#release-cycle&quot;&gt;time based release schedule&lt;/a&gt; was established to publish a release every three months. Patch releases will be published more frequently, depending on the severity of the bug or security fixes they contain.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;2024 Q1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.0.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;23 April 2024&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2025&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q2&lt;/td&gt;
&lt;td&gt;8.0.0&lt;/td&gt;
&lt;td&gt;30 July 2024&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q3&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9.0.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;td&gt;15 January 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025 Q1&lt;/td&gt;
&lt;td&gt;10.0.0&lt;/td&gt;
&lt;td&gt;15 January 2025&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;9.0-test daily releases&lt;/h3&gt;
&lt;p&gt;Releases are built daily from the latest changes found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v9.0/forgejo&quot;&gt;v9.0/forgejo&lt;/a&gt; development branch. They are deployed to the &lt;a href=&quot;https://v9.next.forgejo.org&quot;&gt;https://v9.next.forgejo.org&lt;/a&gt; instance for manual verification in case a bug fix is of particular interest ahead of the next patch release. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/9.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/9.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v9.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their names are staying the same but they are replaced by new builds every day.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;This release contains many translation additions and improvements done by contributors on &lt;a href=&quot;https://translate.codeberg.org/projects/forgejo/forgejo/&quot;&gt;Codeberg Translate&lt;/a&gt;, and numerous improvements to the UX and translatability of English locale.&lt;/p&gt;
&lt;p&gt;Translation updates and some improvements of English locale were also ported to v7.0 where there was no risk of regressions.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/Codeberg/translathon-2024#translathon-2024&quot;&gt;translation hackathon (translathon)&lt;/a&gt; organized by Codeberg in October resulted in many new contributors joining and making thousands of additions and improvements.&lt;/p&gt;
&lt;h2&gt;Get Forgejo v9.0&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&quot;/download/&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/7235&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestone/7235&quot;&gt;breaking changes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v9.0.0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/9.0.0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/9.0&quot;&gt;&lt;code&gt;9.0&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;9.0.Y&lt;/code&gt; patch release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v9.0/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
&lt;h3&gt;Donate&lt;/h3&gt;
&lt;p&gt;Forgejo is proud to be &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/&quot;&gt;funded transparently&lt;/a&gt;. Additionally it accept donations &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;through Liberapay&lt;/a&gt;. It is also possible to &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donate to Codeberg e.V.&lt;/a&gt; in case the Liberapay option does not work out for you, and part of the funding is used to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/#forgejo-resources-per-year&quot;&gt;compensate for work on Forgejo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, the Liberapay team allows for money to go directly to developers without a round-trip to Codeberg. Additionally, Liberapay allows for a steady and reliable funding stream next to other options, a crucial aspect for the project. The distribution of funds through Liberapay is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;transparently controlled using the decision-making process&lt;/a&gt;, and Forgejo contributors are encouraged to consider applying to benefit from this funding opportunity.&lt;/p&gt;
&lt;p&gt;Thank you for using Forgejo and considering a donation, in case your financial situation allows you to.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - September 2024</title><link>https://forgejo.org/2024-09-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-09-monthly-update/</guid><description>Forgejo v9.0 release candidates are available for testing to prepare for the release scheduled 16 October 2024. The contributor and testing documentation were improved with the goal of encouraging more diverse participation. The infrastructure dedicated to Forgejo development suffered a downtime because of excessive crawling and mitigation measures were implemented.</description><pubDate>Sun, 06 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Forgejo v9.0 release candidates&lt;/h2&gt;
&lt;p&gt;The first release candidates for &lt;a href=&quot;https://forgejo.org/docs/next/contributor/release/#release-cycle&quot;&gt;Forgejo v9.0&lt;/a&gt; was published &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/5380&quot;&gt;25 September&lt;/a&gt; and code.forgejo.org upgraded. A call &lt;a href=&quot;https://forgejo.org/2024-09-preparing-v9/&quot;&gt;for participation&lt;/a&gt; was published, asking for help with translations and testing.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/227&quot;&gt;regression was discovered&lt;/a&gt; in the v9.0 release candidate that incorrectly deleted some of the images &lt;a href=&quot;https://code.forgejo.org/oci/-/packages&quot;&gt;mirrored from the Docker hub&lt;/a&gt;. It disrupted the CI intermittently during 48h before a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5430&quot;&gt;fix was published and deployed&lt;/a&gt;. The root cause was a bug in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4698&quot;&gt;cron task that cleanup dangling container images&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Forgejo Design process&lt;/h2&gt;
&lt;p&gt;Efforts on long-term improvements to Forgejo have been kept low in the past month, however there was a noteworthy exchange on &lt;a href=&quot;https://codeberg.org/forgejo/design/issues/20&quot;&gt;moderation features&lt;/a&gt; in Forgejo. Initially, an idea was investigated to track reported content in a specific issue tracker, but the idea was discarded some time later due to the volume of spam issues on Codeberg, which probably requires a more efficient UI.
The moderation features will not make it into Forgejo v9, but they will remain in the focus of design work.&lt;/p&gt;
&lt;h2&gt;Contributor documentation and test suite&lt;/h2&gt;
&lt;p&gt;By the end of August, a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/212&quot;&gt;discussion emerged to improve Forgejo&apos;s testing infrastructure&lt;/a&gt;, making it more friendly to new developers.&lt;/p&gt;
&lt;p&gt;Since the last monthly report, multiple improvements have been made:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The contributing resources in the documentation have been &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/821&quot;&gt;cleaned and updated&lt;/a&gt;, with the goal of encouraging more diverse contributions, &lt;a href=&quot;https://forgejo.org/docs/next/contributor/welcome/&quot;&gt;sending a warm welcome&lt;/a&gt; to new contributors and clarifying the motivation and instructions for writing tests. If you did not yet contribute to Forgejo, now is a good time to get started and provide us with feedback.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5235&quot;&gt;in-repo hints for testing&lt;/a&gt; have been deduplicated and updated to make getting started easier. And numerous smaller improvements have been made to the end-to-end test suite that uses real browsers to ensure actions in the Forgejo UI work as expected. They &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5322&quot;&gt;added&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5287&quot;&gt;improved&lt;/a&gt; examples.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using the improved test infrastructure, the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commits/branch/forgejo/tests/e2e&quot;&gt;frequency of new browser tests&lt;/a&gt; has increased a lot compared to recent months.&lt;/p&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;A new major version, &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v9.0.0&quot;&gt;9.0.0&lt;/a&gt; was published. It sets proper namespaces and allows override.&lt;/p&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;many minor and patch updates&lt;/a&gt;, in both v7 and v8. &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.1.2&quot;&gt;Helm chart v7.1.2&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v8.1.1&quot;&gt;v8.2.3&lt;/a&gt; are the latest.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;A significant effort was made to backport translations to the LTS version (Forgejo v7.0). There was hope for new languages added in this version to reach better completion in its primary lifetime, but it is taking longer than expected. This and other considerations led to &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/226&quot;&gt;a proposal&lt;/a&gt; to do less backporting to old stable to prevent breakage and save time.&lt;/p&gt;
&lt;p&gt;A very large change was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5306&quot;&gt;ported from Gitea&lt;/a&gt; and is good for internationalization. But it was not easy to also preserve the existing strings and it could have broken a few non-English strings in Forgejo v9. Some translators caught the problem and it was luckily fixed in time.&lt;/p&gt;
&lt;p&gt;The overall translation activity was about twice lower than last month, which was very active.&lt;/p&gt;
&lt;h2&gt;Forgejo Actions&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/nlnet-off-ngie-forgejo&quot;&gt;security audit&lt;/a&gt; bootstrapped &lt;a href=&quot;/2024-08-monthly-update/#forgejo-runner&quot;&gt;last month&lt;/a&gt; has its own repository to track the work done as transparently as possible. A &lt;a href=&quot;https://code.forgejo.org/forgejo/nlnet-off-ngie-forgejo/issues/1&quot;&gt;suitable pentester&lt;/a&gt; was found and &lt;a href=&quot;https://code.forgejo.org/forgejo/nlnet-off-ngie-forgejo/issues/2&quot;&gt;the scope of the audit&lt;/a&gt; was determined during a call. A rough plan was &lt;a href=&quot;https://code.forgejo.org/forgejo/nlnet-off-ngie-forgejo/issues/3&quot;&gt;drafted&lt;/a&gt; and approved by NLnet who is funding the audit. The work should begin in November 2024.&lt;/p&gt;
&lt;h2&gt;Optimizing CI pipelines&lt;/h2&gt;
&lt;p&gt;In order to ensure a high software quality, Forgejo (like most larger project) runs CI/CD pipelines that perform a series of automated checks on the source code, ensuring that contribution meet certain quality standards.&lt;/p&gt;
&lt;p&gt;Running these pipelines consumes significant amount of energy and adds to the climate footprint of free/libre software development.&lt;/p&gt;
&lt;p&gt;In a quest to make Forgejo &lt;a href=&quot;https://wimvanderbauwhede.codeberg.page/articles/frugal-computing/&quot;&gt;more frugal in the use of computing&lt;/a&gt; in the development lifecycle, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/5127&quot;&gt;optimizations to the CI/CD pipelines&lt;/a&gt; have been considered and a part of the work was merged.&lt;/p&gt;
&lt;p&gt;The optimizations include &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5297&quot;&gt;caching the playwright environment in a test image&lt;/a&gt; and improvements to the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5328&quot;&gt;caching of Go dependencies&lt;/a&gt; that improves on the caching available from the &lt;code&gt;setup-go&lt;/code&gt; action that spent 10x2 minutes per job creating compressed archives. The action is &lt;a href=&quot;https://codeberg.org/fnetX/setup-cache-go&quot;&gt;also available to other projects&lt;/a&gt; and a dedicated contribution to the Forgejo Actions ecosystem.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;On &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/219&quot;&gt;9 September&lt;/a&gt; code.forgejo.org was down during 10 hours. It was overwhelmed by excessive crawling and the response time was so slow that it kept accumulating a backlog and answering every request with a timeout. On top of that it happened late at night and although it was trivially fixed by restarting Forgejo, it only happened the next morning.&lt;/p&gt;
&lt;p&gt;This was the first significant downtime and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/220&quot;&gt;impacted a number of Forgejo instances&lt;/a&gt; that are using Forgejo Actions hosted on code.forgejo.org. A number of measures were taken to prevent that from happening:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation/pulls/9&quot;&gt;Rate-limiting is imposed&lt;/a&gt; on the most aggressive crawlers.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/robots.txt&quot;&gt;Exclusion rules&lt;/a&gt; were defined and added to robots.txt.&lt;/li&gt;
&lt;li&gt;Members of the devops team are notified on their mobile when &lt;a href=&quot;https://status.forgejo.ovh/&quot;&gt;monitoring detects a problem&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;An ad-hoc script was written to detect excessive timeouts during extended periods of time and automatically restart Forgejo if needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The script is a hack that must not stay. It proved useful a couple of times while working on strategies to reduce crawling to manageable levels. It still represents over 50% of the incoming requests but they do not impact the instance performances.&lt;/p&gt;
&lt;p&gt;The long term solution, as code.forgejo.org audience grows, is to improve its availability. The test instances at v*.next.forgejo.org are already &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/&quot;&gt;using Forgejo helm&lt;/a&gt;, each in &lt;a href=&quot;https://code.forgejo.org/infrastructure/k8s&quot;&gt;a dedicated k3s cluster&lt;/a&gt;. A long lived &lt;a href=&quot;https://code.forgejo.org/infrastructure/documentation#k8s-node&quot;&gt;k8s cluster&lt;/a&gt; is being deployed to use the same Forgejo helm so code.forgejo.org can be migrated there. The goal is for built-in health monitoring to automatically react to an unhealthy Forgejo instance and restart it using idiomatic k8s methods instead of an ad-hoc script.&lt;/p&gt;
&lt;p&gt;There is no urgency for the k8s cluster to replace the LXC based infrastructure. But it will take some time to improve code.forgejo.org availability in this way and the works started right away so that it has a chance to be ready before the next incident happens.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;A procedure for receiving payment from Codeberg on Forgejo work &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/61&quot;&gt;was documented&lt;/a&gt; and discussed. The details of the funds received and spent in 2024 were &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/60/files&quot;&gt;updated&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The progress of the ongoing grant &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2022-12-01-nlnet&quot;&gt;was updated&lt;/a&gt;. It was extended until the end of 2024 and got an informal agreement to increase the funding by 10K€. The legal status of the donations in Europe &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/62&quot;&gt;was documented&lt;/a&gt; with an example based on a Freelance established in Portugal, with links to do the same for other European countries.&lt;/p&gt;
&lt;p&gt;The progress of the federation grant &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2022-08-01-nlnet&quot;&gt;was also updated&lt;/a&gt; and a &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/59&quot;&gt;request for payment drafted&lt;/a&gt; for 2,500€. The grant will expire 1 December 2024 and the unspent funds will be returned to NLnet where they can be used by other projects.&lt;/p&gt;
&lt;p&gt;Questions were received from NLnet on the latest grant application and &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/57&quot;&gt;an answer sent&lt;/a&gt; which led to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/63&quot;&gt;followup questions&lt;/a&gt;. Because of the required delay in answering those questions, the grant application was moved by a few months, to the next call.&lt;/p&gt;
&lt;p&gt;The sustainability team elected &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#sustainability-team&quot;&gt;its first member&lt;/a&gt;. They helped with following up with the current grants and document the progress made so far.&lt;/p&gt;
&lt;p&gt;The relevance of creating a non profit exclusively dedicated to managing the Forgejo funds and governed by the Forgejo decision making process &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/224&quot;&gt;was discussed&lt;/a&gt;. A balance should be found between the burden of managing a new organization and the benefit of being more flexible than Codeberg. The current situation is problematic as a significant amount of the funds obtained in the past two years (in excess of 60,000€) will have to be returned when the grants expire by the end of 2024.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adaaa&quot;&gt;https://codeberg.org/adaaa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aimuz&quot;&gt;https://codeberg.org/aimuz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aleksi&quot;&gt;https://codeberg.org/aleksi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Alexilator&quot;&gt;https://codeberg.org/Alexilator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Arsen&quot;&gt;https://codeberg.org/Arsen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avobs&quot;&gt;https://codeberg.org/avobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ayakael&quot;&gt;https://codeberg.org/ayakael&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bartavi&quot;&gt;https://codeberg.org/bartavi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benniekiss&quot;&gt;https://codeberg.org/benniekiss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bramh&quot;&gt;https://codeberg.org/bramh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/btlogy&quot;&gt;https://codeberg.org/btlogy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cbn8krgm&quot;&gt;https://codeberg.org/cbn8krgm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cemoktra&quot;&gt;https://codeberg.org/cemoktra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chrysn&quot;&gt;https://codeberg.org/chrysn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Chucky2401&quot;&gt;https://codeberg.org/Chucky2401&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ciampix&quot;&gt;https://codeberg.org/ciampix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/clarfonthey&quot;&gt;https://codeberg.org/clarfonthey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/coderofsalvation&quot;&gt;https://codeberg.org/coderofsalvation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CommanderRedYT&quot;&gt;https://codeberg.org/CommanderRedYT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DamianT&quot;&gt;https://codeberg.org/DamianT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/danjones000&quot;&gt;https://codeberg.org/danjones000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ddevault&quot;&gt;https://codeberg.org/ddevault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/delgh1&quot;&gt;https://codeberg.org/delgh1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dmowitz&quot;&gt;https://codeberg.org/dmowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/douglasparker&quot;&gt;https://codeberg.org/douglasparker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dragon&quot;&gt;https://codeberg.org/dragon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Erayd&quot;&gt;https://codeberg.org/Erayd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/esainane&quot;&gt;https://codeberg.org/esainane&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EssGeeEich&quot;&gt;https://codeberg.org/EssGeeEich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ezra&quot;&gt;https://codeberg.org/ezra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/f403&quot;&gt;https://codeberg.org/f403&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fuggla&quot;&gt;https://codeberg.org/fuggla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GDWR&quot;&gt;https://codeberg.org/GDWR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gnu1&quot;&gt;https://codeberg.org/Gnu1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grgi&quot;&gt;https://codeberg.org/grgi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/h759bkyo4&quot;&gt;https://codeberg.org/h759bkyo4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/IamLunchbox&quot;&gt;https://codeberg.org/IamLunchbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/io7m&quot;&gt;https://codeberg.org/io7m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JacksonBailey&quot;&gt;https://codeberg.org/JacksonBailey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kuolemaa&quot;&gt;https://codeberg.org/kuolemaa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lapo&quot;&gt;https://codeberg.org/lapo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LDericher&quot;&gt;https://codeberg.org/LDericher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/linos&quot;&gt;https://codeberg.org/linos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MaddinM&quot;&gt;https://codeberg.org/MaddinM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltejur&quot;&gt;https://codeberg.org/maltejur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcellmars&quot;&gt;https://codeberg.org/marcellmars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mcnesium&quot;&gt;https://codeberg.org/mcnesium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mdt&quot;&gt;https://codeberg.org/mdt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Merith-TK&quot;&gt;https://codeberg.org/Merith-TK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/michael-sparrow&quot;&gt;https://codeberg.org/michael-sparrow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/midirhee12&quot;&gt;https://codeberg.org/midirhee12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mih&quot;&gt;https://codeberg.org/mih&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirkoperillo&quot;&gt;https://codeberg.org/mirkoperillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mkobel&quot;&gt;https://codeberg.org/mkobel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/muhaaliss&quot;&gt;https://codeberg.org/muhaaliss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mvdkleijn&quot;&gt;https://codeberg.org/mvdkleijn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neonew&quot;&gt;https://codeberg.org/neonew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Neureka&quot;&gt;https://codeberg.org/Neureka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nhathaway&quot;&gt;https://codeberg.org/nhathaway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nobodyinperson&quot;&gt;https://codeberg.org/nobodyinperson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ossie&quot;&gt;https://codeberg.org/ossie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paspflue&quot;&gt;https://codeberg.org/paspflue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pat-s&quot;&gt;https://codeberg.org/pat-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pavi&quot;&gt;https://codeberg.org/pavi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pylixonly&quot;&gt;https://codeberg.org/pylixonly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/removewingman&quot;&gt;https://codeberg.org/removewingman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rtfb&quot;&gt;https://codeberg.org/rtfb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rvba&quot;&gt;https://codeberg.org/rvba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s-l-s&quot;&gt;https://codeberg.org/s-l-s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s1m&quot;&gt;https://codeberg.org/s1m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sandebert&quot;&gt;https://codeberg.org/sandebert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/saurabh&quot;&gt;https://codeberg.org/saurabh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SLASHLogin&quot;&gt;https://codeberg.org/SLASHLogin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SludgePhD&quot;&gt;https://codeberg.org/SludgePhD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/solomonv&quot;&gt;https://codeberg.org/solomonv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stb&quot;&gt;https://codeberg.org/stb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stevenroose&quot;&gt;https://codeberg.org/stevenroose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tgy&quot;&gt;https://codeberg.org/tgy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefinn93&quot;&gt;https://codeberg.org/thefinn93&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefox&quot;&gt;https://codeberg.org/thefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toasterbirb&quot;&gt;https://codeberg.org/toasterbirb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toolforger&quot;&gt;https://codeberg.org/toolforger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VadZ&quot;&gt;https://codeberg.org/VadZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/virtulis&quot;&gt;https://codeberg.org/virtulis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xenrox&quot;&gt;https://codeberg.org/xenrox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yoctozepto&quot;&gt;https://codeberg.org/yoctozepto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yonas&quot;&gt;https://codeberg.org/yonas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Help us in making Forgejo v9 a great release</title><link>https://forgejo.org/2024-09-preparing-v9/</link><guid isPermaLink="true">https://forgejo.org/2024-09-preparing-v9/</guid><description>Your help in preparing the next Forgejo release is appreciated. Now is a good time to step in.</description><pubDate>Wed, 25 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We are looking forward to shipping the improvements we have made in the past months to all Forgejo users.
Today, we have reached the next milestone in our &lt;a href=&quot;/docs/v8.0/developer/release/#release-cycle&quot;&gt;release cycle&lt;/a&gt;,
reaching a period of feature freeze to focus on fixing bugs.
The release of Forgejo v9.0 is scheduled for 16 October 2024.&lt;/p&gt;
&lt;p&gt;It is a good moment for you to help ensuring the next Forgejo release is a success.
Thank you for your support!&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;With the feature freeze comes a period of less new strings to translate.
Now is the best time to translate Forgejo into your language,
we invite you to &lt;a href=&quot;/docs/next/contributor/localization/&quot;&gt;check out the localization guide&lt;/a&gt;
and joining us on Weblate.&lt;/p&gt;
&lt;p&gt;Localizing Forgejo helps more users around the world to get involved in free/libre software development,
including end-users submitting bug reports and students who get in touch with Forgejo in schools.&lt;/p&gt;
&lt;p&gt;Additionally, raising the completion status before the next release reduces the effort on our end to backport translations to existing Forgejo releases.&lt;/p&gt;
&lt;p&gt;Join our localization effort today!&lt;/p&gt;
&lt;h2&gt;Using&lt;/h2&gt;
&lt;p&gt;If you can upgrade your Forgejo version to the latest state in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v9.0/forgejo&quot;&gt;&lt;code&gt;v9.0/forgejo&lt;/code&gt;&lt;/a&gt; branch,
you can spot and report issues before other users do.
Ensure you make a backup of your data, just in case.&lt;/p&gt;
&lt;p&gt;We are looking forward to your feedback or bug reports.
Test the upcoming version of Forgejo today!&lt;/p&gt;
&lt;h2&gt;Developing&lt;/h2&gt;
&lt;p&gt;If you always wanted to help developing for Forgejo,
we appreciate your help in fixing bugs for the upcoming version.&lt;/p&gt;
&lt;p&gt;Take a look at &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues?labels=201023%2c222666&quot;&gt;this list of bugs that might be &quot;good first issue&quot;s&lt;/a&gt;.
Let us know if you are interested to take a look at any of them,
and we&apos;ll be here to assist you completing them before the release date.&lt;/p&gt;
&lt;p&gt;If you can spare more time, also take a look at other and new bug reports,
try to reproduce them and diagnose the issues together with the team.&lt;/p&gt;
&lt;h2&gt;Donating&lt;/h2&gt;
&lt;p&gt;If you cannot spare some time right now, but still want to support Forgejo,
consider &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;setting up a donation to our Liberapay team&lt;/a&gt;
or &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donating to Codeberg&lt;/a&gt;
to enable other Forgejo developers to complete their work.&lt;/p&gt;
&lt;h3&gt;Get in touch&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - August 2024</title><link>https://forgejo.org/2024-08-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-08-monthly-update/</guid><description>Forgejo changed its license from MIT to GNU GPL v3+, it is now copyleft, just like Git. A pull request for federated user activity following using ActivityPub saw significant progress. Space usage quotas for users and organizations was implemented. The Forgejo security policy was published.</description><pubDate>Sat, 31 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was decided more than a year ago and finally happened: Forgejo changed its license from MIT to &lt;a href=&quot;https://forgejo.org/2024-08-gpl/&quot;&gt;GNU GPL v3+&lt;/a&gt; and accepts contributions with a simple &lt;a href=&quot;https://forgejo.org/docs/next/developer/dco/&quot;&gt;Developer Certificate of Origin&lt;/a&gt;. It is an additional guarantee that it will not drift away from Free Software and become &lt;a href=&quot;https://en.wikipedia.org/wiki/Open-core_model&quot;&gt;Open Core&lt;/a&gt; like GitLab or Gitea.&lt;/p&gt;
&lt;p&gt;Last month, the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/4153&quot;&gt;v8.0 release date was postponed multiple times&lt;/a&gt; because bugs were discovered at the last minute. This rather time consuming effort was rewarded by a smooth upgrade of Codeberg and other instances. The absence of problems allowed Forgejo contributors to focus on features and structural improvements: ActivityPub federation, storage quotas, security policy, and more.&lt;/p&gt;
&lt;h2&gt;Forgejo is now copyleft&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2024-08-gpl/&quot;&gt;The impact of the license change&lt;/a&gt; has been carefully considered with regard to the variety of usages of Forgejo. Someone might have chosen to avoid copyleft software, for example because it is discouraged in a company. However, Forgejo depends on Git, one of the most successful copyleft software. Both Forgejo and Git must be used together, either as individual binaries or bundled into the &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/9.0-test&quot;&gt;official container images&lt;/a&gt;. The license of Git is &lt;a href=&quot;https://git-scm.com/about/free-and-open-source&quot;&gt;GNU GPL v2&lt;/a&gt;, another version of the same &lt;a href=&quot;https://www.gnu.org/licenses/copyleft.html&quot;&gt;copyleft license&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The majority of Forgejo&apos;s codebase is still MIT-licensed, but it is expected that an increasing number of files will switch to GNU GPL v3+ over time. With the notable exception of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5083&quot;&gt;API swagger file that is and will stay MIT&lt;/a&gt; to clarify that the intent of the Forgejo authors is that it is used for interoperability with no restriction. It is not an original work and enforcing copyright on that file would probably be difficult anyway.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/192&quot;&gt;discussions on how to improve&lt;/a&gt; Forgejo&apos;s licensing are still very lively and will eventually lead to decisions that will improve its legal protection, in the interest of the general public.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/208&quot;&gt;Federation is getting useful&lt;/a&gt;. There is now more than preliminary background work, and the first exciting things could be tried out by users. The work is not near the goal yet.&lt;/p&gt;
&lt;p&gt;Building upon the foundations released with Forgejo v8.0, a pull request for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4767&quot;&gt;federated user activity following&lt;/a&gt; saw significant progress. The core idea is that any activity (where activity is defined as anything that ends up in the Forgejo user activity) is wrapped in an ap.Note, and sent to followers in the ActivityPub sense. Similarly, the inbox of local users now accepts such Notes. Additionally, there&apos;s now a &quot;Feeds&quot; tab on the user profile page, which displays the received notes.&lt;/p&gt;
&lt;h2&gt;go-git support is removed from the codebase&lt;/h2&gt;
&lt;p&gt;Forgejo used to have 2 Git backends: the normal git and &lt;a href=&quot;https://github.com/go-git/go-git&quot;&gt;go-git&lt;/a&gt; which is a Git implementation in pure Go. This had 2 benefits:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You don&apos;t need git installed.&lt;/li&gt;
&lt;li&gt;It is a little bit faster than Git on Windows.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Supporting go-git would mean holding Forgejo back. Every Git Feature that Forgejo wants to use also needs to be implemented in go-git. For example: setting git notes in the Web UI is currently not possible in go-git. In addition go-git may lead to data loss and repository corruption &lt;a href=&quot;https://github.com/go-git/go-git/issues/878&quot;&gt;(one example)&lt;/a&gt;. It is not widely used and does not have extensive testing (see &lt;a href=&quot;https://github.com/go-git/go-git/issues/878&quot;&gt;the latest example of such corruption&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For these reasons, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4941&quot;&gt;go-git was removed from the codebase&lt;/a&gt;. It only affects users who built Forgejo manually using &lt;code&gt;TAGS=gogit&lt;/code&gt;, which no longer has any effect. This removal only happened in the development branch and not in the existing stable Forgejo branches, up to &lt;code&gt;v8.0/forgejo&lt;/code&gt; included.&lt;/p&gt;
&lt;h2&gt;Noteworthy pull requests&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4212&quot;&gt;Space usage quotas for users and organizations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1445&quot;&gt;A release asset can be a URL instead of a file&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4698&quot;&gt;Add a cron task to cleanup dangling container images with version sha256:*&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5090&quot;&gt;Remove support for Couchbase as a session provider&lt;/a&gt;; it instead will now fallback to the file provider. The rationale for removing Couchbase support is that &lt;a href=&quot;https://web.archive.org/web/20240812165718/https://www.couchbase.com/blog/couchbase-adopts-bsl-license/&quot;&gt;it&apos;s not free software&lt;/a&gt;, and therefore cannot be tested in Forgejo and neither should be supported.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4819&quot;&gt;Allow push mirrors to use a SSH key as the authentication method&lt;/a&gt; for the mirroring action instead of using user:password authentication. The SSH keypair is created by Forgejo and the destination repository must be configured with the public key to allow for push over SSH.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/a627b885c792f70777ab89bad9d0f586234c95af&quot;&gt;Forgejo Actions logs are compressed by default&lt;/a&gt;. It can be disabled by setting &lt;code&gt;[actions].LOG_COMPRESSION=none&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestones&quot;&gt;in the draft release notes for the upcoming major version&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;OCI mirror&lt;/h2&gt;
&lt;p&gt;Forgejo &lt;a href=&quot;https://code.forgejo.org/forgejo/oci-mirror/src/commit/5c750a36ad39692206cc04eca85b6a34b5367a31/.forgejo/workflows/mirror.yml&quot;&gt;maintains a mirror&lt;/a&gt; of &lt;a href=&quot;https://code.forgejo.org/oci/-/packages&quot;&gt;container images&lt;/a&gt; that are commonly used in the CI and the release process. The primary motivation is to not be subject to rate limiting &lt;a href=&quot;https://docs.docker.com/docker-hub/download-rate-limit/&quot;&gt;when using the Docker hub&lt;/a&gt; as well as saving bandwidth.&lt;/p&gt;
&lt;p&gt;There still were two problems that led to a rate limiting incident disrupting the CI during a few hours:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A number of references to container images were not using the mirror - they were replaced&lt;/li&gt;
&lt;li&gt;The mirror itself was rate limited because it used &lt;code&gt;skopeo copy&lt;/code&gt; - it was &lt;a href=&quot;https://code.forgejo.org/forgejo/oci-mirror/pulls/4&quot;&gt;replaced with &lt;code&gt;skopeo sync&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Release notes automation&lt;/h2&gt;
&lt;p&gt;In addition to the preview shown in each pull request, the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestones&quot;&gt;Forgejo milestones&lt;/a&gt; for all upcoming releases are &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/eb25bc9edb5d33621fbebda20475139f42d62ad7/.forgejo/workflows/release-notes-assistant-milestones.yml&quot;&gt;updated daily with the draft release notes&lt;/a&gt; compiled from all the pull requests.&lt;/p&gt;
&lt;h2&gt;Design and User Interface&lt;/h2&gt;
&lt;p&gt;Semantic HTML often was a discussion topic, and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4995&quot;&gt;a pull request was merged to demonstrate&lt;/a&gt; how forms could look like with less classes and less weird divs all over the place. They bring consistency out of the box (you only need to change some CSS properties, no need to keep your templates in sync). It was followed by &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5031&quot;&gt;a refactor of some forms to improve semantic HTML, usability, accessibility, and reduce the JavaScript footprint&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/212&quot;&gt;A discussion started to improve the testing infrastructure&lt;/a&gt;. The &quot;reasonable effort&quot; for the tests is eaten up by just figuring out how to get test data populated. Contributors asked to write tests, should not follow a paper chase. It led to pull requests to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5108&quot;&gt;move &lt;code&gt;CreateDeclarativeRepo&lt;/code&gt; to more accessible location&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/5110&quot;&gt;improve diffs generated by Forgejo to make testing more convenient&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;many minor and patch updates&lt;/a&gt;, in both v7 and v8. &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.0.5&quot;&gt;Helm chart v7.0.5&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v8.1.1&quot;&gt;v8.1.1&lt;/a&gt; were released which contain Forgejo security fixes.&lt;/p&gt;
&lt;p&gt;Each version is tested against a kubernetes cluster to verify it works. It was using &lt;a href=&quot;https://kind.sigs.k8s.io/&quot;&gt;kind&lt;/a&gt; but it turned out to be difficult to debug when the number of transient errors increased. &lt;a href=&quot;https://k3s.io/&quot;&gt;K3S&lt;/a&gt; is &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/pulls/773/files&quot;&gt;used&lt;/a&gt; instead and proved to be more stable.&lt;/p&gt;
&lt;h2&gt;Forgejo v8.0 install party&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/198&quot;&gt;The Forgejo v8.0 install party&lt;/a&gt; was a nice community meetup and we got to know some Forgejo users. Some users performed their updates live and had only minor issues that were mostly caused by an issue on their end. Due to the lack of actual problems, some might have perceived it as boring. Finally, it was decided to also upgrade Codeberg to Forgejo v8, which was also a smooth experience.&lt;/p&gt;
&lt;h2&gt;Social account&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;https://floss.social/@forgejo&lt;/a&gt; was setup about two years ago and it works flawlessly. However, a problem emerged over the past six months that &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/205&quot;&gt;requires finding a new home&lt;/a&gt;: the moderation team at floss.social cannot be contacted, &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/87&quot;&gt;despite numerous attempts over a period of months and via multiple channels&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nothing indicates it is anything more than a case of being overwhelmed by requests on a rather large instance. But it is best addressed by looking for a new home now instead of waiting that an event requiring moderation happens and is left unattended.&lt;/p&gt;
&lt;h2&gt;Security policy&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/159&quot;&gt;discussion began&lt;/a&gt; in 2023, before Forgejo became a hard-fork of Gitea, to improve the security collaboration with upstream projects. It led to &lt;a href=&quot;https://pad.gusted.xyz/s/uN6kscBuh&quot;&gt;a security policy&lt;/a&gt; that was &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/159&quot;&gt;agreed on&lt;/a&gt; according to the &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/159&quot;&gt;Forgejo decision making process&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Dependency management&lt;/h2&gt;
&lt;p&gt;A dedicated &lt;a href=&quot;https://code.forgejo.org/forgejo-contrib/forgejo-renovate/src/branch/main/.forgejo/workflows/renovate.yml#L21&quot;&gt;renovate repository&lt;/a&gt; runs every 30 minutes in the &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt; instance to service Forgejo related projects, saving them the burden of running it individually.&lt;/p&gt;
&lt;p&gt;The configuration of renovate within Forgejo spaces is the same with regard to Go dependencies. Instead of repeating them in each repository (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/d34d8ec2cfd92451edbadb371cd101fdf2160fad/renovate.json&quot;&gt;forgejo/renovate.json&lt;/a&gt;, &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/commit/1008f44ddbfdc732a41b466985cac0785924af18/renovate.json&quot;&gt;runner/renovate.json&lt;/a&gt;), they &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/commit/82523d1d8e52f607bf7dd87d64f892b704803354/renovate.json&quot;&gt;import a shared configuration&lt;/a&gt; found in &lt;a href=&quot;https://code.forgejo.org/forgejo/renovate-config/src/commit/9f969e5d320ebad4816c51ae30ff4131dc559802/renovate.json&quot;&gt;a repository&lt;/a&gt; created for that purpose.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;5 batches of translation updates were merged with 2090 new strings and 1020 string improvements - more than the previous two months combined.&lt;/p&gt;
&lt;p&gt;The localization team keeps making sure that the merged translation updates are backported to the current stable versions of Forgejo, so that the releases are always shipped with the most complete and highest quality translations available.&lt;/p&gt;
&lt;p&gt;Forgejo is used by a wide variety of people and organizations around the world. For some of them the availability and quality of translations are important factors. Everyone is welcome to contribute to the localization by translating and checking strings. Details on how to participate can be found &lt;a href=&quot;https://forgejo.org/docs/next/contributor/localization/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Forgejo runner&lt;/h2&gt;
&lt;p&gt;A new version of the Forgejo runner was published which &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#3-5-1&quot;&gt;fixes a security issue&lt;/a&gt;. It was made easier by using the same tooling as Forgejo itself to &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/pulls?poster=163&quot;&gt;upgrade the dependencies&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Security is the most important aspect that the Forgejo runner needs to address before it can be considered for beta testing and will be helped &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/204&quot;&gt;by a security audit&lt;/a&gt; which is in the early stages with &lt;a href=&quot;https://www.radicallyopensecurity.com&quot;&gt;Radically Open Security&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It will also need more contributors to help with its long term maintenance and anyone interested is encouraged to join.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;Donations to the &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;Forgejo Liberapay team&lt;/a&gt; reached around 40€ per week and are distributed to &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;three beneficiaries&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Drawing upon &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/144&quot;&gt;previous sustainability discussions&lt;/a&gt;, a &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls?labels=244292&quot;&gt;grant application was submitted&lt;/a&gt; for the &lt;a href=&quot;https://www.sovereigntechfund.de/&quot;&gt;Sovereign Tech Fund&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The creation of a sustainability team, tasked to map out and implement a strategy on how to make Forgejo a durable endeavour over the next years &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/163&quot;&gt;was proposed&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/abueide&quot;&gt;https://codeberg.org/abueide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AdamGreenberg&quot;&gt;https://codeberg.org/AdamGreenberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alex19srv&quot;&gt;https://codeberg.org/alex19srv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AliveDevil&quot;&gt;https://codeberg.org/AliveDevil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arija&quot;&gt;https://codeberg.org/arija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AverageHelper&quot;&gt;https://codeberg.org/AverageHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avobs&quot;&gt;https://codeberg.org/avobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ayakael&quot;&gt;https://codeberg.org/ayakael&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/behm&quot;&gt;https://codeberg.org/behm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bengrue&quot;&gt;https://codeberg.org/bengrue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bookworm&quot;&gt;https://codeberg.org/bookworm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bramh&quot;&gt;https://codeberg.org/bramh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/catgirll&quot;&gt;https://codeberg.org/catgirll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ciampix&quot;&gt;https://codeberg.org/ciampix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CPU_Blanc&quot;&gt;https://codeberg.org/CPU_Blanc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/depeo&quot;&gt;https://codeberg.org/depeo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dploeger&quot;&gt;https://codeberg.org/dploeger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dragon&quot;&gt;https://codeberg.org/dragon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eloy&quot;&gt;https://codeberg.org/eloy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emilylange&quot;&gt;https://codeberg.org/emilylange&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ewm&quot;&gt;https://codeberg.org/ewm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fadedave&quot;&gt;https://codeberg.org/fadedave&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fontenot&quot;&gt;https://codeberg.org/fontenot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gedw99&quot;&gt;https://codeberg.org/gedw99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/h759bkyo4&quot;&gt;https://codeberg.org/h759bkyo4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hahahahacker2009&quot;&gt;https://codeberg.org/hahahahacker2009&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hankskyjames777&quot;&gt;https://codeberg.org/hankskyjames777&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/heartshake&quot;&gt;https://codeberg.org/heartshake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hexa&quot;&gt;https://codeberg.org/hexa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hoovad&quot;&gt;https://codeberg.org/hoovad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hugoalh&quot;&gt;https://codeberg.org/hugoalh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/intelfx&quot;&gt;https://codeberg.org/intelfx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/io7m&quot;&gt;https://codeberg.org/io7m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ironmagma&quot;&gt;https://codeberg.org/ironmagma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/izzy&quot;&gt;https://codeberg.org/izzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/j-dominguez9&quot;&gt;https://codeberg.org/j-dominguez9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jthvai&quot;&gt;https://codeberg.org/jthvai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/justinsimmons&quot;&gt;https://codeberg.org/justinsimmons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kuolemaa&quot;&gt;https://codeberg.org/kuolemaa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/l_austenfeld&quot;&gt;https://codeberg.org/l_austenfeld&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leana8959&quot;&gt;https://codeberg.org/leana8959&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/liberodark&quot;&gt;https://codeberg.org/liberodark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LordMZTE&quot;&gt;https://codeberg.org/LordMZTE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lotigara&quot;&gt;https://codeberg.org/lotigara&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltejur&quot;&gt;https://codeberg.org/maltejur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcellmars&quot;&gt;https://codeberg.org/marcellmars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maxadamo&quot;&gt;https://codeberg.org/maxadamo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mehrad&quot;&gt;https://codeberg.org/mehrad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mickenordin&quot;&gt;https://codeberg.org/mickenordin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mkobel&quot;&gt;https://codeberg.org/mkobel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mrwsl&quot;&gt;https://codeberg.org/mrwsl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Musselman&quot;&gt;https://codeberg.org/Musselman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/naipotato&quot;&gt;https://codeberg.org/naipotato&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/omenos&quot;&gt;https://codeberg.org/omenos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Outbreak2096&quot;&gt;https://codeberg.org/Outbreak2096&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paspflue&quot;&gt;https://codeberg.org/paspflue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paulvt&quot;&gt;https://codeberg.org/paulvt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Porkepix&quot;&gt;https://codeberg.org/Porkepix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pswsm&quot;&gt;https://codeberg.org/pswsm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/qui&quot;&gt;https://codeberg.org/qui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/recursive_recursion&quot;&gt;https://codeberg.org/recursive_recursion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/reynir&quot;&gt;https://codeberg.org/reynir&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rohitsharma09&quot;&gt;https://codeberg.org/rohitsharma09&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/schelmo&quot;&gt;https://codeberg.org/schelmo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SIMULATAN&quot;&gt;https://codeberg.org/SIMULATAN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/skobkin&quot;&gt;https://codeberg.org/skobkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slingamn&quot;&gt;https://codeberg.org/slingamn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sneakers-the-rat&quot;&gt;https://codeberg.org/sneakers-the-rat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/solomonv&quot;&gt;https://codeberg.org/solomonv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stb&quot;&gt;https://codeberg.org/stb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strk&quot;&gt;https://codeberg.org/strk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/taifoss&quot;&gt;https://codeberg.org/taifoss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Techwizz&quot;&gt;https://codeberg.org/Techwizz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tepozoa&quot;&gt;https://codeberg.org/tepozoa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefox&quot;&gt;https://codeberg.org/thefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thilinajayanath&quot;&gt;https://codeberg.org/thilinajayanath&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toolforger&quot;&gt;https://codeberg.org/toolforger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vwbusguy&quot;&gt;https://codeberg.org/vwbusguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangyan&quot;&gt;https://codeberg.org/wangyan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/waseigo&quot;&gt;https://codeberg.org/waseigo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/WhyNotHugo&quot;&gt;https://codeberg.org/WhyNotHugo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xlii&quot;&gt;https://codeberg.org/xlii&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xyhhx&quot;&gt;https://codeberg.org/xyhhx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yarikoptic&quot;&gt;https://codeberg.org/yarikoptic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yoctozepto&quot;&gt;https://codeberg.org/yoctozepto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zub&quot;&gt;https://codeberg.org/zub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo is now copyleft, just like Git</title><link>https://forgejo.org/2024-08-gpl/</link><guid isPermaLink="true">https://forgejo.org/2024-08-gpl/</guid><description>In June 2023, Forgejo agreed to allow copyleft code to be merged in the codebase. A year later, in August 2024, the first pull requests to take advantage of this opportunity were merged. Forgejo versions starting from v9.0 are now released under a copyleft license and earlier Forgejo versions, including v8.0 and v7.0 patch releases remain under the MIT license.</description><pubDate>Thu, 22 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Forgejo is changing its license to a &lt;a href=&quot;https://en.wikipedia.org/wiki/Copyleft&quot;&gt;Copyleft license&lt;/a&gt;. This blog post will try to bring clarity about the impact to you, explain the motivation behind this change and answer some questions you might have.&lt;/p&gt;
&lt;h2&gt;How will this impact me?&lt;/h2&gt;
&lt;p&gt;We have carefully considered the impact the license change has on the variety of usages of Forgejo, and we believe there is little reason to worry. We are not aware of any negative consequences implied by the license change to users who are aligned with Forgejo&apos;s values. While we cannot give legal advice of any kind, we&apos;ll give a first overview of the new requirements.&lt;/p&gt;
&lt;p&gt;If you set up Forgejo from our official distributions
(e.g. binaries, docker images etc),
it is very unlikely that you are affected at all.
We do our best to ensure that our Forgejo distributions are fully compliant out of the box.&lt;/p&gt;
&lt;p&gt;You can also build Forgejo from source, even modify it,
host it for yourself and others.&lt;/p&gt;
&lt;p&gt;If you are redistributing Forgejo binaries,
for example because you are packaging it for GNU/Linux distributions
or some specific container / package format,
you are now required to provide the full source of your Forgejo variant
(including potential modifications)
under the same license terms as Forgejo itself.&lt;/p&gt;
&lt;p&gt;You are free to sell Forgejo services,
including hosting it for others.
If you act according to our values and ensure your users receive the freedoms Forgejo grants you,
it is unlikely that you have to do adjustments to your business now or in the future.&lt;/p&gt;
&lt;p&gt;You might have chosen to avoid copyleft software,
for example because it is discouraged in your company.
However, Forgejo depends on Git, one of the most successful copyleft software.
Both Forgejo and Git must be used together, either as individual binaries or bundled into the &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/9.0-test&quot;&gt;official container images&lt;/a&gt;. The license of Git is &lt;a href=&quot;https://git-scm.com/about/free-and-open-source&quot;&gt;GNU GPL v2&lt;/a&gt;, another version of the same &lt;a href=&quot;https://www.gnu.org/licenses/copyleft.html&quot;&gt;copyleft license&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Why the license change?&lt;/h2&gt;
&lt;p&gt;Developers who choose to publish their work under a copyleft license are excluded from participating in software that is published under a permissive license. That is at the opposite of the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MISSION.md#values&quot;&gt;core values&lt;/a&gt; of the Forgejo project and &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/20&quot;&gt;in June 2023 it was decided to also accept copylefted&lt;/a&gt; contributions.
A year later, in August 2024, the first pull request &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/AGREEMENTS.md#licensing&quot;&gt;to take advantage of this opportunity&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4698/files&quot;&gt;proposed and merged&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A copyleft license makes reusing other copyleft software easier.
Recently, we discovered that
&lt;a href=&quot;https://forgejo.org/2024-07-non-free-dependency-found/&quot;&gt;some of the dependencies we used were incompatible with the license Forgejo was distributed with&lt;/a&gt;,
and they had to be removed for now.
Choosing copyleft licenses enables us to reuse more work,
and saves us precious time to focus on improving Forgejo itself.&lt;/p&gt;
&lt;p&gt;Copyleft licenses do not only benefit the developers.
They also guarantee freedoms to users of the software.
They reduce the risk of exploitive business practices,
like creating a modified version of Forgejo with less freedoms to the users,
which could ultimately trap users in a vendor lock-in.&lt;/p&gt;
&lt;h2&gt;What is changing, now and in the future?&lt;/h2&gt;
&lt;p&gt;Forgejo versions starting from v9.0 are now released &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/LICENSE&quot;&gt;under the GPL v3+&lt;/a&gt; and earlier Forgejo versions, including v8.0 and v7.0 patch releases remain under &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v8.0/forgejo/LICENSE&quot;&gt;the MIT license&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The license of Forgejo is not carved in stone and this change shows that it can adapt to the needs of the project. It also shows that it is a long process: it took months of discussions to reach the agreement in 2023. And another year for it to be put to use. This slow pace reflects how difficult it is to make a sound decision knowing it will have a long lasting impact.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/192&quot;&gt;discussions on how to improve&lt;/a&gt; Forgejo&apos;s licensing are still very lively and will eventually lead to decisions that will improve its legal protection, in the interest of the general public.&lt;/p&gt;
&lt;h2&gt;Contribute to Forgejo&lt;/h2&gt;
&lt;p&gt;Forgejo is in a unique position among the software forges:
It serves its users and is guaranteed to be free and independent,
managed by a non-profit organization and &lt;a href=&quot;https://codeberg.org/forgejo/governance&quot;&gt;a transparent governance process&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are considering contributing to Forgejo,
now that your work is protected by a copyleft license,
we welcome you to our exciting journey and we are looking forward to forging with you.&lt;/p&gt;
&lt;p&gt;If you want to back Forgejo&apos;s independence with a financial contribution,
check out our newly-created &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;Liberapay team&lt;/a&gt;
to compensate our developers for their invested time.&lt;/p&gt;
&lt;p&gt;If you have any feedback or suggestions, do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release v8.0.1 &amp; v7.0.7</title><link>https://forgejo.org/2024-08-release-v801/</link><guid isPermaLink="true">https://forgejo.org/2024-08-release-v801/</guid><description>The Forgejo v8.0.1 &amp; v7.0.7 releases contain a security fix for a cross-site scripting (XSS) vulnerability that allowed repository owners to create links that executed javascript when clicking on them.</description><pubDate>Fri, 09 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v8.0.1&quot;&gt;v8.0.1&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v7.0.7&quot;&gt;v7.0.7&lt;/a&gt; was released 9 August 2024.&lt;/p&gt;
&lt;p&gt;These releases contain a fix for a security issue, which can be exploited by registered Forgejo users who can change the description of a repository. A &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1433&quot;&gt;change introduced in Forgejo v1.21&lt;/a&gt; allows a Forgejo user with write permission on a repository description &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;to inject a client-side script into the web page viewed by the visitor&lt;/a&gt;. This XSS vulnerability allows for &lt;code&gt;href&lt;/code&gt; in anchor elements to be set to a &lt;code&gt;javascript:&lt;/code&gt; URI in the repository description, which will execute the specified script upon clicking (and not upon loading). &lt;a href=&quot;https://pkg.go.dev/github.com/microcosm-cc/bluemonday#Policy.AllowStandardURLs&quot;&gt;&lt;code&gt;AllowStandardURLs&lt;/code&gt;&lt;/a&gt; is now called for the repository description policy, which ensures that URIs in anchor elements are &lt;code&gt;mailto:&lt;/code&gt;, &lt;code&gt;http://&lt;/code&gt; or &lt;code&gt;https://&lt;/code&gt; thereby disallowing the &lt;code&gt;javascript:&lt;/code&gt; URI.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - July 2024</title><link>https://forgejo.org/2024-07-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-07-monthly-update/</guid><description>A non-free JavaScript library was found in the project&apos;s dependency structure, and the entire component that relied on it was re-implemented. Forgejo v8.0 is available with new features, a new approach to UI and UX, careful upgrade of dependencies to improve stability and security. Foundation parts for ActivityPub based federation and data portability were merged in.</description><pubDate>Wed, 31 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2024-07-non-free-dependency-found/&quot;&gt;A non-free JavaScript library was found&lt;/a&gt; in the project&apos;s dependency structure, and the entire component that relied on it was re-implemented. The new versions 8.0.0 and 7.0.6 were released without this library. This step is important to meet the core values of Forgejo.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2024-07-release-v8-0/&quot;&gt;Forgejo v8.0 is available&lt;/a&gt; with new features (support for workflow dispatch, better defaults to avoid spam on new instances etc.), a new approach to UI and UX, careful upgrade of dependencies to improve stability and security. Foundation parts for ActivityPub based federation and data portability were merged in.&lt;/p&gt;
&lt;h2&gt;Forgejo v8.0 release&lt;/h2&gt;
&lt;p&gt;A gentle way of describing Forgejo User eXperience is that it is an acquired taste: it grew over the years, driven by the inspiration of the person with the keyboard in their hand. Once implemented it almost never changed. A user who started with Forgejo in 2022 can only see minor changes in 2024 and not all of them make intuitive sense. The solution to this problem is simple and was identified early on: &lt;a href=&quot;https://jdittrich.github.io/userNeedResearchBook/&quot;&gt;User Research&lt;/a&gt;. But only in the making of Forgejo v8.0 did it get some momentum.&lt;/p&gt;
&lt;p&gt;A special effort was also made to reduce the breaking changes of this release to a minimum. For instance it would have been easier to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3363&quot;&gt;this improvement to the rootless OCI image&lt;/a&gt; as a breaking change. But significant time was spent to figure out a way to make it backward compatible. Another example is the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3934&quot;&gt;new default for self-registration&lt;/a&gt; that only applies to new installations to not require a manual intervention to change the settings.&lt;/p&gt;
&lt;h2&gt;Licensing&lt;/h2&gt;
&lt;p&gt;The release of Forgejo v8.0 was delayed because it was discovered that a non-free dependency of a dependency initially created for Gitea was loaded into the project.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/go-gitea/gitea/commit/81cfe243f9cb90b0a75de7a03bb2d264c97f0036#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519R9&quot;&gt;dependency already existed&lt;/a&gt; at the time of the fork from Gitea and was therefore included in Forgejo from the beginning. The commitment of Forgejo is to always be &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MISSION.md#values&quot;&gt;free as in freedom, open source and a community-first product&lt;/a&gt;. Non-free dependencies and distribution licenses are incompatible with the values of Forgejo. Therefore, it was of high importance to remove the problematic dependency&lt;/p&gt;
&lt;p&gt;Read more in &lt;a href=&quot;/2024-07-non-free-dependency-found/&quot;&gt;the &quot;Non-free dependency discovered in Forgejo and removed&quot;&lt;/a&gt; blog post.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/24&quot;&gt;June last year&lt;/a&gt; an agreement &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/AGREEMENTS.md#licensing&quot;&gt;was reached&lt;/a&gt; by which:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Forgejo accepts contributions compatible with the GPLv3-or-later license. The license under which Forgejo is distributed will be changed upon the acceptance of such contributions. See the LICENSE file for the current license.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This has not happened yet but there now are pull requests in flight that have copylefted code in them. &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/192&quot;&gt;Discussions started&lt;/a&gt; to find the best way to move forward.&lt;/p&gt;
&lt;h2&gt;Design&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/design&quot;&gt;forgejo/design&lt;/a&gt; repository was created. Design being wider than the visual appearance, it&apos;s about User eXperience, workflows, efficiency, and even technical aspects. It is the interface between the UI and User Research Teams, they iterate on features, gather data, exchange ideas.&lt;/p&gt;
&lt;p&gt;The envisioned workflow is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feature requests are filed to Forgejo.&lt;/li&gt;
&lt;li&gt;When some of them sound interesting or related, a new issue in forgejo/design is created to coordinate the work on a feature.&lt;/li&gt;
&lt;li&gt;New insights (e.g. from user research, but also from duplicate or related issues) can be quickly referenced in the related issue.&lt;/li&gt;
&lt;li&gt;The related Git repository is used for developing the actual state of the feature. People can propose changes which are documented in markdown files.&lt;/li&gt;
&lt;li&gt;Whenever a design is ready, it can be referenced again in the Forgejo repository and used for implementation.&lt;/li&gt;
&lt;li&gt;When a developer wants to start working on something and would like to get design feedback, they also open an issue in the design repo to gain input UI wise and from user research.&lt;/li&gt;
&lt;li&gt;Finally, the design repo should contain guidelines for consistency as a developer resource.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;It is used to deploy the test instances &lt;code&gt;*.next.forgejo.org&lt;/code&gt; using a &lt;a href=&quot;https://code.forgejo.org/infrastructure/k8s&quot;&gt;dedicated repository&lt;/a&gt; in the newly created &lt;a href=&quot;https://code.forgejo.org/infrastructure&quot;&gt;infrastructure organization&lt;/a&gt; that contains the code automating the updates to the Forgejo infrastructure.&lt;/p&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;four patch updates&lt;/a&gt;, one for &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.0.2&quot;&gt;7.0.2&lt;/a&gt; which depends on Forgejo v7.0.5, one for &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.0.3&quot;&gt;7.0.3&lt;/a&gt; and another for &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v5.1.3&quot;&gt;5.1.3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A new major version, &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v8.1.0&quot;&gt;8.1.0&lt;/a&gt; was published and includes &lt;a href=&quot;https://forgejo.org/2024-07-release-v8-0/&quot;&gt;Forgejo v8.0.0&lt;/a&gt; as well as changes from the Gitea chart.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;Malayalam and Serbian translations, although incomplete, existed in the past but were deleted from the repository over a year ago, before the Forgejo localization team was established. They were stored on a proprietary translation platform, waiting to reach a percentage of completion before being added back. But Forgejo works differently: all translations are present in the repository and only a selected subset is displayed to the user, when they reach an acceptable completion percentage. The once deleted files for Malayalam and Serbian were restored in the repository to help resume the translation effort.&lt;/p&gt;
&lt;h2&gt;Release notes assistant&lt;/h2&gt;
&lt;p&gt;Forgejo release notes do not fit the popular trend that consists on enforcing &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;conventional commits&lt;/a&gt; so that &lt;a href=&quot;https://github.com/orhun/git-cliff&quot;&gt;tools&lt;/a&gt; can collect them because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The unit of change in Forgejo is the pull request, not the commit.&lt;/strong&gt; It is not uncommon for a pull request to contain multiple commits that are related but independent from each other. Squashing them into a single commit is not an option. There are diverging opinions on the matter and enforcing a merge policy where pull requests are always squashed into a single commit leads to a nicely flat commit history. But Forgejo made a different choice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A single commit or pull request may require multiple release note lines.&lt;/strong&gt; When upgrading a dependency by modifying one line in the &lt;code&gt;go.mod&lt;/code&gt; file leads to user facing changes, each of them needs to be described in the release notes. Forgejo relies on hundreds of other Free Software projects and although most of them are plumbing that the Forgejo user do not need to be aware of, others are very visible such as the web editor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release notes need manual editing.&lt;/strong&gt; No matter how good and disciplined the author of a pull request is, there will be typos and unification problems that are best addressed when preparing the release, at the very last stage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Discussions started early 2024 (&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/159&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/155&quot;&gt;there&lt;/a&gt;) to distribute the release notes workload to the author of each pull request rather than relying on a single person manually doing the same a few days before the release. As the number of contributors to Forgejo increased significantly early 2024, the quality of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-0&quot;&gt;v7.0.0 release notes&lt;/a&gt; was sub-standard and a solution had to be found.&lt;/p&gt;
&lt;p&gt;Read more in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/197&quot;&gt;Scaling out Forgejo release notes&lt;/a&gt; postmortem.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;Donations are now accepted for the &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;Forgejo Liberapay team&lt;/a&gt;. Liberapay is a French non-profit dedicated to crowdfunding with predictable income, allowing transfers via multiple payment options and providers with a comparably low fee. It was already possible to &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donate to Codeberg e.V.&lt;/a&gt;, and part of the funding was used to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/#forgejo-resources-per-year&quot;&gt;compensate for work on Forgejo&lt;/a&gt;. However, the Liberapay team now allows for money to go directly to developers without a roundtrip to Codeberg. Additionally, Liberapay allows for a steady and reliable funding stream next to other options, a crucial aspect for our project. The distribution of funds through Liberapay is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;transparently controlled using our decision-making process&lt;/a&gt;, and Forgejo contributors are encouraged to consider applying to benefit from this funding opportunity.&lt;/p&gt;
&lt;p&gt;The NLnet grant application &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls?labels=220838&quot;&gt;submitted 1 April&lt;/a&gt; passed the first round of review and will have to answer questions to qualify for the second round.&lt;/p&gt;
&lt;p&gt;Drawing upon &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/144&quot;&gt;previous sustainability discussions&lt;/a&gt;, a &lt;a href=&quot;https://codeberg.org/avobs/sustainability/src/branch/main/2024-07-22%20STF/application_text.md&quot;&gt;grant application was drafted&lt;/a&gt; for the &lt;a href=&quot;https://www.sovereigntechfund.de/&quot;&gt;Sovereign Tech Fund&lt;/a&gt;. It seems to be a good fit for Forgejo, and in particular for the a similar project outline already proposed to OTF. Unlike the OTF call, STF does not have deadlines for general funding requests. It could be submitted before mid-August.&lt;/p&gt;
&lt;p&gt;Discussions started to establish a sustainability team, tasked to map out and implement a strategy on how to make Forgejo a durable endeavour over the next years. It seems that the project is at a point where it could use a concerted effort in this direction, even if, or maybe because, it isn&apos;t a very popular matter.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ajtatum&quot;&gt;https://codeberg.org/ajtatum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alexandria&quot;&gt;https://codeberg.org/alexandria&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anbraten&quot;&gt;https://codeberg.org/anbraten&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arija&quot;&gt;https://codeberg.org/arija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avobs&quot;&gt;https://codeberg.org/avobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/awiteb&quot;&gt;https://codeberg.org/awiteb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/b1nar10&quot;&gt;https://codeberg.org/b1nar10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/balinteus&quot;&gt;https://codeberg.org/balinteus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/banaanihillo&quot;&gt;https://codeberg.org/banaanihillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/behm&quot;&gt;https://codeberg.org/behm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bencurio&quot;&gt;https://codeberg.org/bencurio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benedictjohannes&quot;&gt;https://codeberg.org/benedictjohannes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/benniekiss&quot;&gt;https://codeberg.org/benniekiss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bramh&quot;&gt;https://codeberg.org/bramh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ch0ccyra1n&quot;&gt;https://codeberg.org/ch0ccyra1n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chizutan5&quot;&gt;https://codeberg.org/chizutan5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ciampix&quot;&gt;https://codeberg.org/ciampix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/clarfonthey&quot;&gt;https://codeberg.org/clarfonthey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/clemensgeibel&quot;&gt;https://codeberg.org/clemensgeibel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/codebert&quot;&gt;https://codeberg.org/codebert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Darthagnon&quot;&gt;https://codeberg.org/Darthagnon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dcz&quot;&gt;https://codeberg.org/dcz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/depeo&quot;&gt;https://codeberg.org/depeo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dleberre&quot;&gt;https://codeberg.org/dleberre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dstensnes&quot;&gt;https://codeberg.org/dstensnes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/efertone&quot;&gt;https://codeberg.org/efertone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ember&quot;&gt;https://codeberg.org/Ember&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EssGeeEich&quot;&gt;https://codeberg.org/EssGeeEich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ethanaobrien&quot;&gt;https://codeberg.org/ethanaobrien&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/evrial&quot;&gt;https://codeberg.org/evrial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ewm&quot;&gt;https://codeberg.org/ewm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/floss4good&quot;&gt;https://codeberg.org/floss4good&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GDWR&quot;&gt;https://codeberg.org/GDWR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grosmanal&quot;&gt;https://codeberg.org/grosmanal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hankskyjames777&quot;&gt;https://codeberg.org/hankskyjames777&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hugorodrigues&quot;&gt;https://codeberg.org/hugorodrigues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iaxat&quot;&gt;https://codeberg.org/iaxat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ikuyo&quot;&gt;https://codeberg.org/ikuyo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ilyas0Iks&quot;&gt;https://codeberg.org/Ilyas0Iks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jalil&quot;&gt;https://codeberg.org/jalil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jdittrich&quot;&gt;https://codeberg.org/jdittrich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jthvai&quot;&gt;https://codeberg.org/jthvai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kdh8219&quot;&gt;https://codeberg.org/kdh8219&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kpfleming&quot;&gt;https://codeberg.org/kpfleming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/l_austenfeld&quot;&gt;https://codeberg.org/l_austenfeld&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leana8959&quot;&gt;https://codeberg.org/leana8959&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/liberodark&quot;&gt;https://codeberg.org/liberodark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LunarLambda&quot;&gt;https://codeberg.org/LunarLambda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mahlzahn&quot;&gt;https://codeberg.org/mahlzahn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/manolosd&quot;&gt;https://codeberg.org/manolosd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/marcellmars&quot;&gt;https://codeberg.org/marcellmars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meaz&quot;&gt;https://codeberg.org/meaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meskobalazs&quot;&gt;https://codeberg.org/meskobalazs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mrwsl&quot;&gt;https://codeberg.org/mrwsl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mysticmode&quot;&gt;https://codeberg.org/mysticmode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nhathaway&quot;&gt;https://codeberg.org/nhathaway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nifou&quot;&gt;https://codeberg.org/Nifou&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oelmekki&quot;&gt;https://codeberg.org/oelmekki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pointlessone&quot;&gt;https://codeberg.org/pointlessone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rdvn&quot;&gt;https://codeberg.org/rdvn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/revi&quot;&gt;https://codeberg.org/revi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rohitsharma09&quot;&gt;https://codeberg.org/rohitsharma09&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sbatial&quot;&gt;https://codeberg.org/sbatial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shisui&quot;&gt;https://codeberg.org/shisui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Skivling&quot;&gt;https://codeberg.org/Skivling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slingamn&quot;&gt;https://codeberg.org/slingamn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/solomonv&quot;&gt;https://codeberg.org/solomonv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strk&quot;&gt;https://codeberg.org/strk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tepozoa&quot;&gt;https://codeberg.org/tepozoa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefox&quot;&gt;https://codeberg.org/thefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thepaperpilot&quot;&gt;https://codeberg.org/thepaperpilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ThetaDev&quot;&gt;https://codeberg.org/ThetaDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thetredev&quot;&gt;https://codeberg.org/thetredev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toolforger&quot;&gt;https://codeberg.org/toolforger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tseeker&quot;&gt;https://codeberg.org/tseeker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/twenty-panda&quot;&gt;https://codeberg.org/twenty-panda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/uda&quot;&gt;https://codeberg.org/uda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xvello&quot;&gt;https://codeberg.org/xvello&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ZDev&quot;&gt;https://codeberg.org/ZDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zotan&quot;&gt;https://codeberg.org/zotan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Non-free dependency discovered in Forgejo and removed</title><link>https://forgejo.org/2024-07-non-free-dependency-found/</link><guid isPermaLink="true">https://forgejo.org/2024-07-non-free-dependency-found/</guid><description>A non-free JavaScript library was found in the project&apos;s dependency structure, and the entire component that relied on it was re-implemented. The new versions 8.0.0 and 7.0.6 will be released without this library. This step is important to meet the core values of Forgejo.</description><pubDate>Tue, 30 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On 18 July 2024, a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/4569&quot;&gt;small piece of non Free Software was discovered&lt;/a&gt; within the Forgejo codebase.
It is only used to display the top authors contribution graph (which is part of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/activity&quot;&gt;repository activity&lt;/a&gt;) in the web interface.
A replacement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4571&quot;&gt;was implemented&lt;/a&gt; and merged on 20 July 2024.
This piece of non-Free Software is no longer contained in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#8-0-0&quot;&gt;v8.0.0 release&lt;/a&gt; and the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-6&quot;&gt;v7.0.6 point release&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;During a discussion about the future of Forgejo&apos;s license, it was discovered that a non-free dependency of a dependency initially created for Gitea was loaded into the project.&lt;/p&gt;
&lt;p&gt;The usage of the non-free dependency was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/4569&quot;&gt;reported&lt;/a&gt; in the main issue tracker on 18 July.
A few hours later, a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4571&quot;&gt;pull request&lt;/a&gt; was opened to remove the dependency.
In addition, &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/193&quot;&gt;a discussion&lt;/a&gt; was created to track the problem and the resulting consequences as a whole.
The pull request was merged just over one day after the initial submission.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/go-gitea/gitea/commit/81cfe243f9cb90b0a75de7a03bb2d264c97f0036#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519R9&quot;&gt;dependency already existed&lt;/a&gt; at the time of the fork from Gitea and was therefore included in Forgejo from the beginning.
The commitment of Forgejo is to always be &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MISSION.md#values&quot;&gt;free as in freedom, open source and a community-first product&lt;/a&gt;.
Non-free dependencies and distribution licenses are incompatible with the values of Forgejo.
Therefore, it was of high importance to remove the problematic dependency.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;/2024-07-release-v8-0/&quot;&gt;release of 8.0.0&lt;/a&gt; was therefore blocked until the problem was solved.
The removal of the binary was also ported to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-6&quot;&gt;7.0.6&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Additionally &lt;a href=&quot;https://github.com/lafriks/vue-bar-graph/issues/14&quot;&gt;the author&lt;/a&gt; of the dependency and &lt;a href=&quot;https://github.com/go-gitea/gitea/issues/31660&quot;&gt;Gitea&lt;/a&gt; were informed of the non-free subdependency.&lt;/p&gt;
&lt;p&gt;In order to rule out further infringements, an &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4574&quot;&gt;improved tool was introduced&lt;/a&gt; to check the licenses of all dependencies.
It runs in the CI, and fails if an incompatibility is found.
Due to the new tool which works more precisely, it can lead to more licenses being included in the &lt;a href=&quot;https://next.forgejo.org/assets/licenses.txt&quot;&gt;&lt;code&gt;license.txt&lt;/code&gt;&lt;/a&gt; - also from dependencies that are removed in the build process.
But better this safe way than missing licenses from dependencies in the end.&lt;/p&gt;
&lt;p&gt;Because &lt;a href=&quot;https://gsap.com/community/standard-license/&quot;&gt;GSAP&lt;/a&gt;, the indirect dependency, is not Free Software, it cannot be &lt;a href=&quot;https://codeberg.org/forgejo&quot;&gt;distributed in the Forgejo organization&lt;/a&gt; hosted by Codeberg.
It is prohibited by the &lt;a href=&quot;https://codeberg.org/Codeberg/org/src/branch/main/TermsOfUse.md#2-allowed-content-usage&quot;&gt;Codeberg Terms of Use&lt;/a&gt; and goes against the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MISSION.md#values&quot;&gt;Forgejo core values&lt;/a&gt;.
&lt;strong&gt;The Forgejo binaries and container images will be deleted.&lt;/strong&gt;
It will take some time, since the technical impact on existing Forgejo instances that depend on them has to be carefully addressed.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;During the investigation, two other indirect dependencies with incompatible licenses were found.&lt;/p&gt;
&lt;p&gt;One is a dependency which was used for citing a repository in APA format (if the repository is set up for this) and has been &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4595&quot;&gt;removed for the moment&lt;/a&gt;.
It has a more restrictive, &lt;a href=&quot;https://github.com/Juris-M/citeproc-js/blob/master/LICENSE&quot;&gt;copyleft license&lt;/a&gt; which is incompatible with the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/LICENSE&quot;&gt;current license&lt;/a&gt; of Forgejo.
Repositories can therefore currently only be cited in the widely used BibTeX format.
As Forgejo decided to accept copyleft license last year, this dependency may be added again in the future.&lt;/p&gt;
&lt;p&gt;The other is &lt;a href=&quot;https://github.com/kieler/elkjs&quot;&gt;elkjs&lt;/a&gt; included by &lt;a href=&quot;https://github.com/mermaid-js/mermaid&quot;&gt;Mermaid&lt;/a&gt;.
It also has a more restrictive, &lt;a href=&quot;https://github.com/kieler/elkjs/blob/master/LICENSE.md&quot;&gt;copyleft license&lt;/a&gt; which is incompatible with the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/LICENSE&quot;&gt;current license&lt;/a&gt; of Forgejo.
Since &lt;a href=&quot;https://mermaid.js.org/syntax/flowchart.html?#renderer&quot;&gt;elk as renderer is experimental&lt;/a&gt; so far, it was decided to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4670&quot;&gt;remove elk manually&lt;/a&gt;.
If you decide to set elkjs specifically as a renderer, an error now occurs.
This is currently the only solution for the license issue.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v8.0 is available</title><link>https://forgejo.org/2024-07-release-v8-0/</link><guid isPermaLink="true">https://forgejo.org/2024-07-release-v8-0/</guid><description>Forgejo v8.0 is available with new features (support for workflow dispatch, better defaults to avoid spam on new instances etc.), a new approach to UI and UX, careful upgrade of dependencies to improve stability and security. Foundation parts for ActivityPub based federation and data portability were merged in, bringing these features closer to completion, but they&apos;re not available yet.</description><pubDate>Tue, 30 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v8.0&lt;/a&gt; was released 30 July 2024. You will find a short selection of the changes it introduces below and in a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#8-0-0&quot;&gt;complete list in the release notes&lt;/a&gt;. It is released the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-6&quot;&gt;same day as Forgejo v7.0.6&lt;/a&gt; to address licensing issues impacting frontend features (APA citation format, mermaid ELK rendering and the display of contributor graphs). &lt;a href=&quot;https://forgejo.org/2024-07-non-free-dependency-found/&quot;&gt;Read more in the dedicated blog post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It comes with &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#8-0-0&quot;&gt;a number of new features&lt;/a&gt;, as usual. But the most impactful changes are of a different nature: increased stability, less random UI modifications and almost no breaking changes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A newly created &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#user-interface&quot;&gt;UI team&lt;/a&gt; engaged in a different approach and can be credited for a drastic reduction in random User Interface changes in this release.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/2779&quot;&gt;A dependency dashboard&lt;/a&gt; is now used to carefully &lt;a href=&quot;https://forgejo.org/docs/latest/developer/dependencies/&quot;&gt;watch over each of them&lt;/a&gt;, with a direct impact on stability and security.&lt;/li&gt;
&lt;li&gt;The breaking changes were reduced to a minimum because there is now an increased focus on backward compatibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If stability is more important than new features, consider using Forgejo v7.0 instead: it is a Long Term Support release that will receive bug fixes until 16 July 2025. Forgejo v8.0 will be supported until 16 October 2024, when Forgejo v9.0 is published.&lt;/p&gt;
&lt;p&gt;A dedicated test instance is available (&lt;code&gt;v8.next.forgejo.org&lt;/code&gt;) to try it out. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v8.0/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#8-0-0&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or in the &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;chat room&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;New features&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v8.0/user/actions/#onworkflow_dispatch&quot;&gt;Manually trigger a Forgejo Action&lt;/a&gt;&lt;/strong&gt; workflow with the input provided by the user in the web interface.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3934&quot;&gt;Self-registration is now disabled by default&lt;/a&gt;&lt;/strong&gt; on the installation page. This is done to prevent the creation of unmaintained instances with open registration that are abused by spammers for malicious purposes.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3139&quot;&gt;Generated release attachments can optionally be hidden&lt;/a&gt;&lt;/strong&gt; to not be confused with the archives uploaded by the user. For instance, each Forgejo release includes &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/download/v7.0.5/forgejo-src-7.0.5.tar.gz&quot;&gt;a source archive&lt;/a&gt; which is different from the generated archive.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#8-0-0&quot;&gt;in the Forgejo v8.0.0 release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;A new approach to UI and UX&lt;/h3&gt;
&lt;p&gt;The first user visible benefit of the new approach is a drastic reduction of the seemingly random User Interface changes that were frequently found in previous releases.&lt;/p&gt;
&lt;p&gt;A gentle way of describing Forgejo User eXperience is that it is an acquired taste: it grew over the years, driven by the inspiration of the person with the keyboard in their hand. Once implemented it almost never changed. A user who started with Forgejo in 2022 can only see minor changes in 2024 and not all of them make intuitive sense. The solution to this problem is simple and was identified early on: &lt;a href=&quot;https://jdittrich.github.io/userNeedResearchBook/&quot;&gt;User Research&lt;/a&gt;. But only in the making of Forgejo v8.0 did it get some momentum.&lt;/p&gt;
&lt;p&gt;The time and energy of &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#user-interface&quot;&gt;Forgejo contributors with the skills and desire to improve the User eXperience&lt;/a&gt; went in four equally important directions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conducting user testing sessions (&lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues/34&quot;&gt;June 2024&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/user-research/src/branch/main/interviews/2024-04/template.md&quot;&gt;April 2024&lt;/a&gt;) to observe how Forgejo is used. How do users work with Forgejo? What problems do they run into?&lt;/li&gt;
&lt;li&gt;Discussing &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/178&quot;&gt;a new workflow for designing and implementing feature requests&lt;/a&gt;. The focus is on the problems rather than the solution. When a user or a developer has a solution in mind, it is not uncommon that it does not solve an actual problem.&lt;/li&gt;
&lt;li&gt;Giving some love to the current user interface, fixing bugs and backporting them to the stable versions (e.g. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=87703&amp;amp;milestone=6654&quot;&gt;7.0.5&lt;/a&gt;). Review and apply &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=223008&quot;&gt;upgrades&lt;/a&gt; of &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/8afdafebf9fa2cb748a13e56ff3d865675ae27b6/package.json&quot;&gt;JavaScript packages&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=202906&quot;&gt;other dependencies&lt;/a&gt; used to build the UI.&lt;/li&gt;
&lt;li&gt;Improving the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commits/branch/forgejo/tests/e2e&quot;&gt;JavaScript test coverage&lt;/a&gt; which is still currently under 10% but has seen more improvement in the past three months than in the past two years.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In a nutshell, Forgejo&apos;s goal is now to design its User eXperience based on what user needs, as demonstrated by observations, rather than what they think that they want.&lt;/p&gt;
&lt;h3&gt;Removal of Microsoft SQL Server support&lt;/h3&gt;
&lt;p&gt;When Forgejo started almost two years ago, it focused on supporting and documenting a subset of the features present in the codebase. It made a implicit promise to its users to produce quality releases where new features could be added and bug fixed. It is a simple problem to solve as long as there are two necessary ingredients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Contributors with the knowledge to diagnose a problem&lt;/li&gt;
&lt;li&gt;Automated tests guarding the code against regressions when a new feature or a bug fix is merged in the codebase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Microsoft SQL Server never met these conditions and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/122&quot;&gt;discussions began early 2024&lt;/a&gt; to address the problem. The short version is that there is no reported use of a Forgejo instance running Microsoft SQL Server currently, and the decision was made to remove it from the codebase.&lt;/p&gt;
&lt;p&gt;An alternative would have been to leave it, to give a chance to someone with the right skills to step up and contribute their knowledge to support Microsoft SQL Server. But that would not solve the other problem: because Microsoft SQL Server is not Free Software, it cannot be integrated in the automated tests. That would be adding a non Free Software dependency to Forgejo, which goes against its core values.&lt;/p&gt;
&lt;p&gt;Because Forgejo is still young and none of its users rely on Microsoft SQL Server support, it can be dropped without inconveniencing anyone. As Forgejo&apos;s popularity grows, keeping the feature in the codebase would increase the probability that users rely on Microsoft SQL Server. It would then be a difficult situation for Forgejo and it is best to avoid that trap.&lt;/p&gt;
&lt;p&gt;See also the &lt;a href=&quot;/2024-06-monthly-update/#standard-formats-and-protocols&quot;&gt;related section on standard formats and protocols&lt;/a&gt; in the June 2024 report.&lt;/p&gt;
&lt;h3&gt;Less breaking changes&lt;/h3&gt;
&lt;p&gt;A special effort was made to reduce the breaking changes of this release to a minimum. For instance it would have been easier to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3363&quot;&gt;this improvement to the rootless OCI image&lt;/a&gt; as a breaking change. But significant time was spent to figure out a way to make it backward compatible. Another example is the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3934&quot;&gt;new default for self-registration&lt;/a&gt; that only applies to new installations to not require a manual intervention to change the settings.&lt;/p&gt;
&lt;h3&gt;Improved stability&lt;/h3&gt;
&lt;p&gt;Forgejo directly depends on hundreds of software projects: OCI images are based on &lt;a href=&quot;https://alpinelinux.org/&quot;&gt;Alpine Linux&lt;/a&gt;, markdown rendering uses &lt;a href=&quot;https://github.com/yuin/goldmark&quot;&gt;goldmark&lt;/a&gt;, TLS certificates are obtained using &lt;a href=&quot;https://github.com/caddyserver/certmagic&quot;&gt;certmagic&lt;/a&gt; and the list goes on, ranging from CI tooling that only matter to Forgejo developers to user interface components such as the &lt;a href=&quot;https://microsoft.github.io/monaco-editor/&quot;&gt;editor used to write issue comments&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Watching over those dependencies was an unsolved problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bugs (or even security) fixes were not applied because no contributor had the time or the inclination to watch over them manually&lt;/li&gt;
&lt;li&gt;batch upgrades, dozens of direct dependencies at a time, occasionally happened without actually reading through the release notes of each of them, let alone evaluate the risk of regression or the new features they include&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was resolved in v8.0 with &lt;a href=&quot;https://codeberg.org/forgejo/tools/src/branch/main/scripts/wcp&quot;&gt;specific tooling&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/2779&quot;&gt;a dependency dashboard&lt;/a&gt; updated hourly by &lt;a href=&quot;https://github.com/renovatebot/renovate&quot;&gt;renovate&lt;/a&gt; and watched over daily by Forgejo contributors. When a new release of a dependency is published, it is immediately proposed for review and the decision to upgrade is made in accordance to the new &lt;a href=&quot;/docs/v8.0/developer/dependencies/&quot;&gt;dependency management process&lt;/a&gt;. The tooling made it possible and sustainable to observe the evolution of hundred of dependencies.&lt;/p&gt;
&lt;p&gt;The immediate benefits are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;more stability as batch upgrades no longer happen with the associated risk of regression&lt;/li&gt;
&lt;li&gt;bugs and security fixes found in dependencies are applied without undue delay, and backported to stable releases&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gitea compatibility&lt;/h3&gt;
&lt;p&gt;Forgejo v8.0 was manually tested to be compatible with Gitea v1.22. Users reported successful upgrades of an instance of Gitea v1.22 to the development version of Forgejo v8.0. In addition, &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/205&quot;&gt;automated upgrade tests from Gitea v1.22 to Forgejo v8.0&lt;/a&gt; were implemented and are run prior to each Forgejo release.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An instance running Gitea versions up to v1.21 can be upgraded to Forgejo v7.0 or v8.0&lt;/li&gt;
&lt;li&gt;An instance running Gitea v1.22 can be upgraded to Forgejo v8.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more about &lt;a href=&quot;/2024-02-forking-forward/&quot;&gt;Gitea compatibility in the blog post explaining the hard fork that happened in February 2024&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Release schedule and Long Term Support&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;/docs/v8.0/developer/release/#release-cycle&quot;&gt;time based release schedule&lt;/a&gt; was established to publish a release every three months. Patch releases will be published more frequently, depending on the severity of the bug or security fixes they contain.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;2023 Q4&lt;/td&gt;
&lt;td&gt;1.21.1-0&lt;/td&gt;
&lt;td&gt;26 November 2023&lt;/td&gt;
&lt;td&gt;17 July 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q1&lt;/td&gt;
&lt;td&gt;7.0.0&lt;/td&gt;
&lt;td&gt;23 April 2024&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2025&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;8.0.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 July 2024&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q3&lt;/td&gt;
&lt;td&gt;9.0.0&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;td&gt;15 January 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;8.0-test daily releases&lt;/h3&gt;
&lt;p&gt;Releases are built daily from the latest changes found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v8.0/forgejo&quot;&gt;v8.0/forgejo&lt;/a&gt; development branch. They are deployed to the &lt;code&gt;v8.next.forgejo.org&lt;/code&gt; instance for manual verification in case a bug fix is of particular interest ahead of the next patch release. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/8.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/8.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v8.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their name stays the same but they are replaced by a new build every day.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#localization&quot;&gt;localization team&lt;/a&gt; brought a batch of translations weekly, from the Weblate &lt;a href=&quot;https://translate.codeberg.org/projects/forgejo/forgejo/&quot;&gt;project&lt;/a&gt;. A particular effort was made to backport all of them to Forgejo v7.0.&lt;/p&gt;
&lt;p&gt;The work on refactoring base localization to improve User eXperience and translatability was also ported to v7.0, when there was no risk of regressions.&lt;/p&gt;
&lt;p&gt;Anyone is welcome to participate in improving translation &lt;a href=&quot;/docs/v8.0/developer/localization&quot;&gt;for their language&lt;/a&gt; as well as &lt;a href=&quot;/docs/v8.0/developer/localization-english/#contributing&quot;&gt;the English base&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;Does &lt;code&gt;Forgejo&lt;/code&gt; support federation? Not yet. Was there progress? Yes.&lt;/p&gt;
&lt;p&gt;Building blocks for both &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;ActivityPub federation&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3590&quot;&gt;data portability improvements&lt;/a&gt; were merged into the codebase. They are not yet used for any user visible feature but they are a stepping stone. Their implementation was made significantly easier by the hard fork because they can rely on a codebase that is better tested.&lt;/p&gt;
&lt;p&gt;The ActivityPub based communication between two Forgejo instances is used by a new internal test scenario where adding a star to a repository on one instance also adds a star on a federated repository on the other instance.&lt;/p&gt;
&lt;p&gt;Read more about &lt;a href=&quot;/2024-06-monthly-update/#federation&quot;&gt;federation&lt;/a&gt; and &lt;a href=&quot;/2024-06-monthly-update/#data-portability&quot;&gt;data portability&lt;/a&gt; in the June 2024 &lt;a href=&quot;https://forgejo.org/2024-06-monthly-update/&quot;&gt;Forgejo monthly report&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Get Forgejo v8.0&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download/&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#8-0-0&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#8-0-0&quot;&gt;breaking changes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v8.0.0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/8.0.0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/8.0&quot;&gt;&lt;code&gt;8.0&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;8.0.Y&lt;/code&gt; patch release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v8.0/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
&lt;h3&gt;Donate&lt;/h3&gt;
&lt;p&gt;Forgejo is proud to be &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/&quot;&gt;funded transparently&lt;/a&gt;. Since a few days, we additionally accept donations from our users through &lt;a href=&quot;https://liberapay.com/forgejo&quot;&gt;our Forgejo Liberapay team&lt;/a&gt;. If you appreciate Forgejo, consider setting up a donation to help going forward.
Liberapay is a French non-profit dedicated to crowdfunding with predictable income, allowing transfers via multiple payment options and providers with a comparably low fee. It was already possible to &lt;a href=&quot;https://docs.codeberg.org/improving-codeberg/donate/&quot;&gt;donate to Codeberg e.V.&lt;/a&gt; (you can still do in case the Liberapay option does not work out for you), and part of the funding was used to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/#forgejo-resources-per-year&quot;&gt;compensate for work on Forgejo&lt;/a&gt;. However, the Liberapay team now allows for money to go directly to developers without a round-trip to Codeberg.&lt;/p&gt;
&lt;p&gt;Additionally, Liberapay allows for a steady and reliable funding stream next to other options, a crucial aspect for our project. The distribution of funds through Liberapay is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#liberapay-team-members&quot;&gt;transparently controlled using our decision-making process&lt;/a&gt;, and Forgejo contributors are encouraged to consider applying to benefit from this funding opportunity.
Thank you for using Forgejo and considering a donation, in case your financial situation allows you to.&lt;/p&gt;
&lt;h3&gt;Forgejo Upgrade Party and Get-Together&lt;/h3&gt;
&lt;p&gt;Let&apos;s upgrade together!&lt;/p&gt;
&lt;p&gt;The Forgejo v8 release is available. We are looking forward to meeting with you via OpenTalk, providing a space for admins and developers to assist each other. We are excited to learn from your setups and the challenges you encounter to further improve Forgejo in the future.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.codeberg.page/Events/events/2024/08-02-forgejo-upgrade-party/&quot;&gt;Read the full invite on the Codeberg Event Calendar!&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - June 2024</title><link>https://forgejo.org/2024-06-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-06-monthly-update/</guid><description>The User Research effort that gained momentum two months ago continues with a new round of user testing sessions. It is key to collect evidence about what Forgejo users need, a requirement to build a roadmap and reduce the growing backlog of bug reports and feature requests. Building blocks for both ActivityPub federation and data portability improvements were merged into the codebase. They are not yet used for any user visible feature but they are a stepping stone. Their implementation was made significantly easier by the hard fork because they can rely on a codebase that is better tested.</description><pubDate>Sun, 30 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/156&quot;&gt;User Research effort&lt;/a&gt; that gained momentum two months ago continues with a new round of &lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues/34&quot;&gt;user testing sessions&lt;/a&gt;. It is key to collect evidence about what Forgejo users need, a requirement to build a roadmap and reduce the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;growing backlog&lt;/a&gt; of bug reports and feature requests.&lt;/p&gt;
&lt;p&gt;Building blocks for both &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;ActivityPub federation&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3590&quot;&gt;data portability improvements&lt;/a&gt; were merged into the codebase. They are not yet used for any user visible feature but they are a stepping stone. Their implementation was made significantly easier by the hard fork because they can rely on a codebase that is better tested.&lt;/p&gt;
&lt;h2&gt;User Research&lt;/h2&gt;
&lt;p&gt;Discussions began on &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/178&quot;&gt;a new workflow for design work and feature requests&lt;/a&gt;. Users are encouraged to describe the problem rather than the solution. Feature requests typically consist of the description of a solution. However, often there are multiple solutions to one problem, and there are multiple problems with one solution.&lt;/p&gt;
&lt;p&gt;New feature requests are not ready to implement: they are investigated first, similar to how new bugs are triaged. A research and design process can be established, similar to what was done for the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/4119&quot;&gt;summary tab for repositories&lt;/a&gt; and bootstrap actual process for changes in Forgejo. This adds a step between what user needs and development, but since the backlog of feature requests is growing anyway, it may not be an issue. On the contrary: merging similar feature requests together can reduce the backlog of open feature requests and only the most valuable changes are implemented.&lt;/p&gt;
&lt;p&gt;A new round of &lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues/34&quot;&gt;user testing sessions&lt;/a&gt; was conducted from 26 June to 28 June. It is &lt;a href=&quot;https://codeberg.org/forgejo/user-research/src/branch/main/interviews/2024-06/template.md&quot;&gt;based on an interview script&lt;/a&gt; improved from the one that was already used &lt;a href=&quot;https://codeberg.org/forgejo/user-research/src/branch/main/interviews/2024-04/template.md&quot;&gt;in April 2024&lt;/a&gt; during the first round.&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;p&gt;Notable improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4189&quot;&gt;Better logic for showing user feed/public activity elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4134&quot;&gt;Folding results for repo search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4072&quot;&gt;Implement tab indentation and list continuation in the issue editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;Stars federated via ActivityPub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4138&quot;&gt;Support redis alternative - redict and garnet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3590&quot;&gt;F3 initial driver&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=209916&quot;&gt;Read more&lt;/a&gt; in the pull requests.&lt;/p&gt;
&lt;h2&gt;Standard formats and protocols&lt;/h2&gt;
&lt;p&gt;Forgejo supports third party software and services that use standards. For instance it relies on SQL for interactions with databases, HTTP, HTML and JavaScript for web interactions. As an exception when the software or service is available under a Free Software license, the absence of standardized communication protocol is not a requirement, for instance for &lt;a href=&quot;https://github.com/google/leveldb&quot;&gt;LevelDB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is not an easy goal to achieve because software publishers keep deviating from standards or change the license of their software to no longer be Free Software.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft SQL Server deviates from the SQL standard in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/2d9afd0c2194b60689717c2a9dc36284f012f7b6#diff-c286fd6672a72eeb3c97959eb3af0bf43959334a&quot;&gt;ways that required special treatment&lt;/a&gt; and the decision was made two months ago to no longer include such specific adjustments.&lt;/li&gt;
&lt;li&gt;Redis used to be Free Software, but the newer versions &lt;a href=&quot;https://web.archive.org/web/20240511181042if_/https://redis.io/legal/licenses/&quot;&gt;are not&lt;/a&gt;. The protocol is not standard but alternative servers exist and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4138&quot;&gt;Forgejo is now tested to work with them&lt;/a&gt;. Only the older Free Software version of Redis will continue to be supported, but the proprietary versions will not.&lt;/li&gt;
&lt;li&gt;Safari is expected to support HTML, HTTP &amp;amp; JavaScript in the same way other browsers do, but fails some tests. The approach chosen was to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3334/files#diff-d98036e3541a0bc9dcffae7c5b40a8bfeb670760&quot;&gt;skip Safari testing&lt;/a&gt; instead of finding a workaround. An effort is generally made to workaround the non-conformant behavior of Free Software Web browsers. But, for reasons similar to MSSQL, such an effort is not sustainable for proprietary Web browsers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other discussions happened on integrating Forgejo with third party software or services that are not Free Software and do not comply with a standard format or protocol (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3989&quot;&gt;Azure Blob Storage&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/174&quot;&gt;CockroachDB&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4154&quot;&gt;Friendly Captcha&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;Data portability&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://f3.forgefriends.org/&quot;&gt;Friendly Forge Format (F3)&lt;/a&gt; is designed to improve data portability and make it possible to mirror software projects from one forge to another using a standard format. The &lt;a href=&quot;https://f3.forgefriends.org/compliance.html&quot;&gt;v2.0.0&lt;/a&gt; was published in June 2024 and is the first stable version. It is implemented in &lt;a href=&quot;https://code.forgejo.org/f3/gof3&quot;&gt;a Go package&lt;/a&gt; that can be used as a reference. A native driver for Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3590&quot;&gt;was merged&lt;/a&gt; so that it can be used, for instance, to transport data when an ActivityPub message is received. Or as an alternate implementation for the migration code.&lt;/p&gt;
&lt;p&gt;Read more in F3 related &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues?labels=114735&quot;&gt;issues&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=114735&quot;&gt;pull requests&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;The pull request to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;federated repository stars&lt;/a&gt; was merged. The feature allows you to define following repositories such as origin of mirrors or forks. If then the mirror or fork gets a star by someone, the origin repository will also get a star via federated ActivityPub like activity. Only the star activity is federated, the unstar activity is not federated and the user interface is not available yet.&lt;/p&gt;
&lt;p&gt;A new federation suite was &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/federation&quot;&gt;added to the end-to-end tests&lt;/a&gt;. It is very basic but the first of its kind. Launching two Forgejo instances that &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/federation/scenario-star/run.sh&quot;&gt;star each other via ActivityPub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Although GitLab federation efforts are &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/184&quot;&gt;now on pause&lt;/a&gt; it includes an experimental implementation of the ActivityPub building blocks which is roughly at the same stage as Forgejo. Support for &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/commit/e4fa6d814fce398fd4065e40c67a53acbbf2e3a5/lib/lib.sh#L199-L227&quot;&gt;launching a GitLab instance&lt;/a&gt; was added to the end-to-end tests. This will eventually allow to play scenarios in which GitLab and Forgejo can communicate in a controlled environment. And in the short term to apply minimal testing on each of them independently, for instance with &lt;a href=&quot;https://codeberg.org/socialweb.coop/activitypub-testing&quot;&gt;activitypub-testing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Read more &lt;a href=&quot;https://domaindrivenarchitecture.org/posts/2024-06-05-howto-federated-stars/&quot;&gt;in the June 2024 report&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;UI team&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#user-interface&quot;&gt;UI team&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/128&quot;&gt;created&lt;/a&gt; and has &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/144&quot;&gt;three members&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before engaging in more ambitious goals, they started to care for the day to day chores that keep Forgejo releases going:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implementing and reviewing &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&amp;amp;labels=87703%2c78139&amp;amp;milestone=6042&quot;&gt;new UI features&lt;/a&gt; which is particularly challenging because the test coverage of the Web UI is still very low.&lt;/li&gt;
&lt;li&gt;Backporting bug fixes to the stable versions (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=87703&amp;amp;milestone=6405&quot;&gt;7.0.4&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=87703&amp;amp;milestone=6654&quot;&gt;7.0.5&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Reviewing &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=223008&quot;&gt;upgrades&lt;/a&gt; of &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/8afdafebf9fa2cb748a13e56ff3d865675ae27b6/package.json&quot;&gt;JavaScript packages&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=85536&quot;&gt;other dependencies&lt;/a&gt; that are used to build the Web UI. It would be relatively easy if every package consistently complied with &lt;a href=&quot;https://semver.org/&quot;&gt;semantic versioning&lt;/a&gt; and published descriptive release notes. But the norm is rather the opposite and each potential upgrade requires a fair amount of scrutiny.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An experiment to hire a freelance to work on improving the JavaScript test coverage was conducted to figure out if it leads to results that are worth the effort. It was interrupted when evidence surfaced that the work was almost identical to what an AI would produce.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/next/developer/infrastructure/#hetzner0104&quot;&gt;machine&lt;/a&gt; added last month is now in production and stable. It did not go smoothly because the hardware provisioned turned out to be unreliable and crashed frequently. The devops team spent hours over a period of a week to figure out the root cause and stabilize it. This was not transparent to Forgejo contributors because the CI stopped working half a dozen time and stayed down during a few hours. But nothing was lost and the downtime was kept to a minimum. It happened in between releases and did not disrupt the release process.&lt;/p&gt;
&lt;p&gt;The upside of these troubles was to check that every aspect of the disaster recovery scenario work as it should, including loosing all disks on the machine. The defective hardware was not stabilized, it could not. It turned out that all machines with the same motherboard were similarly flawed. Hetzner acknowledged their defective product range, apologized, reimbursed the costs and is in the process of changing their Q&amp;amp;A to include the test script that was provided to demonstrate the problem.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-4&quot;&gt;Forgejo v7.0.4&lt;/a&gt; (fixing &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues/11&quot;&gt;vulnerabilities&lt;/a&gt;) was released. The security fix it contains was also &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.21.11-2&quot;&gt;backported and released as Forgejo v1.21.11-2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There now is a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/168&quot;&gt;stronger requirement for testing&lt;/a&gt; for all backports to a stable release. The bug fixes originating from Gitea were previously merged even when they were not covered by any test. Tests are now added when the fix is worth the effort. The test itself is implemented &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4217&quot;&gt;in the development branch&lt;/a&gt; and the commit that contains the fix is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/4219&quot;&gt;cherry-picked with the backport of the test&lt;/a&gt; to demonstrate it works as it should.&lt;/p&gt;
&lt;p&gt;A discussion regarding the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/180&quot;&gt;Forgejo v8.0.0 feature freeze&lt;/a&gt; an attempt to better define the requirements imposed during such a period and the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/180#issuecomment-2043685&quot;&gt;need to fix bugs when the infrastructure to write tests is missing&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Dependency Management&lt;/h2&gt;
&lt;p&gt;Caring for the hundreds of Forgejo dependencies has been a recurring activity since the beginning of the project back in 2022. When the hard fork happened early 2024 Forgejo gained the freedom to decide on each of them and began to organize accordingly. Gitea was first and using the &lt;a href=&quot;https://codeberg.org/forgejo/tools/src/branch/main/scripts/wcp&quot;&gt;dedicated tool&lt;/a&gt; that was developed to sort the commits of interest became a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=week+2024&amp;amp;state=closed&quot;&gt;comfortable weekly routine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The backlog of all other dependencies was more challenging. A &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/2779&quot;&gt;dependency dashboard was setup&lt;/a&gt; and started with a large backlog. Only in June 2024 was it cleared, months later. Pull requests with upgrades are &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues?labels=223008&quot;&gt;now dealt with daily&lt;/a&gt; and diligently so they do not pile up again.&lt;/p&gt;
&lt;p&gt;The method to analyze each of them &lt;a href=&quot;https://forgejo.org/docs/latest/developer/dependencies/&quot;&gt;was documented&lt;/a&gt; and heavily relies on the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/renovate.json&quot;&gt;dependency specifications&lt;/a&gt; to keep the workload to a minimum. For instance it can arrange for updates to only be proposed every three months for CI tooling while it immediately proposes an upgrade if has an impact on security.&lt;/p&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;two patch updates&lt;/a&gt;, one for &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v7.0.1&quot;&gt;7.0.1&lt;/a&gt; which depends on Forgejo v7.0.4 and another for &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases/tag/v5.1.2&quot;&gt;5.1.2&lt;/a&gt; which depends on Forgejo v1.21.11-2.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#helm&quot;&gt;Forgejo helm team&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/136&quot;&gt;created&lt;/a&gt; was created and &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/149&quot;&gt;two members joined&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;4 batches of updates were merged containing total of 937 new translations and 518 improvements. Some improvements were made to the process of localization management. One of which is that now backporting of translation updates to stable versions can happen in batches before releases are published instead of weekly.&lt;/p&gt;
&lt;p&gt;No new team applications were submitted or accepted this month. Some languages are not actively maintained currently. View completeness of translations in our project on &lt;a href=&quot;https://translate.codeberg.org/projects/forgejo/forgejo&quot;&gt;Codeberg Translate&lt;/a&gt; and &lt;a href=&quot;https://forgejo.org/docs/latest/developer/localization/&quot;&gt;Learn how to help&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Sustainability&lt;/h2&gt;
&lt;p&gt;There is a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/185&quot;&gt;new funding opportunity&lt;/a&gt; for &lt;a href=&quot;https://www.sovereigntechfund.de/&quot;&gt;Sovereign Tech Fund&lt;/a&gt; and a &lt;a href=&quot;https://codeberg.org/avobs/sovereign_tech/src/branch/main/application_text.md&quot;&gt;grant application is being drafted&lt;/a&gt;. Its scope is similar to &lt;a href=&quot;https://www.opentech.fund/funds/free-and-open-source-software-sustainability-fund/&quot;&gt;OTF&lt;/a&gt; and most of the material can be re-used.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls?state=all&amp;amp;labels=217359&quot;&gt;grant proposal&lt;/a&gt; submitted 16 May for the &lt;a href=&quot;https://www.opentech.fund/funds/free-and-open-source-software-sustainability-fund/&quot;&gt;Free and Open Source Software Sustainability Fund&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/48&quot;&gt;declined&lt;/a&gt;. In a newsletter OTF announced that they received 80 applications.&lt;/p&gt;
&lt;p&gt;A reply was expected for the NLnet grant application &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls?labels=220838&quot;&gt;submitted 1 April&lt;/a&gt; but was further delayed and is expected in July.&lt;/p&gt;
&lt;h2&gt;Moderation&lt;/h2&gt;
&lt;p&gt;There has been very few minor moderation incident (spam or trolls) and one time warning. This is significantly less than the past month where there were bursts of unsolicited activity that sometime required daily intervention. Even the smallest interventions were logged in accordance to the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MODERATION-PROCESS.md&quot;&gt;moderation process&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A concern was raised regarding the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/87&quot;&gt;lack of answer of the floss.social moderation team&lt;/a&gt; despite numerous attempts over a period of months. There has been no major incident so far but it may be wise to take steps for Forgejo to be in a space where it is possible to reach the moderation team before it happens.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/abacabadabacaba&quot;&gt;https://codeberg.org/abacabadabacaba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Aeris1One&quot;&gt;https://codeberg.org/Aeris1One&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aimuz&quot;&gt;https://codeberg.org/aimuz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Application-Maker&quot;&gt;https://codeberg.org/Application-Maker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Atalanttore&quot;&gt;https://codeberg.org/Atalanttore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/atimy&quot;&gt;https://codeberg.org/atimy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avidseeker&quot;&gt;https://codeberg.org/avidseeker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/avobs&quot;&gt;https://codeberg.org/avobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/b1nar10&quot;&gt;https://codeberg.org/b1nar10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bart&quot;&gt;https://codeberg.org/bart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bbjubjub2494&quot;&gt;https://codeberg.org/bbjubjub2494&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bdube_gh&quot;&gt;https://codeberg.org/bdube_gh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/becm&quot;&gt;https://codeberg.org/becm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bengrue&quot;&gt;https://codeberg.org/bengrue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buhtz&quot;&gt;https://codeberg.org/buhtz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cuboci&quot;&gt;https://codeberg.org/cuboci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cysioland&quot;&gt;https://codeberg.org/Cysioland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/delvh&quot;&gt;https://codeberg.org/delvh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dev_T&quot;&gt;https://codeberg.org/dev_T&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/drawingpixels&quot;&gt;https://codeberg.org/drawingpixels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/efertone&quot;&gt;https://codeberg.org/efertone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/f00&quot;&gt;https://codeberg.org/f00&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fr33domlover&quot;&gt;https://codeberg.org/fr33domlover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fractalf&quot;&gt;https://codeberg.org/fractalf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gerald&quot;&gt;https://codeberg.org/gerald&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gitcookie-1&quot;&gt;https://codeberg.org/gitcookie-1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GKuhn&quot;&gt;https://codeberg.org/GKuhn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GooRoo&quot;&gt;https://codeberg.org/GooRoo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GT&quot;&gt;https://codeberg.org/GT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/h759bkyo4&quot;&gt;https://codeberg.org/h759bkyo4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hackos&quot;&gt;https://codeberg.org/hackos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Hanker&quot;&gt;https://codeberg.org/Hanker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hankskyjames777&quot;&gt;https://codeberg.org/hankskyjames777&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Haui&quot;&gt;https://codeberg.org/Haui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hoijui&quot;&gt;https://codeberg.org/hoijui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/how&quot;&gt;https://codeberg.org/how&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ikuyo&quot;&gt;https://codeberg.org/ikuyo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadeprime&quot;&gt;https://codeberg.org/jadeprime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jakjakob&quot;&gt;https://codeberg.org/jakjakob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jthvai&quot;&gt;https://codeberg.org/jthvai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/karolyi&quot;&gt;https://codeberg.org/karolyi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kdh8219&quot;&gt;https://codeberg.org/kdh8219&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kitanit&quot;&gt;https://codeberg.org/Kitanit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/l_austenfeld&quot;&gt;https://codeberg.org/l_austenfeld&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leana8959&quot;&gt;https://codeberg.org/leana8959&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ledyba&quot;&gt;https://codeberg.org/ledyba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lingling&quot;&gt;https://codeberg.org/lingling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Linneris&quot;&gt;https://codeberg.org/Linneris&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lordwektabyte&quot;&gt;https://codeberg.org/lordwektabyte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lotigara&quot;&gt;https://codeberg.org/lotigara&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martianh&quot;&gt;https://codeberg.org/martianh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirkoperillo&quot;&gt;https://codeberg.org/mirkoperillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mnq&quot;&gt;https://codeberg.org/mnq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mondstern&quot;&gt;https://codeberg.org/mondstern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mritunjayr&quot;&gt;https://codeberg.org/mritunjayr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mrwsl&quot;&gt;https://codeberg.org/mrwsl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neomaitre&quot;&gt;https://codeberg.org/neomaitre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nilesh&quot;&gt;https://codeberg.org/nilesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oelmekki&quot;&gt;https://codeberg.org/oelmekki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/overloop&quot;&gt;https://codeberg.org/overloop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/patdyn&quot;&gt;https://codeberg.org/patdyn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Pi-Cla&quot;&gt;https://codeberg.org/Pi-Cla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pmb&quot;&gt;https://codeberg.org/pmb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/podhorsky-ksj&quot;&gt;https://codeberg.org/podhorsky-ksj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/poVoq&quot;&gt;https://codeberg.org/poVoq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/proton-ab&quot;&gt;https://codeberg.org/proton-ab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/purkwiat&quot;&gt;https://codeberg.org/purkwiat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/qaqland&quot;&gt;https://codeberg.org/qaqland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/qwerty287&quot;&gt;https://codeberg.org/qwerty287&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Renich&quot;&gt;https://codeberg.org/Renich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/samcday&quot;&gt;https://codeberg.org/samcday&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scruel&quot;&gt;https://codeberg.org/scruel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SDKAAA&quot;&gt;https://codeberg.org/SDKAAA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Senku&quot;&gt;https://codeberg.org/Senku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sevki&quot;&gt;https://codeberg.org/sevki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/silverpill&quot;&gt;https://codeberg.org/silverpill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sinsky&quot;&gt;https://codeberg.org/sinsky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SinTan1729&quot;&gt;https://codeberg.org/SinTan1729&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sirhectorin&quot;&gt;https://codeberg.org/sirhectorin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/solemden&quot;&gt;https://codeberg.org/solemden&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/soundstrip&quot;&gt;https://codeberg.org/soundstrip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stdedos&quot;&gt;https://codeberg.org/stdedos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sunwoo1524&quot;&gt;https://codeberg.org/sunwoo1524&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tampler&quot;&gt;https://codeberg.org/tampler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tgy&quot;&gt;https://codeberg.org/tgy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thedustinmiller&quot;&gt;https://codeberg.org/thedustinmiller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefox&quot;&gt;https://codeberg.org/thefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Thesola10&quot;&gt;https://codeberg.org/Thesola10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ThetaDev&quot;&gt;https://codeberg.org/ThetaDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thetredev&quot;&gt;https://codeberg.org/thetredev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toolforger&quot;&gt;https://codeberg.org/toolforger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/twenty-panda&quot;&gt;https://codeberg.org/twenty-panda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/uku&quot;&gt;https://codeberg.org/uku&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vai&quot;&gt;https://codeberg.org/vai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vikaschoudhary&quot;&gt;https://codeberg.org/vikaschoudhary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/virtulis&quot;&gt;https://codeberg.org/virtulis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vwbusguy&quot;&gt;https://codeberg.org/vwbusguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wintryexit&quot;&gt;https://codeberg.org/wintryexit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/XaviCC&quot;&gt;https://codeberg.org/XaviCC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xlii&quot;&gt;https://codeberg.org/xlii&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeziruo&quot;&gt;https://codeberg.org/yeziruo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yongbin&quot;&gt;https://codeberg.org/yongbin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - May 2024</title><link>https://forgejo.org/2024-05-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-05-monthly-update/</guid><description>A UI team was created by Forgejo contributors who have been at work for months on the necessary backports of bug fixes to the Forgejo v7.0 stable branch. More ambitious discussions started on the long term strategies to refactor the codebase and improve the User eXperience. Forgejo needs help to triage. If you ever create a new issue, take a moment of your time to also look at a few others and help them get to the finish line.</description><pubDate>Mon, 03 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/128&quot;&gt;UI team&lt;/a&gt; was created by Forgejo contributors who have been at work for months on the necessary backports of bug fixes to the Forgejo v7.0 stable branch. More &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/160&quot;&gt;ambitious discussions&lt;/a&gt; started on the long term strategies to refactor the codebase and improve the User eXperience.&lt;/p&gt;
&lt;h3&gt;Call for help&lt;/h3&gt;
&lt;p&gt;Forgejo needs help to &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/161&quot;&gt;triage bug reports&lt;/a&gt; and feature requests. The growing backlog is &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/53&quot;&gt;not a new problem&lt;/a&gt; and is actively worked on. If you ever create a new issue, take a moment of your time to also look at a few others and help them get to the finish line.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For a bug fix, reading the description and trying to reproduce it manually to confirm it is still relevant will bring them closer to a resolution. Either because the developer knows it is worth their time or because it cannot be reproduced and is already fixed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For a feature request, read the &lt;strong&gt;Needs and benefits&lt;/strong&gt; section and maybe ask the author to clarify. If you are convinced, add a short comment in the first person to describe how it would help you.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;UI team&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/160&quot;&gt;Forgejo UI discussions&lt;/a&gt; led to &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/128&quot;&gt;the creation of a UI team&lt;/a&gt; and four candidates (&lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/131&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/132&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/134&quot;&gt;3&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/138&quot;&gt;4&lt;/a&gt;) are lined up to be the initial members to bootstrap it.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://matrix.to/#/#forgejo-ui:matrix.org&quot;&gt;dedicated Matrix channel&lt;/a&gt; was created and &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;added to the Forgejo Matrix space&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition to discussions regarding future developments, the team took care of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=87703&quot;&gt;UI related features and bug fixes&lt;/a&gt;, both for the development branch and for the stable branch.&lt;/p&gt;
&lt;h2&gt;Code&lt;/h2&gt;
&lt;h3&gt;Features&lt;/h3&gt;
&lt;p&gt;Notable improvements and bug fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Groundwork for stars federated via ActivityPub (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3494&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3662&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3792&quot;&gt;3&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3871&quot;&gt;4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/3139&quot;&gt;Allow hiding auto generated release archives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/3654&quot;&gt;Code Search for non-default branches and tags when repository indexer is disabled&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/3836&quot;&gt;Parse prefix from redis URI for queues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3847&quot;&gt;Wiki content search using git-grep&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=209916&quot;&gt;Read more&lt;/a&gt; in the pull requests.&lt;/p&gt;
&lt;h3&gt;Improving tests&lt;/h3&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/170&quot;&gt;discussion started&lt;/a&gt; to improve the tests in the Forgejo codebase. Initial ideas cover the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow integration tests outside of the tests/integration folder&lt;/li&gt;
&lt;li&gt;Prevent having to store binary blobs within the codebase&lt;/li&gt;
&lt;li&gt;Make the tests faster&lt;/li&gt;
&lt;li&gt;Document the testing tweaks&lt;/li&gt;
&lt;li&gt;Add test coverage&lt;/li&gt;
&lt;li&gt;Add performance testing&lt;/li&gt;
&lt;li&gt;Make the playwright tests easier to use&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;End to end tests&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;end to end test suite&lt;/a&gt; race conditions (in the tests of &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/175&quot;&gt;push&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/182&quot;&gt;scheduled&lt;/a&gt; actions) were fixed. It still suffers from transient environmental failures (it relies or a large number of external resources), but it happens less than once a week. In some cases it can be fixed by &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/178&quot;&gt;adding a retry&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A test for the &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/189&quot;&gt;pull request automerge features&lt;/a&gt; was added.&lt;/p&gt;
&lt;h3&gt;Deprecating go-git&lt;/h3&gt;
&lt;p&gt;Discussions &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/164&quot;&gt;to deprecate go-git&lt;/a&gt; received strong support. If Forgejo wants to support go-git, every git Feature also needs to be implemented in go-git. For example: setting git notes in the Web UI is currently not possible in go-git.&lt;/p&gt;
&lt;p&gt;The benefits of go-git may not be worth the effort. Git is already preinstalled on many distributions. If Forgejo is installed using Docker or a package manager, Git will already be installed with it.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;A new &lt;a href=&quot;https://forgejo.org/docs/next/developer/infrastructure/#hetzner0104&quot;&gt;machine&lt;/a&gt; was added to the Forgejo infrastructure. The capacity provisioned last year proved to be enough to sustain the increased activity since early 2024, with no slowdown or space restrictions. Even if the number of Forgejo contributors do not increase this year, testing federated features will require significantly more resources, for instance to launch a GitLab instance with ActivityPub extensions enabled.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/114&quot;&gt;forgefriends hosting request&lt;/a&gt; is partially complete. The &lt;a href=&quot;https://code.forgejo.org/forgefriends/&quot;&gt;https://code.forgejo.org/forgefriends/&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/f3/&quot;&gt;https://code.forgejo.org/f3/&lt;/a&gt; organizations were created and allocated Forgejo Actions runners. The &lt;a href=&quot;https://f3.forgefriends.org/&quot;&gt;F3&lt;/a&gt; organization was migrated from the &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/&quot;&gt;GitLab instance&lt;/a&gt;. The &lt;a href=&quot;https://forum.forgefriends.org/&quot;&gt;F3 forum&lt;/a&gt; was migrated to &lt;a href=&quot;https://forgejo.org/docs/next/developer/infrastructure/#hetzner0104&quot;&gt;a dedicated LXC container&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A semi-manual &lt;a href=&quot;https://forgejo.org/docs/next/developer/static-pages/&quot;&gt;static page hosting service&lt;/a&gt; dedicated to code.forgejo.org was created. It is deployed to host the &lt;a href=&quot;https://f3.forgefriends.org&quot;&gt;F3&lt;/a&gt; and &lt;a href=&quot;https://forgefriends.org&quot;&gt;forgefriends&lt;/a&gt; websites and could be used as an alternative to &lt;a href=&quot;https://forgejo.org/docs/v7.0/developer/infrastructure/#uberspace&quot;&gt;Uberspace&lt;/a&gt; for &lt;a href=&quot;https://forgejo.org&quot;&gt;https://forgejo.org&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-2&quot;&gt;Forgejo v7.0.2&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-3&quot;&gt;Forgejo v7.0.3&lt;/a&gt; (fixing &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues/10&quot;&gt;vulnerabilities&lt;/a&gt;) were released.&lt;/p&gt;
&lt;p&gt;They both rely on the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/159&quot;&gt;release note files&lt;/a&gt; that &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/ade7304eea8ffdf5440adb71dfb2dcb50159379a/release-notes/8.0.0&quot;&gt;are created at the same time as the pull requests&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After a commit made its way to the v7.0 branch and was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3867&quot;&gt;reverted at the last minute&lt;/a&gt; to avoid regression, it was &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/168&quot;&gt;proposed to require testing&lt;/a&gt; for all non-trivial commits cherry-picked from Gitea into the stable branch.&lt;/p&gt;
&lt;h2&gt;Dependency Management&lt;/h2&gt;
&lt;h3&gt;Tooling&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/tools/src/commit/52e2ded048ecb080a92bc957743fa35086ce37e0/scripts/weekly-cherry-pick.sh&quot;&gt;cherry-picking tool&lt;/a&gt; developed to keep track of commits cherry-picked from related repositories is used for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3917&quot;&gt;the Forgejo development branch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3942&quot;&gt;the Forgejo v7.0 stable branch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/pulls/506&quot;&gt;the Forgejo helm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;OCI mirror&lt;/h3&gt;
&lt;p&gt;Forgejo maintains a set of &lt;a href=&quot;https://code.forgejo.org/oci/-/packages&quot;&gt;OCI images&lt;/a&gt; mirrors for the benefit of the CI, so that it is not rate limited by docker.io. They were previously manually maintained and a weekly scheduled workflow was created to &lt;a href=&quot;https://code.forgejo.org/forgejo/oci-mirror/src/commit/c6b1f3588f72fc9ac7a949120a084f343a716993/.forgejo/workflows/mirror.yml&quot;&gt;take care of it automatically&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It was initially held back because of a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/780&quot;&gt;long standing bug&lt;/a&gt; preventing the use of &lt;a href=&quot;https://docs.docker.com/reference/cli/docker/buildx/imagetools/create/&quot;&gt;docker buildx imagetools create&lt;/a&gt; to mirror multi-architecture OCI images. It was worked around using &lt;a href=&quot;https://github.com/containers/skopeo&quot;&gt;skopeo&lt;/a&gt; which provides the same feature but does not run into the Forgejo bug that would prevent it to work.&lt;/p&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://code.forgejo.org/forgejo-helm/forgejo-helm/releases&quot;&gt;one major update&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Forgejo helm chart moved from &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm&quot;&gt;forgejo-contrib&lt;/a&gt; to a &lt;a href=&quot;https://code.forgejo.org/forgejo-helm&quot;&gt;dedicated organization&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/136&quot;&gt;Forgejo helm team&lt;/a&gt; was proposed, with two potential members. A &lt;a href=&quot;https://matrix.to/#/#forgejo-helm-chart:matrix.org&quot;&gt;dedicated Matrix channel&lt;/a&gt; was created and added to &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Forgejo Matrix space&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;3 new team members were onboarded: &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/127&quot;&gt;[1]&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/137&quot;&gt;[2]&lt;/a&gt;. 5 batches of updates were merged containing total of 515 new translations and 1122 improvements. Traditional Chinese have seen a particularly high amount of fixes and improvements this month from a new team member. All translation changes got backported to according point releases of Forgejo v7.0, which is expected to continue receiving translation improvements.&lt;/p&gt;
&lt;p&gt;There are still countless improvements to be made for many languages and you can help to improve the localization too. &lt;a href=&quot;https://forgejo.org/docs/latest/developer/localization&quot;&gt;Learn how&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;The pull request to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;federated repository stars&lt;/a&gt; was split into smaller ones, five of which were merged in the development branch.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;Federated staring of repositories&lt;/a&gt; (in review)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3886&quot;&gt;UI to define following repos&lt;/a&gt; (merged)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3871&quot;&gt;Finalize receive activity&lt;/a&gt; (merged)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3792&quot;&gt;Creation of federated user&lt;/a&gt; (merged)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3662&quot;&gt;Federation: Parse ActorId &amp;amp; cache FederationHost&lt;/a&gt; (merged)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3494&quot;&gt;Validate like activities&lt;/a&gt; (merged)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more in the May 2024 reports (&lt;a href=&quot;https://domaindrivenarchitecture.org/posts/2024-05-15-state-of-federation/&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://domaindrivenarchitecture.org/posts/2024-05-24-state-of-federation/&quot;&gt;2&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;Governance&lt;/h2&gt;
&lt;h3&gt;Sustainability&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/144&quot;&gt;discussion started&lt;/a&gt; on Forgejo durability in the next 10 years led to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls?state=all&amp;amp;labels=217359&quot;&gt;a grant proposal&lt;/a&gt; submitted 16 May for the &lt;a href=&quot;https://www.opentech.fund/funds/free-and-open-source-software-sustainability-fund/&quot;&gt;Free and Open Source Software Sustainability Fund&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A reply was expected for the NLnet grant application &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls?labels=220838&quot;&gt;submitted 1 April&lt;/a&gt; but was delayed because of the large number of applicants. The arrangements made to ensure the two grants do not overlap in time were changed. Because of this delay and on condition that an extension can be negotiated, avoidance of an overlap may no longer be necessary.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/747&quot;&gt;https://codeberg.org/747&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/9pfs&quot;&gt;https://codeberg.org/9pfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aaronriedel&quot;&gt;https://codeberg.org/aaronriedel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AndrewKvalheim&quot;&gt;https://codeberg.org/AndrewKvalheim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ansemjo&quot;&gt;https://codeberg.org/ansemjo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Awlex&quot;&gt;https://codeberg.org/Awlex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/axd99&quot;&gt;https://codeberg.org/axd99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/b1nar10&quot;&gt;https://codeberg.org/b1nar10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/channel-42&quot;&gt;https://codeberg.org/channel-42&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/clarfonthey&quot;&gt;https://codeberg.org/clarfonthey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/comcloudway&quot;&gt;https://codeberg.org/comcloudway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CommanderRedYT&quot;&gt;https://codeberg.org/CommanderRedYT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crapStone&quot;&gt;https://codeberg.org/crapStone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cwpute&quot;&gt;https://codeberg.org/Cwpute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DD-P&quot;&gt;https://codeberg.org/DD-P&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/deblan&quot;&gt;https://codeberg.org/deblan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/defanor&quot;&gt;https://codeberg.org/defanor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Drakon&quot;&gt;https://codeberg.org/Drakon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/efertone&quot;&gt;https://codeberg.org/efertone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emersion&quot;&gt;https://codeberg.org/emersion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/enricpineda&quot;&gt;https://codeberg.org/enricpineda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/f00&quot;&gt;https://codeberg.org/f00&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fhuberts&quot;&gt;https://codeberg.org/fhuberts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Firepup650&quot;&gt;https://codeberg.org/Firepup650&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fistons&quot;&gt;https://codeberg.org/fistons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fitik&quot;&gt;https://codeberg.org/Fitik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Frankkkkk&quot;&gt;https://codeberg.org/Frankkkkk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FunctionalHacker&quot;&gt;https://codeberg.org/FunctionalHacker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/furry&quot;&gt;https://codeberg.org/furry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ggpsv&quot;&gt;https://codeberg.org/ggpsv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/glts&quot;&gt;https://codeberg.org/glts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/h759bkyo4&quot;&gt;https://codeberg.org/h759bkyo4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hankskyjames777&quot;&gt;https://codeberg.org/hankskyjames777&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hoppinglife&quot;&gt;https://codeberg.org/hoppinglife&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/intelfx&quot;&gt;https://codeberg.org/intelfx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/io7m&quot;&gt;https://codeberg.org/io7m&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadeprime&quot;&gt;https://codeberg.org/jadeprime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/james2432&quot;&gt;https://codeberg.org/james2432&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/johnthomas00&quot;&gt;https://codeberg.org/johnthomas00&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KalleMP&quot;&gt;https://codeberg.org/KalleMP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kdh8219&quot;&gt;https://codeberg.org/kdh8219&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kenzu&quot;&gt;https://codeberg.org/kenzu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kladky&quot;&gt;https://codeberg.org/Kladky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kwonunn&quot;&gt;https://codeberg.org/Kwonunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leana8959&quot;&gt;https://codeberg.org/leana8959&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ledyba&quot;&gt;https://codeberg.org/ledyba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leetickett&quot;&gt;https://codeberg.org/leetickett&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lgmrszd&quot;&gt;https://codeberg.org/Lgmrszd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/liberodark&quot;&gt;https://codeberg.org/liberodark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/magicfelix&quot;&gt;https://codeberg.org/magicfelix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mainboarder&quot;&gt;https://codeberg.org/mainboarder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mareklach&quot;&gt;https://codeberg.org/mareklach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/martinwguy&quot;&gt;https://codeberg.org/martinwguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matrss&quot;&gt;https://codeberg.org/matrss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mguims&quot;&gt;https://codeberg.org/mguims&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/milahu&quot;&gt;https://codeberg.org/milahu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/minion&quot;&gt;https://codeberg.org/minion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mirkoperillo&quot;&gt;https://codeberg.org/mirkoperillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/monstorix&quot;&gt;https://codeberg.org/monstorix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mumulhl&quot;&gt;https://codeberg.org/Mumulhl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mylloon&quot;&gt;https://codeberg.org/Mylloon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NameLessGO&quot;&gt;https://codeberg.org/NameLessGO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neomaitre&quot;&gt;https://codeberg.org/neomaitre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nifou&quot;&gt;https://codeberg.org/Nifou&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nmmr&quot;&gt;https://codeberg.org/nmmr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/npgo22&quot;&gt;https://codeberg.org/npgo22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NRK&quot;&gt;https://codeberg.org/NRK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/omenos&quot;&gt;https://codeberg.org/omenos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/openbrian&quot;&gt;https://codeberg.org/openbrian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pensicus&quot;&gt;https://codeberg.org/pensicus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/petrcech&quot;&gt;https://codeberg.org/petrcech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/peylight&quot;&gt;https://codeberg.org/peylight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Pi-Cla&quot;&gt;https://codeberg.org/Pi-Cla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PixelHamster&quot;&gt;https://codeberg.org/PixelHamster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/popey&quot;&gt;https://codeberg.org/popey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/proton-ab&quot;&gt;https://codeberg.org/proton-ab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Renich&quot;&gt;https://codeberg.org/Renich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/roberth&quot;&gt;https://codeberg.org/roberth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/robko23&quot;&gt;https://codeberg.org/robko23&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sclu1034&quot;&gt;https://codeberg.org/sclu1034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/scy&quot;&gt;https://codeberg.org/scy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SeaswimmerTheFsh&quot;&gt;https://codeberg.org/SeaswimmerTheFsh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sevki&quot;&gt;https://codeberg.org/sevki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SinTan1729&quot;&gt;https://codeberg.org/SinTan1729&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stephanm&quot;&gt;https://codeberg.org/stephanm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sthagen&quot;&gt;https://codeberg.org/sthagen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sthenault&quot;&gt;https://codeberg.org/sthenault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sunwoo1524&quot;&gt;https://codeberg.org/sunwoo1524&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/svoop&quot;&gt;https://codeberg.org/svoop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TheAwiteb&quot;&gt;https://codeberg.org/TheAwiteb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefox&quot;&gt;https://codeberg.org/thefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/trymeout&quot;&gt;https://codeberg.org/trymeout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tseeker&quot;&gt;https://codeberg.org/tseeker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/twenty-panda&quot;&gt;https://codeberg.org/twenty-panda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ujr&quot;&gt;https://codeberg.org/ujr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/varp0n&quot;&gt;https://codeberg.org/varp0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VioletLul&quot;&gt;https://codeberg.org/VioletLul&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Werenter&quot;&gt;https://codeberg.org/Werenter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/woutput&quot;&gt;https://codeberg.org/woutput&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xinnix&quot;&gt;https://codeberg.org/xinnix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xunzi&quot;&gt;https://codeberg.org/xunzi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yarikoptic&quot;&gt;https://codeberg.org/yarikoptic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeziruo&quot;&gt;https://codeberg.org/yeziruo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ZilloweZ&quot;&gt;https://codeberg.org/ZilloweZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zyachel&quot;&gt;https://codeberg.org/zyachel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - April 2024</title><link>https://forgejo.org/2024-04-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-04-monthly-update/</guid><description>Contributors got together to celebrate the release of Forgejo v7.0 and Codeberg was upgraded the next day. A lot of effort went into the automation of the development process, for dependency management and releases, so that contributors can focus on what matters most. As Forgejo matures, more and more of the work is about day to day management of bug reports, localization, security, etc. All aspects that make Forgejo a product that can be relied on for the years ahead. 17 interviews were conducted to better understand how Forgejo is used and shape its roadmap in a user centered way.</description><pubDate>Tue, 30 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Contributors got together to celebrate the release of &lt;a href=&quot;https://forgejo.org/2024-04-release-v7-0/&quot;&gt;Forgejo v7.0&lt;/a&gt; and Codeberg was upgraded the next day. A lot of effort went into the automation of the development process, for dependency management and releases, so that contributors can focus on what matters most. As Forgejo matures, more and more of the work is about day to day management of bug reports, localization, security, etc. All aspects that make Forgejo a product that can be relied on for the years ahead. 17 interviews were conducted to better understand how Forgejo is used and shape its roadmap in a user centered way.&lt;/p&gt;
&lt;h2&gt;Forgejo 7.0&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2024-04-release-v7-0/&quot;&gt;Forgejo v7.0 was published 23 April&lt;/a&gt; with translations in Bulgarian, Esperanto, Filipino and Slovenian; SourceHut builds integration; support for the SHA-256 hash function in Git; source code search by default and more. It also is the first Long Term Support version and will receive updates until July 2025. The adoption of semantic versioning is the reason for the version bump from v1.21 to v7.0 and is compatible with existing tools.&lt;/p&gt;
&lt;h3&gt;Regressions and 7.0.1&lt;/h3&gt;
&lt;p&gt;Previous Forgejo releases were synchronized with the Gitea release cycle and usually published after the first patch release, when the most disruptive bugs or regressions were discovered and fixed.&lt;a href=&quot;https://forgejo.org/2024-02-forking-forward/&quot;&gt;Forgejo became a hard fork&lt;/a&gt; two months ago and it was its first major release. Two significant regressions were discovered less than 48h after the release. Their impact and workarounds were documented &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-0&quot;&gt;by amending the 7.0.0 release notes&lt;/a&gt; while the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-1&quot;&gt;7.0.1 patch release&lt;/a&gt; was prepared. It was released four days later.&lt;/p&gt;
&lt;h3&gt;Celebration and motivations&lt;/h3&gt;
&lt;p&gt;On 27 April Forgejo contributors got together in a videoconference to celebrate the publication of the 7.0 release and remember the evolution of the project since its inception in 2022. They also &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/158&quot;&gt;shared their motivations and goals for 2024&lt;/a&gt; in a discussion for everyone to know what they find important, but also what motivates them to contribute to a given topic.&lt;/p&gt;
&lt;h3&gt;Codeberg upgrade&lt;/h3&gt;
&lt;p&gt;The Codeberg staging instance was used with Forgejo 7.0 release candidates and a copy of the production data in an attempt to identify scaling issues and regressions.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/Codeberg-Infrastructure/forgejo/src/branch/codeberg-7&quot;&gt;Codeberg specific patches&lt;/a&gt; were ported (new templates and CSS &lt;a href=&quot;https://forgejo.org/docs/latest/developer/customization/&quot;&gt;need to be adapted&lt;/a&gt;) and Codeberg was migrated to 7.0 on 28 April.&lt;/p&gt;
&lt;h3&gt;Release notes quality&lt;/h3&gt;
&lt;p&gt;In order to &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/155&quot;&gt;improve the quality of the release notes&lt;/a&gt;, a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/159&quot;&gt;new requirement&lt;/a&gt; to merging a pull request was discussed and led to &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/118&quot;&gt;an agreement proposal&lt;/a&gt;. The author of a pull request would be required to provide a snippet if their change needs to show in the release notes.&lt;/p&gt;
&lt;h2&gt;Backport automation&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/kiegroup/git-backporting/&quot;&gt;git-backporting&lt;/a&gt; action was &lt;a href=&quot;https://github.com/kiegroup/git-backporting/compare/v4.6.0...v4.8.0&quot;&gt;improved&lt;/a&gt; to support:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;multiple targets&lt;/li&gt;
&lt;li&gt;notifications on error&lt;/li&gt;
&lt;li&gt;merged and squash pull requests&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As expected it is now used to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?poster=165271&amp;amp;state=closed&quot;&gt;backport most pull requests&lt;/a&gt; from the development branch to the &lt;code&gt;v7.0/forgejo&lt;/code&gt; branch.&lt;/p&gt;
&lt;p&gt;The release notes themselves that were previously only found in the development branch are now &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3489&quot;&gt;also backported to the stable branch&lt;/a&gt; where they belong.&lt;/p&gt;
&lt;h2&gt;Code&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo&quot;&gt;https://codeberg.org/forgejo/forgejo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notable improvements and bug fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3139&quot;&gt;Add Option to hide Release Archive links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3383&quot;&gt;Limit database max connections by default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3414&quot;&gt;ldap synchronization can use a new field to make domain name configurable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=209916&quot;&gt;Read more&lt;/a&gt; in the pull requests.&lt;/p&gt;
&lt;h2&gt;Security&lt;/h2&gt;
&lt;p&gt;There is &lt;a href=&quot;https://forgejo.org/2024-03-xz/&quot;&gt;no direct impact of the xz backdoor (CVE-2024-3094) on Forgejo&lt;/a&gt;. This CVE got a lot of attention and a blog post was published to explain why Forgejo is not affected.&lt;/p&gt;
&lt;p&gt;The Forgejo v1.21.11-0 release &lt;a href=&quot;https://forgejo.org/2024-04-release-v1-21-11-0/&quot;&gt;was published 18 April&lt;/a&gt; and contains two security fixes: a privilege escalation that allows any registered user to change the visibility of any public repository; and a cross-site scripting (XSS) vulnerability that enabled attackers to run unsandboxed client-side scripts on pages served from the forge&apos;s domain.&lt;/p&gt;
&lt;h2&gt;User Research&lt;/h2&gt;
&lt;p&gt;The work started early March on &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/130&quot;&gt;Forgejo Usability&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/131&quot;&gt;Designing a modern contribution workflow&lt;/a&gt; led to 17 interviews &lt;a href=&quot;https://codeberg.org/forgejo/user-research/src/branch/main/interviews/2024-04&quot;&gt;for which transcripts were archived&lt;/a&gt;. They provide material that can be re-used in various contexts, even for the benefit of forges other than Forgejo.&lt;/p&gt;
&lt;p&gt;Some of the information already influenced decisions and implementation details in discussions, and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/?q=&amp;amp;type=all&amp;amp;state=open&amp;amp;labels=208298&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=179&quot;&gt;issues were created&lt;/a&gt; in response to the user interviews, for example to improve the new repo units button and feedback for features that are still in development, such as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/3502&quot;&gt;improving assignment to issues&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A discussion on how to &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/156&quot;&gt;move on with user research&lt;/a&gt; was started.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/157&quot;&gt;survey started&lt;/a&gt; on &lt;strong&gt;Exploring the Contributor Experience&lt;/strong&gt; where Forgejo contributors are asked to answer a series of questions.&lt;/p&gt;
&lt;h2&gt;Dependency Management&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/2779&quot;&gt;dependency update dashboard&lt;/a&gt; is used daily to observe and update Forgejo dependencies. When a new release is available, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows/renovate.yml&quot;&gt;a daily scheduled workflow&lt;/a&gt; will create a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?poster=165503&quot;&gt;pull request&lt;/a&gt; which:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;will be merged automatically, for instance if it is a patch upgrade from a dependency known to have a trusted release process&lt;/li&gt;
&lt;li&gt;be reviewed by a Forgejo contributor to decided if it worth an upgrade&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With hundreds of dependencies, there is a significant backlog to absorb and it is done incrementally by improving the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/renovate.json&quot;&gt;configuration file&lt;/a&gt; with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;groups of dependencies, for instance &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/27fa12427ce86cd81dbecd184b13a3dd3d7061d9/renovate.json#L7&quot;&gt;postcss&lt;/a&gt; where multiple dependencies are treated as one&lt;/li&gt;
&lt;li&gt;automerging &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/27fa12427ce86cd81dbecd184b13a3dd3d7061d9/renovate.json#L80&quot;&gt;patch releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;adding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/27fa12427ce86cd81dbecd184b13a3dd3d7061d9/renovate.json#L134&quot;&gt;custom dependency detection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When Forgejo became a hard fork two months ago, maintainers switched from rebasing weekly on top of Gitea to cherry picking commits instead. A &lt;a href=&quot;https://codeberg.org/forgejo/tools&quot;&gt;tool&lt;/a&gt; has been developed to make this process easier, and automate as much of it as possible. As the tool keeps evolving, the weekly cherry pick pull request become &lt;a href=&quot;https://codeberg.org/forgejo/tools/issues/31#issuecomment-1792960&quot;&gt;easier to create&lt;/a&gt;, review, and even includes &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3513&quot;&gt;interesting statistics&lt;/a&gt; at the bottom of the summary.&lt;/p&gt;
&lt;h2&gt;Forgejo v1.20 end of life&lt;/h2&gt;
&lt;p&gt;With the release of Forgejo 7.0, the Forgejo v1.20 release is EOL (End Of Life) and will no longer receive security patches. The last of them was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3319&quot;&gt;backported&lt;/a&gt; and made available in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commits/branch/v1.20/forgejo&quot;&gt;v1.20/forgejo&lt;/a&gt; branch for the benefit of source builds in April.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;end-to-end tests&lt;/a&gt; were also &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/167&quot;&gt;updated&lt;/a&gt; to remove v1.20 support and &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/README.md#removing-legacy-tests&quot;&gt;the policy to managed&lt;/a&gt; legacy tests was documented.&lt;/p&gt;
&lt;h2&gt;Debian packages&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-deb&quot;&gt;Debian package&lt;/a&gt; has undergone extensive changes. In addition to gaining support for Forgejo v7.0 LTS, its CI was &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-deb/src/branch/main/.forgejo/workflows/forgejo-deb.yml&quot;&gt;migrated to Forgejo Actions&lt;/a&gt; and includes a pull request test suite. The repository now has an LTS release channel. Enhancements are in the works to remove Forgejo&apos;s common data from the compiled binaries and instead storing it in a forgejo-common package. This lays the groundwork for things like multi-architecture builds.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-deb/issues/34&quot;&gt;call for maintainers&lt;/a&gt; was posted so that there are at least three maintainers to ensure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debian packages are available within 12 hours of Forgejo releases&lt;/li&gt;
&lt;li&gt;Pull requests can be reviewed by at least one maintainer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-deb&quot;&gt;https://codeberg.org/forgejo-contrib/forgejo-deb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&quot;&gt;one major updates&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&quot;&gt;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;The localization keeps going forward. 1 member &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/112&quot;&gt;was onboarded&lt;/a&gt; and 2 more applications were created. Some optimizations to the merge process were made to make it go faster. 6 batches of updates &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&amp;amp;poster=67160&quot;&gt;were merged&lt;/a&gt;, containing total of 2273 new translations and 1913 improvements. The translation effort had finally seen the light with the Forgejo 7.0.0 release, which is the first release containing major Forgejo localization improvements.
There are still countless improvements to be made for many languages and you can help to improve the localization too. &lt;a href=&quot;https://forgejo.org/docs/latest/developer/localization&quot;&gt;Learn how&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;The pull request to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;federated stars&lt;/a&gt; passes tests and is ready for merging. It is a very large pull request and it was requested by reviewers to split it into smaller, more manageable pull requests. In the same way the large webhook refactor was done. The first pull request &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3494&quot;&gt;was open and is its final stage&lt;/a&gt; to validate ActivityPub messages.&lt;/p&gt;
&lt;p&gt;A new pull request to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/3128&quot;&gt;implement federated search&lt;/a&gt; was proposed with a demonstration searching for an actor on &lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt; from a locally running Forgejo instance.&lt;/p&gt;
&lt;h2&gt;Governance&lt;/h2&gt;
&lt;h3&gt;Sustainability&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/144&quot;&gt;discussion started&lt;/a&gt; on Forgejo durability in the next 10 years led to drafting a grant proposal for the new &lt;a href=&quot;https://www.opentech.fund/funds/free-and-open-source-software-sustainability-fund/&quot;&gt;Free and Open Source Software Sustainability Fund&lt;/a&gt;. It proposes the creation of a non-profit organization managed transparently so that it can be audited at any time. Its purpose would be to define a collective roadmap and use the grant to fund the work. To preserve the Forgejo dynamic that is key to its momentum, it will be setup to ensure volunteers keep being its driving force.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/747&quot;&gt;https://codeberg.org/747&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adaaa&quot;&gt;https://codeberg.org/adaaa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/anri&quot;&gt;https://codeberg.org/anri&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AverageHelper&quot;&gt;https://codeberg.org/AverageHelper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/axd99&quot;&gt;https://codeberg.org/axd99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/banaanihillo&quot;&gt;https://codeberg.org/banaanihillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bapt&quot;&gt;https://codeberg.org/bapt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BaumiCoder&quot;&gt;https://codeberg.org/BaumiCoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bdr9&quot;&gt;https://codeberg.org/bdr9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bdube&quot;&gt;https://codeberg.org/bdube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buhtz&quot;&gt;https://codeberg.org/buhtz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ChrSt&quot;&gt;https://codeberg.org/ChrSt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/clarfonthey&quot;&gt;https://codeberg.org/clarfonthey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/con-f-use&quot;&gt;https://codeberg.org/con-f-use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ddevault&quot;&gt;https://codeberg.org/ddevault&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/deblan&quot;&gt;https://codeberg.org/deblan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Drakon&quot;&gt;https://codeberg.org/Drakon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/el0n&quot;&gt;https://codeberg.org/el0n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/emansije&quot;&gt;https://codeberg.org/emansije&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eo&quot;&gt;https://codeberg.org/eo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Eriwi&quot;&gt;https://codeberg.org/Eriwi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EssGeeEich&quot;&gt;https://codeberg.org/EssGeeEich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FedericoSchonborn&quot;&gt;https://codeberg.org/FedericoSchonborn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flipreverse&quot;&gt;https://codeberg.org/flipreverse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Frankkkkk&quot;&gt;https://codeberg.org/Frankkkkk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/FunctionalHacker&quot;&gt;https://codeberg.org/FunctionalHacker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/furry&quot;&gt;https://codeberg.org/furry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gmask&quot;&gt;https://codeberg.org/gmask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grosmanal&quot;&gt;https://codeberg.org/grosmanal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/h759bkyo4&quot;&gt;https://codeberg.org/h759bkyo4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hankskyjames777&quot;&gt;https://codeberg.org/hankskyjames777&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ikidd&quot;&gt;https://codeberg.org/ikidd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/iminfinity&quot;&gt;https://codeberg.org/iminfinity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/intelfx&quot;&gt;https://codeberg.org/intelfx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/itsdrike&quot;&gt;https://codeberg.org/itsdrike&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JeremyStarTM&quot;&gt;https://codeberg.org/JeremyStarTM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jfinkhaeuser&quot;&gt;https://codeberg.org/jfinkhaeuser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Justman10000&quot;&gt;https://codeberg.org/Justman10000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwells&quot;&gt;https://codeberg.org/jwells&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kB01&quot;&gt;https://codeberg.org/kB01&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kdh8219&quot;&gt;https://codeberg.org/kdh8219&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kecrily&quot;&gt;https://codeberg.org/kecrily&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KlavsKlavsen&quot;&gt;https://codeberg.org/KlavsKlavsen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KOLANICH&quot;&gt;https://codeberg.org/KOLANICH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lampajr&quot;&gt;https://codeberg.org/lampajr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leana8959&quot;&gt;https://codeberg.org/leana8959&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/liberodark&quot;&gt;https://codeberg.org/liberodark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Link1J&quot;&gt;https://codeberg.org/Link1J&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lucasmz&quot;&gt;https://codeberg.org/lucasmz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/m0s&quot;&gt;https://codeberg.org/m0s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mainboarder&quot;&gt;https://codeberg.org/mainboarder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltfield&quot;&gt;https://codeberg.org/maltfield&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/markuzcha&quot;&gt;https://codeberg.org/markuzcha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matheusmoreira&quot;&gt;https://codeberg.org/matheusmoreira&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maya&quot;&gt;https://codeberg.org/maya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MichaelTen&quot;&gt;https://codeberg.org/MichaelTen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mnq&quot;&gt;https://codeberg.org/mnq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moonglum&quot;&gt;https://codeberg.org/moonglum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mormegil&quot;&gt;https://codeberg.org/Mormegil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mylloon&quot;&gt;https://codeberg.org/Mylloon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/natct&quot;&gt;https://codeberg.org/natct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nercon&quot;&gt;https://codeberg.org/nercon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nezbednik&quot;&gt;https://codeberg.org/nezbednik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NicolasCARPi&quot;&gt;https://codeberg.org/NicolasCARPi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/payas&quot;&gt;https://codeberg.org/payas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Pi-Cla&quot;&gt;https://codeberg.org/Pi-Cla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PixelHamster&quot;&gt;https://codeberg.org/PixelHamster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/popey&quot;&gt;https://codeberg.org/popey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/programmerjake&quot;&gt;https://codeberg.org/programmerjake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Quitaxd&quot;&gt;https://codeberg.org/Quitaxd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rafadc&quot;&gt;https://codeberg.org/rafadc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ReptoxX&quot;&gt;https://codeberg.org/ReptoxX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rguards&quot;&gt;https://codeberg.org/rguards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/saltstack-admin&quot;&gt;https://codeberg.org/saltstack-admin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sbatial&quot;&gt;https://codeberg.org/sbatial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sergeyk&quot;&gt;https://codeberg.org/sergeyk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/shanzez&quot;&gt;https://codeberg.org/shanzez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/silverwind&quot;&gt;https://codeberg.org/silverwind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sinsky&quot;&gt;https://codeberg.org/sinsky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SinTan1729&quot;&gt;https://codeberg.org/SinTan1729&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SnowCode&quot;&gt;https://codeberg.org/SnowCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sosasees&quot;&gt;https://codeberg.org/sosasees&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SR-G&quot;&gt;https://codeberg.org/SR-G&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stsp&quot;&gt;https://codeberg.org/stsp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Sunner&quot;&gt;https://codeberg.org/Sunner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tampler&quot;&gt;https://codeberg.org/tampler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefox&quot;&gt;https://codeberg.org/thefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/theoryshaw&quot;&gt;https://codeberg.org/theoryshaw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thepaperpilot&quot;&gt;https://codeberg.org/thepaperpilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Thesola10&quot;&gt;https://codeberg.org/Thesola10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thomas-maurice&quot;&gt;https://codeberg.org/thomas-maurice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tmb&quot;&gt;https://codeberg.org/tmb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/toasterbirb&quot;&gt;https://codeberg.org/toasterbirb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VehementHam&quot;&gt;https://codeberg.org/VehementHam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VicinityNeurosis&quot;&gt;https://codeberg.org/VicinityNeurosis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vsz&quot;&gt;https://codeberg.org/vsz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/WithLithum&quot;&gt;https://codeberg.org/WithLithum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yarikoptic&quot;&gt;https://codeberg.org/yarikoptic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeziruo&quot;&gt;https://codeberg.org/yeziruo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yumisea&quot;&gt;https://codeberg.org/yumisea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zareck&quot;&gt;https://codeberg.org/zareck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ZilloweZ&quot;&gt;https://codeberg.org/ZilloweZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zontreck&quot;&gt;https://codeberg.org/zontreck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zotan&quot;&gt;https://codeberg.org/zotan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zottelchen&quot;&gt;https://codeberg.org/Zottelchen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zwanto&quot;&gt;https://codeberg.org/zwanto&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v7.0 is available</title><link>https://forgejo.org/2024-04-release-v7-0/</link><guid isPermaLink="true">https://forgejo.org/2024-04-release-v7-0/</guid><description>Forgejo v7.0 is available with translations in Bulgarian, Esperanto, Filipino and Slovenian; SourceHut builds integration; support for the SHA-256 hash function in Git; source code search by default and more. It also is the first Long Term Support version and will receive updates until July 2025. The adoption of semantic versioning is the reason for the version bump from v1.21 to v7.0 and is compatible with existing tools.</description><pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v7.0&lt;/a&gt; was released 23 April 2024. You will find the most interesting changes it introduces below and in a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-0&quot;&gt;complete list in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://v7.next.forgejo.org/&quot;&gt;dedicated test instance is available&lt;/a&gt; to try it out. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v7.0/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-0&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or in the &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;chat room&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The adoption of &lt;a href=&quot;https://semver.org/spec/v2.0.0.html&quot;&gt;Semantic Versioning 2.0.0&lt;/a&gt; is the reason for the version bump from &lt;code&gt;v1.21&lt;/code&gt; to &lt;code&gt;v7.0&lt;/code&gt; and is compatible with existing tools.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://translate.codeberg.org/projects/forgejo/forgejo&quot;&gt;Translations in four new languages&lt;/a&gt;&lt;/strong&gt; with a usable level of completion are available to users: Bulgarian, Esperanto, Filipino and Slovenian.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v7.0/user/webhooks/&quot;&gt;SourceHut Builds integration&lt;/a&gt;&lt;/strong&gt; can be used to submit jobs to &lt;a href=&quot;https://man.sr.ht/builds.sr.ht/&quot;&gt;SourceHut&lt;/a&gt; on push events.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v7.0/user/code-search/#basic-git-grep&quot;&gt;Source code search code now available by default&lt;/a&gt;&lt;/strong&gt; using &lt;a href=&quot;https://git-scm.com/docs/git-grep&quot;&gt;git grep&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://forgejo.org/docs/v7.0/user/repository-activity/&quot;&gt;Activity graphs&lt;/a&gt;&lt;/strong&gt; show the contributors, code frequency and the recent commits in the activity tab of repositories.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://forgejo.org/docs/v7.0/user/wiki/#activation-and-permissions&quot;&gt;The wiki can be edited by any user&lt;/a&gt;&lt;/strong&gt; with read permissions by selecting &lt;code&gt;Allow anyone to edit the wiki&lt;/code&gt; on the repository settings. The default is to only allow users with write permissions on the repository.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/d68a613ba8fd860863a3465b5b5945b191b87b25&quot;&gt;Git repositories using SHA-256 are supported&lt;/a&gt;&lt;/strong&gt;. Although Git repositories using SHA-1 are not vulnerable to &lt;a href=&quot;https://shattered.io/&quot;&gt;collision attacks&lt;/a&gt; since Git v2.13.0, this hash algorithm is still weak. Git &lt;a href=&quot;https://git-scm.com/docs/hash-function-transition&quot;&gt;transition to a SHA-256 hash function&lt;/a&gt; was decided to be trustworthy and useful in practice for at least 10 years. &lt;strong&gt;As of Forgejo 7.0.2 some features are &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/3613&quot;&gt;still unreliable when using SHA-256&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://forgejo.org/docs/v7.0/user/readme-badges/&quot;&gt;Repository badges&lt;/a&gt;&lt;/strong&gt; can be used to embed information about a given repository such as the CI state, the number of issues, etc.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-0&quot;&gt;in the Forgejo v7.0.0 release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;7.0 Long Term Support (LTS) and semantic versioning&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;7.0&lt;/code&gt; version is the first Long Term Support (LTS) release. Critical bug and security fixes will be published in patch releases (&lt;code&gt;7.0.1&lt;/code&gt;, &lt;code&gt;7.0.2&lt;/code&gt;, etc.) until &lt;strong&gt;July 2025&lt;/strong&gt;. It is also the first version to use &lt;a href=&quot;https://semver.org/spec/v2.0.0.html&quot;&gt;semantic versioning&lt;/a&gt;. Forgejo implemented semantic versioning internally in earlier releases (for instance &lt;code&gt;v1.21&lt;/code&gt; is &lt;code&gt;v6.0&lt;/code&gt;) and it is now exposed publicly.&lt;/p&gt;
&lt;h3&gt;Gitea API compatibility&lt;/h3&gt;
&lt;p&gt;Tools that are developed for the Gitea API will keep working with the new Forgejo numbering scheme. They typically make assertions on the release number to unlock new functionalities and that logic will not be impacted by a bump in the release number. The proprietary version of Gitea has a different numbering scheme (v21.X.Y, v22.X.Y) and is in a similar situation.&lt;/p&gt;
&lt;p&gt;Read more about &lt;a href=&quot;/2024-02-forking-forward/&quot;&gt;Gitea compatibility in the blog post explaining the hard fork that happened in February 2024&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Time based release schedule&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/v7.0/developer/release/#release-cycle&quot;&gt;time based release schedule&lt;/a&gt; was established to publish a release every three months. Patch releases will be published more frequently, depending on the severity of the bug or security fixes they contain. The exact number of the release cannot be known in advance because it will be determined by the features and breaking changes it contains, as specified by the &lt;a href=&quot;https://semver.org/spec/v2.0.0.html&quot;&gt;Semantic Versioning 2.0.0&lt;/a&gt; specifications.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;2024 Q1&lt;/td&gt;
&lt;td&gt;7.0.0+gitea-1.22.0&lt;/td&gt;
&lt;td&gt;23 April 2024&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2025&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q2&lt;/td&gt;
&lt;td&gt;8.0.0+gitea-A.B.C&lt;/td&gt;
&lt;td&gt;17 July 2024&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q3&lt;/td&gt;
&lt;td&gt;X.Y.Z+gitea-A.B.C&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;td&gt;15 January 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q4&lt;/td&gt;
&lt;td&gt;X.Y.Z+gitea-A.B.C&lt;/td&gt;
&lt;td&gt;15 January 2025&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;7.0-test daily releases&lt;/h3&gt;
&lt;p&gt;Releases are built daily from the latest changes found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v7.0/forgejo&quot;&gt;v7.0/forgejo&lt;/a&gt; development branch. They are deployed to the &lt;a href=&quot;https://v7.next.forgejo.org&quot;&gt;https://v7.next.forgejo.org&lt;/a&gt; instance for manual verification in case a bug fix is of particular interest ahead of the next patch release. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/7.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/7.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v7.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their name stays the same but they are replaced by a new build every day.&lt;/p&gt;
&lt;h2&gt;Webhook subsystem refactor&lt;/h2&gt;
&lt;p&gt;The webhook subsystem underwent a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2717&quot;&gt;substantial refactor&lt;/a&gt; to ease the additions of new webhook types. The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/2714&quot;&gt;SourceHut Builds&lt;/a&gt; is a driving example of how the refactored webhook architecture can be used to implement a new webhook type.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;Forgejo now got its own independent &lt;a href=&quot;https://forgejo.org/docs/v7.0/developer/localization&quot;&gt;localization foundation&lt;/a&gt;. New &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#localization&quot;&gt;teams&lt;/a&gt; were formed, a Weblate &lt;a href=&quot;https://translate.codeberg.org/projects/forgejo/forgejo/&quot;&gt;project&lt;/a&gt; was set up. The localization no longer relies on a proprietary service.&lt;/p&gt;
&lt;p&gt;Work on refactoring base localization to improve User eXperience and translatability is in progress. Lots of strings were updated to improve readability and be easier to understand, many got basic plural support. File and repo sizes were &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2528&quot;&gt;made translatable&lt;/a&gt;, localization of activity heatmap &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2612&quot;&gt;was fixed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As soon as the initiative &lt;a href=&quot;https://forgejo.org/2024-01-monthly-update/#localization&quot;&gt;was announced&lt;/a&gt; in January, the call for participation got a great response and volunteers from around the world are working daily to improve translations. New languages were added. The ones which got active maintainers and have reached a usable level of completion &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2724&quot;&gt;were made available&lt;/a&gt; to the users: Bulgarian, Esperanto, Filipino, Slovenian.&lt;/p&gt;
&lt;p&gt;Anyone is welcome to participate in improving translation &lt;a href=&quot;https://forgejo.org/docs/latest/developer/localization&quot;&gt;for their language&lt;/a&gt; as well as &lt;a href=&quot;https://forgejo.org/docs/v7.0/developer/localization-english/#contributing&quot;&gt;the English base&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;Does &lt;code&gt;Forgejo&lt;/code&gt; support federation? Not yet. Was there progress? Yes.&lt;/p&gt;
&lt;p&gt;The monthly reports &lt;a href=&quot;/tag/report/&quot;&gt;have details&lt;/a&gt; on these progress.&lt;/p&gt;
&lt;p&gt;Forges have existed for over twenty years and none of them has
achieved data portability let alone federation. Forgejo is one year
old and it will take it a some time to get there.&lt;/p&gt;
&lt;h3&gt;Get Forgejo v7.0&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download/&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-0&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#7-0-0&quot;&gt;breaking changes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v7.0.0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/7.0.0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/7.0&quot;&gt;&lt;code&gt;7.0&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;7.0.Y&lt;/code&gt; patch release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v7.0/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.21.11-0</title><link>https://forgejo.org/2024-04-release-v1-21-11-0/</link><guid isPermaLink="true">https://forgejo.org/2024-04-release-v1-21-11-0/</guid><description>The Forgejo v1.21.11-0 release contains two security fixes: a privilege escalation that allows any registered user to change the visibility of any public repository; and a cross-site scripting (XSS) vulnerability that enabled attackers to run unsandboxed client-side scripts on pages served from the forge&apos;s domain.</description><pubDate>Thu, 18 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.21.11-0&quot;&gt;Forgejo v1.21.11-0&lt;/a&gt; was released 18 April 2024.&lt;/p&gt;
&lt;p&gt;This release contains &lt;em&gt;two security fixes&lt;/em&gt;, both of which can be exploited by registered Forgejo users. One flaw allows &lt;em&gt;anyone&lt;/em&gt; who can open a pull request against a repository to change its visibility. The other lets the attacker run unsandboxed client-side scripts on pages served from the forge&apos;s domain, a &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;Cross-site scripting (XSS)&lt;/a&gt; vulnerability.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Privilege escalation through &lt;code&gt;git push&lt;/code&gt; options&lt;/h3&gt;
&lt;p&gt;By far the more serious issue is a privilege escalation through &lt;code&gt;git push&lt;/code&gt; options, which allowed any registered user to change the visibility of any repository they could see - public repositories included -, regardless of what level of access they had.&lt;/p&gt;
&lt;p&gt;A more detailed deep-dive about this vulnerability will follow in a later blog post.&lt;/p&gt;
&lt;h3&gt;Cross-site scripting (XSS) vulnerability&lt;/h3&gt;
&lt;p&gt;The other vulnerability is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;Cross-site scripting (XSS)&lt;/a&gt; vulnerability that could be exploited by a registered Forgejo user.&lt;/p&gt;
&lt;p&gt;In certain situations, rendered repository contents weren&apos;t properly guarded, and allowed unsandboxed client-side scripts to run from the same domain as the forge itself.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - March 2024</title><link>https://forgejo.org/2024-03-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-03-monthly-update/</guid><description>Forgejo 7.0.0 release candidates are now available for testing at https://v7.next.forgejo.org or by downloading OCI images and binaries, updated daily. It will be the first LTS release, supported until July 2025. Four new translations that were added are Filipino, Esperanto, Slovenian and Bulgarian and the localization team keeps growing.</description><pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a good overview of what has changed in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Forgejo 7.0.0 release candidates are now available for testing at &lt;a href=&quot;https://v7.next.forgejo.org&quot;&gt;https://v7.next.forgejo.org&lt;/a&gt; or by downloading OCI images (&lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/7.0-test&quot;&gt;root&lt;/a&gt; / &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/7.0-test-rootless&quot;&gt;rootless&lt;/a&gt;) and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v7.0-test&quot;&gt;binaries&lt;/a&gt; that are updated updated daily.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;7.0.0+LTS-gitea-1.22.0&lt;/code&gt; version is the first Long Term Support (LTS) release and will receive critical bug and security fixes until July 2025. It is an additional burden on Forgejo contributors and members of the release team. Individuals and organizations who need that kind of stability are kindly invited to contribute to this effort so it can be sustained in the long run.&lt;/p&gt;
&lt;p&gt;New languages that got active translators and have reached a usable level of completion &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2724&quot;&gt;were added&lt;/a&gt; and are now visible to users: Bulgarian, Esperanto, Filipino and Slovenian.&lt;/p&gt;
&lt;h2&gt;New release management&lt;/h2&gt;
&lt;p&gt;Now that &lt;a href=&quot;https://forgejo.org/2024-02-forking-forward/&quot;&gt;Forgejo forked its own way forward&lt;/a&gt;, it became necessary to define when and how releases are published.&lt;/p&gt;
&lt;h3&gt;Semantic versioning&lt;/h3&gt;
&lt;p&gt;The first Forgejo version to be published with its own release management will be &lt;code&gt;7.0.0+LTS-gitea-1.22.0&lt;/code&gt; and the &lt;a href=&quot;https://forgejo.org/docs/v7.0/user/versions/&quot;&gt;documentation was updated&lt;/a&gt; to explain the new numbering scheme.&lt;/p&gt;
&lt;h3&gt;Gitea API compatibility&lt;/h3&gt;
&lt;p&gt;Tools that are developed for the Gitea API will keep working with the new Forgejo numbering scheme. They typically make assertions on the release number to unlock new functionalities and that logic will not be impacted by a bump in the release number. The proprietary version of Gitea has a different numbering scheme (v21.X.Y, v22.X.Y) and is in a similar situation.&lt;/p&gt;
&lt;h3&gt;Forgejo 7.0 release candidates&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v7.0/forgejo&quot;&gt;7.0/forgejo&lt;/a&gt; branch was cut 30 March 2024 and the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v8.0.0-dev&quot;&gt;v8.0.0-dev&lt;/a&gt; tag set to the development branch. While the release-critical bugs are being fixed so that the version can be published, &lt;a href=&quot;https://v7.next.forgejo.org&quot;&gt;https://v7.next.forgejo.org&lt;/a&gt; will keep being updated daily with a build of the latest commit, acting as a release candidate where anyone can safely try and break it. It can also be installed locally with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCI images: &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/7.0-test&quot;&gt;root&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/7.0-test-rootless&quot;&gt;rootless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v7.0-test&quot;&gt;Binaries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Their name stays the same but they are replaced by a new build every day.&lt;/p&gt;
&lt;h3&gt;Forgejo 7.0 LTS&lt;/h3&gt;
&lt;p&gt;Now that Forgejo has given itself the mean to avoid most of the regressions that it suffered from in the past, it can provide support for releases during a longer period of time. The &lt;code&gt;7.0.0+LTS-gitea-1.22.0&lt;/code&gt; version is the first Long Term Support (LTS) release and will receive critical bug and security fixes until July 2025.&lt;/p&gt;
&lt;h3&gt;Time based release schedule&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/v7.0/developer/release/#release-cycle&quot;&gt;time based release schedule&lt;/a&gt; was established to publish a release every three months. Patch releases will be published more frequently, depending on the severity of the bug or security fixes they contain. The exact number of the release cannot be known in advance because it will be determined by the features and breaking changes it contains, as specified by the &lt;a href=&quot;https://semver.org/spec/v2.0.0.html&quot;&gt;Semantic Versioning 2.0.0&lt;/a&gt; specifications.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Release date&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;End Of Life&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;2024 Q1&lt;/td&gt;
&lt;td&gt;7.0.0+LTS-gitea-1.22.0&lt;/td&gt;
&lt;td&gt;17 April 2024&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 July 2025&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q2&lt;/td&gt;
&lt;td&gt;X.Y.Z+gitea-A.B.C&lt;/td&gt;
&lt;td&gt;17 July 2024&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q3&lt;/td&gt;
&lt;td&gt;X.Y.Z+gitea-A.B.C&lt;/td&gt;
&lt;td&gt;16 October 2024&lt;/td&gt;
&lt;td&gt;15 January 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024 Q4&lt;/td&gt;
&lt;td&gt;X.Y.Z+gitea-A.B.C&lt;/td&gt;
&lt;td&gt;15 January 2025&lt;/td&gt;
&lt;td&gt;16 April 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Code&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo&quot;&gt;https://codeberg.org/forgejo/forgejo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notable improvements and bug fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2717&quot;&gt;Webhook refactor and addition of SourceHut builds&lt;/a&gt; is a series of 7 pull requests, 6 of which have been merged.&lt;/li&gt;
&lt;li&gt;A number of localization improvements (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2828&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2756&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2644&quot;&gt;3&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2612&quot;&gt;4&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2610&quot;&gt;5&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2584&quot;&gt;6&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2492&quot;&gt;7&lt;/a&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Tests &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2657&quot;&gt;now fail instead of just displaying error logs&lt;/a&gt;. This should help catch missing translations and ensure that an error is logged only when an inconsistency is detected within Forgejo (which shouldn’t happen if the test is realistically setup).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2520&quot;&gt;Recognize SSH signed tags in addition to OpenPGP&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2482&quot;&gt;Add S3 bucket lookup type&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/465&quot;&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=&amp;amp;type=all&amp;amp;sort=&amp;amp;state=closed&amp;amp;labels=&amp;amp;milestone=0&amp;amp;project=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;Read more&lt;/a&gt; in the pull requests.&lt;/p&gt;
&lt;h2&gt;Backport automation&lt;/h2&gt;
&lt;p&gt;When pull requests are merged, a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows/backport.yml&quot;&gt;workflow will automatically open a backport&lt;/a&gt;. If the &lt;code&gt;backport/v1.21&lt;/code&gt; label is found, it will &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2827&quot;&gt;target the Forgejo v1.21 branch&lt;/a&gt;. If there are no conflicts and tests pass, it can be merged right away and save valuable time.&lt;/p&gt;
&lt;p&gt;As Forgejo 7.0 enters the release candidate stage of its life cycle a significant number of backports are expected during the first few weeks and such an automation will have even more of an impact.&lt;/p&gt;
&lt;h2&gt;Dependency Management&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows/renovate.yml&quot;&gt;dependency update detection&lt;/a&gt; cron job has been setup to automatically &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&amp;amp;poster=165503&quot;&gt;open pull request proposing updates&lt;/a&gt; when new versions of Go or JavaScript packages, OCI images and more are available. It &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2800&quot;&gt;finds the release notes&lt;/a&gt;, adds them to the pull request description and Forgejo contributors can then conveniently decide whether an upgrade is necessary. This recurring observations of Forgejo dependencies is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/renovate.json&quot;&gt;fine tuned by a configuration file&lt;/a&gt; that, among other things, ensures there are at most five pull requests proposed at all times.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=gitea%20week&amp;amp;state=closed&quot;&gt;weekly cherry-pick of commits from Gitea&lt;/a&gt; became a routine collectively managed by two Forgejo contributors. It is one of the improvements brought by the hard fork decision from last month. Rebasing was more involved and managed by a single person: an undesirable single point of failure. A &lt;a href=&quot;https://codeberg.org/forgejo/tools&quot;&gt;tool&lt;/a&gt; was created to automate the most tedious and error prone tasks.&lt;/p&gt;
&lt;h2&gt;End to end tests&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;end-to-end tests&lt;/a&gt; were entirely refactored for unification and simplicity. They cover the following areas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/actions&quot;&gt;actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/packages&quot;&gt;packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/upgrade&quot;&gt;upgrades&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/storage&quot;&gt;storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They can now all be run by adding the &lt;code&gt;run-end-to-end-test&lt;/code&gt; label to a pull request (see &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2465&quot;&gt;this example&lt;/a&gt;). Before the refactor, only Forgejo Actions tests were run.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;New languages that got active translators and have reached a usable level of completion &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2724&quot;&gt;were added&lt;/a&gt; and are now visible to users: Bulgarian, Esperanto, Filipino and Slovenian.&lt;/p&gt;
&lt;p&gt;New contributors were onboarded (&lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/98&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/108&quot;&gt;2&lt;/a&gt;) to the localization team.&lt;/p&gt;
&lt;p&gt;The English source strings saw a lot of activity for unification and rewording. There were no notable conflicts with Gitea translations. There was one conflict caused by merged pull request in Forgejo that locked translations for about half of a day. Although Weblate owns all translated files and they are not to be modified in pull requests, there are exceptions. When mass modification can be automated, this can be done by a pull request and to save valuable translators&apos; time. But when it happens, care must be taken to avoid conflicts and &lt;a href=&quot;https://forgejo.org/docs/v1.21/developer/localization-admin/#merging-a-pull-request-that-changes-translations&quot;&gt;the required steps were documented&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The upside of this incident was to show that resolving such conflicts is as simple as reverting the faulty commit and opening a new pull request. It is not the most efficient way to go about it, but it is simple.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;The pull request to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;federated stars&lt;/a&gt; made progress. In the settings of a repository there is now a field allowing to define its federated repositories. Read &lt;a href=&quot;https://domaindrivenarchitecture.org/posts/2024-03-27-state-of-federation/&quot;&gt;more in the activity summary&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/59&quot;&gt;federation implementation task list&lt;/a&gt; was updated.&lt;/p&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&quot;&gt;one major updates&lt;/a&gt; because of a major bump of the postgresql dependencies.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&quot;&gt;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Runner&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#3-4-0&quot;&gt;Forgejo runner version 3.4.1&lt;/a&gt; was published and supports for the artifacts@v4 protocol when used with the development version of Forgejo 7.0, as &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/actions/example-artifacts-v4/.forgejo/workflows/test.yml&quot;&gt;demonstrated by the end-to-end tests&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With the caveat that a forked version of the matching &lt;a href=&quot;https://code.forgejo.org/forgejo/download-artifact&quot;&gt;download&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/upload-artifact&quot;&gt;upload&lt;/a&gt; actions must be used because they both assume a GitHub environment. Chasing such features is high maintenance and casts a doubt on its long term viability. The Forgejo runner makes no promise of compatibility with GitHub and an alternative action with the same interface but implemented differently may be, for example, a more sustainable choice.&lt;/p&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;https://code.forgejo.org/forgejo/runner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/act&quot;&gt;https://code.forgejo.org/forgejo/act&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Governance&lt;/h2&gt;
&lt;h3&gt;Sustainability&lt;/h3&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/144&quot;&gt;discussion started&lt;/a&gt; in an attempt to find an answer and make Forgejo durable for the next 10 years.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/41&quot;&gt;grant proposal&lt;/a&gt; was drafted to support the development of Forgejo.&lt;/p&gt;
&lt;p&gt;An additional &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/42&quot;&gt;Request for Payment was sent&lt;/a&gt; to NLnet in the context of the &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls?labels=123038&quot;&gt;ongoing grant&lt;/a&gt; and the funds will go to Codeberg.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/6543&quot;&gt;https://codeberg.org/6543&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/abacabadabacaba&quot;&gt;https://codeberg.org/abacabadabacaba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/acioustick&quot;&gt;https://codeberg.org/acioustick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/airbreather&quot;&gt;https://codeberg.org/airbreather&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/antoyo&quot;&gt;https://codeberg.org/antoyo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aral&quot;&gt;https://codeberg.org/aral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/axd99&quot;&gt;https://codeberg.org/axd99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/banaanihillo&quot;&gt;https://codeberg.org/banaanihillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/be4zad&quot;&gt;https://codeberg.org/be4zad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/captainepoch&quot;&gt;https://codeberg.org/captainepoch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cherryb&quot;&gt;https://codeberg.org/cherryb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/con-f-use&quot;&gt;https://codeberg.org/con-f-use&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dasasd122311&quot;&gt;https://codeberg.org/dasasd122311&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dboerlage&quot;&gt;https://codeberg.org/dboerlage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/defanor&quot;&gt;https://codeberg.org/defanor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/denyskon&quot;&gt;https://codeberg.org/denyskon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/doomedguppy&quot;&gt;https://codeberg.org/doomedguppy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Drakon&quot;&gt;https://codeberg.org/Drakon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Edgarsons&quot;&gt;https://codeberg.org/Edgarsons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eo&quot;&gt;https://codeberg.org/eo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EOWNERDEAD&quot;&gt;https://codeberg.org/EOWNERDEAD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/EssGeeEich&quot;&gt;https://codeberg.org/EssGeeEich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Eveeifyeve&quot;&gt;https://codeberg.org/Eveeifyeve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ezra&quot;&gt;https://codeberg.org/ezra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/f00&quot;&gt;https://codeberg.org/f00&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fauxmight&quot;&gt;https://codeberg.org/fauxmight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fjuro&quot;&gt;https://codeberg.org/Fjuro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flactwin&quot;&gt;https://codeberg.org/flactwin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flipreverse&quot;&gt;https://codeberg.org/flipreverse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HarryK&quot;&gt;https://codeberg.org/HarryK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Haui&quot;&gt;https://codeberg.org/Haui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hexa&quot;&gt;https://codeberg.org/hexa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/inference&quot;&gt;https://codeberg.org/inference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/intelfx&quot;&gt;https://codeberg.org/intelfx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadedctrl&quot;&gt;https://codeberg.org/jadedctrl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadeprime&quot;&gt;https://codeberg.org/jadeprime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/james2432&quot;&gt;https://codeberg.org/james2432&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jean-daricade&quot;&gt;https://codeberg.org/jean-daricade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JeremyStarTM&quot;&gt;https://codeberg.org/JeremyStarTM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jilen&quot;&gt;https://codeberg.org/jilen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmshrtn&quot;&gt;https://codeberg.org/jmshrtn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kallisti5&quot;&gt;https://codeberg.org/kallisti5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kita&quot;&gt;https://codeberg.org/kita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lampajr&quot;&gt;https://codeberg.org/lampajr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Laxystem&quot;&gt;https://codeberg.org/Laxystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ledyba&quot;&gt;https://codeberg.org/ledyba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lyssieth&quot;&gt;https://codeberg.org/lyssieth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mai-Lapyst&quot;&gt;https://codeberg.org/Mai-Lapyst&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MatseVH&quot;&gt;https://codeberg.org/MatseVH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maunzCache&quot;&gt;https://codeberg.org/maunzCache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maytha8&quot;&gt;https://codeberg.org/maytha8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mishra&quot;&gt;https://codeberg.org/mishra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mmarif&quot;&gt;https://codeberg.org/mmarif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mondstern&quot;&gt;https://codeberg.org/mondstern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MorsMortium&quot;&gt;https://codeberg.org/MorsMortium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mumulhl&quot;&gt;https://codeberg.org/mumulhl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neox&quot;&gt;https://codeberg.org/neox&lt;/a&gt;_&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nis&quot;&gt;https://codeberg.org/nis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nmmr&quot;&gt;https://codeberg.org/nmmr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/noth&quot;&gt;https://codeberg.org/noth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/OdinVex&quot;&gt;https://codeberg.org/OdinVex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ormai&quot;&gt;https://codeberg.org/ormai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/payas&quot;&gt;https://codeberg.org/payas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Pi-Cla&quot;&gt;https://codeberg.org/Pi-Cla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/popey&quot;&gt;https://codeberg.org/popey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pyfisch&quot;&gt;https://codeberg.org/pyfisch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RaptaG&quot;&gt;https://codeberg.org/RaptaG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rikh&quot;&gt;https://codeberg.org/rikh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sertonix&quot;&gt;https://codeberg.org/sertonix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SinTan1729&quot;&gt;https://codeberg.org/SinTan1729&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/skobkin&quot;&gt;https://codeberg.org/skobkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tampler&quot;&gt;https://codeberg.org/tampler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Techwizz&quot;&gt;https://codeberg.org/Techwizz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tek256&quot;&gt;https://codeberg.org/tek256&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tengkuizdihar&quot;&gt;https://codeberg.org/tengkuizdihar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TheAwiteb&quot;&gt;https://codeberg.org/TheAwiteb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefinn93&quot;&gt;https://codeberg.org/thefinn93&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefox&quot;&gt;https://codeberg.org/thefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thepaperpilot&quot;&gt;https://codeberg.org/thepaperpilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timmwille&quot;&gt;https://codeberg.org/timmwille&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxcoder&quot;&gt;https://codeberg.org/tuxcoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/twenty-panda&quot;&gt;https://codeberg.org/twenty-panda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/uncomfyhalomacro&quot;&gt;https://codeberg.org/uncomfyhalomacro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VehementHam&quot;&gt;https://codeberg.org/VehementHam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/WithLithum&quot;&gt;https://codeberg.org/WithLithum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolfogre&quot;&gt;https://codeberg.org/wolfogre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeziruo&quot;&gt;https://codeberg.org/yeziruo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zareck&quot;&gt;https://codeberg.org/zareck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zbolo-wd&quot;&gt;https://codeberg.org/zbolo-wd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zenobit&quot;&gt;https://codeberg.org/zenobit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zotan&quot;&gt;https://codeberg.org/zotan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zughy&quot;&gt;https://codeberg.org/Zughy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Impact of CVE-2024-3094 on Forgejo</title><link>https://forgejo.org/2024-03-xz/</link><guid isPermaLink="true">https://forgejo.org/2024-03-xz/</guid><description>No direct impact of the xz backdoor (CVE-2024-3094) on Forgejo. The infrastructure that powers Forgejo is not impacted by this vulnerability. Forgejo itself is also not affected, however if you run an OpenSSH server for Git over SSH you could be affected by this CVE.</description><pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On 29 March 2024 &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2024/03/29/4&quot;&gt;the details were shared&lt;/a&gt; of a backdoor in the &lt;code&gt;xz&lt;/code&gt; source code. This backdoor, according &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2024/03/30/36&quot;&gt;to the latest reports&lt;/a&gt;, is capable of executing arbitrary code on affected machines which can lead to a full compromise of that machine.&lt;/p&gt;
&lt;h2&gt;Impact on Forgejo&lt;/h2&gt;
&lt;p&gt;Forgejo itself is not impacted by this backdoor, because it doesn&apos;t load the &lt;code&gt;liblzma&lt;/code&gt; library that contained the backdoor, Forgejo does import the &lt;a href=&quot;https://github.com/ulikunitz/xz&quot;&gt;xz&lt;/a&gt; library but this has no relation to the &lt;code&gt;liblzma&lt;/code&gt; library. Forgejo allows to use Git over SSH feature in two different ways.&lt;/p&gt;
&lt;h3&gt;Builtin SSH server&lt;/h3&gt;
&lt;p&gt;The builtin SSH server is integrated into every Forgejo binary, it uses an &lt;a href=&quot;https://github.com/gliderlabs/ssh&quot;&gt;SSH server library&lt;/a&gt; to provide an SSH server. It is written in Go and doesn&apos;t load the &lt;code&gt;liblzma&lt;/code&gt; library, therefore it is not affected.&lt;/p&gt;
&lt;p&gt;Please read on if you&apos;re using Forgejo in a containerized environment such as Docker.&lt;/p&gt;
&lt;h3&gt;OpenSSH server&lt;/h3&gt;
&lt;p&gt;If you run an OpenSSH server that you installed independently of Forgejo, you could be affected by the backdoor. It depends on your distribution and configuration: the vulnerable &lt;code&gt;xz&lt;/code&gt; versions (&lt;code&gt;5.6.0&lt;/code&gt;, &lt;code&gt;5.6.1&lt;/code&gt;) could be in the package store and may have been installed. If you discover that your machine had it installed at any time, you should refer to your distribution&apos;s support or security advisories for more accurate information and to better understand the impact of this CVE on your installation.&lt;/p&gt;
&lt;p&gt;If you deployed Forgejo using our official container images that also bundle an OpenSSH server, rest assured that these images &lt;strong&gt;never contained a vulnerable version&lt;/strong&gt;. There is no need for action, because the images were based on Alpine Linux 3.19, which is not affected as per &lt;a href=&quot;https://security.alpinelinux.org/vuln/CVE-2024-3094&quot;&gt;https://security.alpinelinux.org/vuln/CVE-2024-3094&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Impact on infrastructure&lt;/h2&gt;
&lt;p&gt;The infrastructure that powers Forgejo consists of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Forgejo&apos;s own hardware used to create and sign the releases.&lt;/li&gt;
&lt;li&gt;Codeberg that hosts Forgejo&apos;s source code and the releases.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These machines all run Debian GNU/Linux Bookworm, a stable version of Debian. &lt;a href=&quot;https://lists.debian.org/debian-security-announce/2024/msg00057.html&quot;&gt;The security advisory&lt;/a&gt; of Debian for this CVE clarified that no Debian stable versions were impacted by this backdoor. Additionally, the &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2024/03/29/4/3&quot;&gt;public detection script&lt;/a&gt; was run on the Forgejo machines and confirmed that the vulnerable &lt;code&gt;liblzma&lt;/code&gt; library is not present on the machine.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - February 2024</title><link>https://forgejo.org/2024-02-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-02-monthly-update/</guid><description>Forgejo started as a soft fork of Gitea, in reaction to governance changes within the project. Over time, it developed its own identity, adopted both development and governance practices - to ensure the stability, quality, and openness of the project - that made it more challenging to remain a soft fork. The decision was made to become a hard fork, and for Forgejo to forge its own path going forward.</description><pubDate>Thu, 29 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly report is meant to provide a high level view of what happened in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since its &lt;a href=&quot;../2022-12-15-hello-forgejo/&quot;&gt;inception&lt;/a&gt;, Forgejo has been a soft fork of Gitea. Over time, it developed its own identity, adopted both development and governance practices - to ensure the stability, quality, and openness of the project - that made it more challenging to remain a soft fork. The decision was made to become a hard fork, and for Forgejo to forge its own path going forward. Read more in the &lt;a href=&quot;../2024-02-forking-forward/&quot;&gt;blog post announcing the decision&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Forgejo reached &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/stars&quot;&gt;1,000 stars on Codeberg&lt;/a&gt; and it is heartwarming to see so much support. Each of these stars are more valuable than those loaned by proprietary forges: they really belong to Forgejo and come from developers who made an effort to register on Codeberg.&lt;/p&gt;
&lt;h2&gt;Implementation of the hard fork&lt;/h2&gt;
&lt;p&gt;The hard part was to make a decision, the implementation itself (as &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/58&quot;&gt;laid out in the decision&lt;/a&gt;) is
comparatively simpler and is now in place.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Publish a blog post &lt;a href=&quot;../2024-02-forking-forward/&quot;&gt;explaining the decision&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Switch from rebasing weekly (see &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/2293&quot;&gt;this rebase example&lt;/a&gt;) to cherry-picking weekly (see &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2478&quot;&gt;this cherry-pick example&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Update the &lt;a href=&quot;https://forgejo.org/docs/v1.21/developer/workflow/&quot;&gt;developer documentation&lt;/a&gt; to update the parts that are no longer needed.&lt;/li&gt;
&lt;li&gt;Merge all feature branches and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/123&quot;&gt;delete the branches&lt;/a&gt; that are no longer necessary.&lt;/li&gt;
&lt;li&gt;Develop tools and procedures are in the design phase and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2478&quot;&gt;discussions mostly happen&lt;/a&gt; whenever cherry-picking from Gitea.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Code&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo&quot;&gt;https://codeberg.org/forgejo/forgejo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notable improvements and bug fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1746&quot;&gt;Add colorblind theme variants&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1594&quot;&gt;Use &lt;code&gt;git grep&lt;/code&gt;&lt;/a&gt; to search repositories &lt;a href=&quot;https://forgejo.org/docs/v7.0/user/code-search/&quot;&gt;when the repository indexer is not configured&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvement to the &lt;a href=&quot;https://forgejo.org/docs/v7.0/user/agit-support/&quot;&gt;Agit workflow&lt;/a&gt; (PRs &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2444&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2386&quot;&gt;2&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2344&quot;&gt;3&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fix error when marking outdated code reviews as resolved (PR &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2282&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2306&quot;&gt;2&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2445&quot;&gt;Allow instance-wide disabling of forking&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2466&quot;&gt;Improve display of 404/500 error pages&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=&amp;amp;type=all&amp;amp;sort=&amp;amp;state=closed&amp;amp;labels=&amp;amp;milestone=0&amp;amp;project=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;Read more&lt;/a&gt; in the pull requests.&lt;/p&gt;
&lt;h3&gt;In flight pull requests&lt;/h3&gt;
&lt;p&gt;Most &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&quot;&gt;pull requests&lt;/a&gt; are opened and closed within a week. But some of them take a longer time, either because they are more complex or because they are taken care of by volunteers who can only occasionally work on them in their free time. This is a list of those that were updated since the last monthly report. If they are of interest to you, reviewing the changes or providing solutions would be appreciated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2223&quot;&gt;Add initial layout support for right-to-left languages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;Federated repository stars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1445&quot;&gt;Implement external release assets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1518&quot;&gt;Add optional pronoun field in user settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2465&quot;&gt;Implement remote user login source and promotion to regular user&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Documentation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Updates cherry-picked from the &lt;a href=&quot;https://docs.codeberg.org/&quot;&gt;Codeberg&lt;/a&gt; and &lt;a href=&quot;https://docs.gitea.com/&quot;&gt;Gitea&lt;/a&gt; documentation.&lt;/li&gt;
&lt;li&gt;Newer &lt;a href=&quot;https://forgejo.org/docs/v7.0/user/agit-support/&quot;&gt;user guide on the AGit workflow&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;New section in the developer guide for &lt;a href=&quot;https://forgejo.org/docs/v7.0/developer/testing/&quot;&gt;testing strategies and requirements&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;FOSDEM 2024&lt;/h2&gt;
&lt;p&gt;Codeberg&apos;s stand at FOSDEM was a success and it appears to have &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/115&quot;&gt;also been a success for Forgejo&lt;/a&gt;. There was a notable amount of people who were still looking for a self-hosted option and were curious to learn about Forgejo instead of GitLab or Gitea. The transparent stickers did not work out very well, because the colours do not cover enough, so the result was unreadable on dark background. Still, many people were interested in Forgejo stickers: several hundred of them were distributed. The NLnet stand had a &lt;a href=&quot;https://nlnet.nl/project/Forgejo/&quot;&gt;different Forgejo sticker&lt;/a&gt; (hex variant) and probably used up their whole budget with distributing them. &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/115&quot;&gt;Read more in the FOSDEM 2024 discussion&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Discussions&lt;/h2&gt;
&lt;p&gt;A significant number of discussions revolved around the hard fork decision and most of them are linked from the &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/58&quot;&gt;governance tracker&lt;/a&gt;. A few long term discussions are also worth mentioning and participation would be welcome.&lt;/p&gt;
&lt;h3&gt;Monitoring forge features and its impact on forge federation&lt;/h3&gt;
&lt;p&gt;GitLab and GitHub releases are being analysed to &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/120&quot;&gt;figure out which features are added to each release&lt;/a&gt;. These projects are driven by gigantic corporations and the rhythm at which features are added is intimidating. The idea is not for Forjego to compete on the same ground: this is a race that is already lost. However gaining and maintaining a good understanding of their features is key to the success of the implementation of federation in Forgejo.&lt;/p&gt;
&lt;h3&gt;Gathering user feedback on accessibility&lt;/h3&gt;
&lt;p&gt;User feedback is the most valuable resource for projects. Lowering the barrier for its collection helps to get much more insights, because there are a lot of problems where users don&apos;t bother opening an issue. &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/124&quot;&gt;Read more&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;(Scope of) Moderation of Forgejo instances&lt;/h3&gt;
&lt;p&gt;A discussion &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/107&quot;&gt;started a month ago about how to develop effective moderation mechanisms&lt;/a&gt; within Forgejo while maintaining means of dynamically reacting to changing problems. It aims at collecting feedback. How much is in the scope for Forgejo? What kinds of moderation actions do Forgejo admins need to perform? This kind of user research is instrumental to understand existing best practices in order to figure out what problems needs to be resolved first.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;The pull request to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;federated stars&lt;/a&gt; made progress. Discussions happened on how a federated Person should be mapped to a local FederatedUser representation. Read &lt;a href=&quot;https://codeberg.org/meissa/forgejo/src/branch/forgejo-federated-star/docs/unsure-where-to-put/blog.md&quot;&gt;more in the activity summary&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The F3 Forgejo driver &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2388&quot;&gt;refactor is complete&lt;/a&gt;: it is back where it was about six month ago. The representation of a remote user &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2465&quot;&gt;was split out of the driver&lt;/a&gt; as it is generally useful for both data portability and federation.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/59&quot;&gt;federation implementation task list&lt;/a&gt; was updated.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;The Forgejo translations &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/104&quot;&gt;have been liberated&lt;/a&gt; and now &lt;a href=&quot;https://translate.codeberg.org/&quot;&gt;rely on a Free Software service&lt;/a&gt;. A localization team was bootstrapped and their work can already be seen in the &lt;a href=&quot;https://next.forgejo.org&quot;&gt;experimental Forgejo instance&lt;/a&gt;. Translations for a few new languages began and will show when they are added to the Forgejo codebase. If you are fluent in another language and would like to help, please &lt;a href=&quot;https://forgejo.org/docs/v1.21/developer/localization/#joining-the-localization-team&quot;&gt;apply&lt;/a&gt; or join the &lt;a href=&quot;https://matrix.to/#/#forgejo-localization:matrix.org&quot;&gt;localization chatroom&lt;/a&gt; to figure out what it entails.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/docs/next/developer/localization/&quot;&gt;https://forgejo.org/docs/next/developer/localization/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Helm chart&lt;/h2&gt;
&lt;p&gt;The Forgejo helm chart had &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&quot;&gt;three major updates&lt;/a&gt;. Two because of major bumps of the postgresql dependencies and one because of merging upstream changes from Gitea chart.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&quot;&gt;https://codeberg.org/forgejo-contrib/forgejo-helm/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Alpine Package Registry&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/v1.21/user/packages/alpine/&quot;&gt;Alpine Package Registry&lt;/a&gt; now properly supports &lt;code&gt;noarch&lt;/code&gt; package files, maintaining compatibility with the official Alpine Linux package repositories.&lt;/p&gt;
&lt;p&gt;The logic for uploading a package to the Alpine Registry stored architecture independent packages (&lt;code&gt;noarch&lt;/code&gt;) in their own architecture repository, instead of being available to all architectures available in the repository. Because of this, the Alpine Package Keeper wasn&apos;t able to locate the packages in the repository.&lt;/p&gt;
&lt;p&gt;The architecture independent packages are now copied to all available architectures in the repository, and a fallback to &lt;code&gt;x86_64&lt;/code&gt; is used if the repository is brand new and doesn&apos;t contain any packages.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;p&gt;There has been &lt;a href=&quot;https://forgejo.org/releases/&quot;&gt;one security release&lt;/a&gt; in February 2024. Forgejo admins are encouraged to &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements&quot;&gt;subscribe to security announcement&lt;/a&gt; so they can better plan their upgrades.&lt;/p&gt;
&lt;p&gt;Test release were once published manually on a weekly basis and used to upgrade &lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt; upgraded. This &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/116&quot;&gt;process was automated&lt;/a&gt; and &lt;a href=&quot;https://forgejo.org/docs/v7.0/developer/release/#experimental-releases&quot;&gt;documented&lt;/a&gt; to happen daily. It runs the &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;end to end&lt;/a&gt; test suite before being upgraded which helps detect regressions early.&lt;/p&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo&quot;&gt;https://code.forgejo.org/forgejo/forgejo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;https://code.forgejo.org/forgejo/end-to-end&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/releases/&quot;&gt;https://forgejo.org/releases/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/security-announcements&quot;&gt;https://codeberg.org/forgejo/security-announcements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Governance&lt;/h2&gt;
&lt;h3&gt;Sustainability&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://prototypefund.de&quot;&gt;https://prototypefund.de&lt;/a&gt; is open to proposal in 2024 and there &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/38&quot;&gt;were discussions&lt;/a&gt; about applications around Forgejo and federation.&lt;/p&gt;
&lt;h3&gt;Moderation&lt;/h3&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MODERATION-PROCESS.md&quot;&gt;moderation action&lt;/a&gt; was carried out to put an end to an &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/91&quot;&gt;ad-hominem attack&lt;/a&gt;. A few days later it turned out the person responsible was someone banned from Forgejo space in 2023. The ban was enforced and extended to help prevent future misbehavior.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/governance&quot;&gt;https://codeberg.org/forgejo/governance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/6543&quot;&gt;https://codeberg.org/6543&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AdamGreenberg&quot;&gt;https://codeberg.org/AdamGreenberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adrinux&quot;&gt;https://codeberg.org/adrinux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/andar1an&quot;&gt;https://codeberg.org/andar1an&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Application-Maker&quot;&gt;https://codeberg.org/Application-Maker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/argrat&quot;&gt;https://codeberg.org/argrat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/axd99&quot;&gt;https://codeberg.org/axd99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/b1nar10&quot;&gt;https://codeberg.org/b1nar10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bart&quot;&gt;https://codeberg.org/bart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bizdelnick&quot;&gt;https://codeberg.org/bizdelnick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bramh&quot;&gt;https://codeberg.org/bramh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CactiChameleon9&quot;&gt;https://codeberg.org/CactiChameleon9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CodeDoctor&quot;&gt;https://codeberg.org/CodeDoctor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/denyskon&quot;&gt;https://codeberg.org/denyskon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dobrvlskyi&quot;&gt;https://codeberg.org/dobrvlskyi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/domske&quot;&gt;https://codeberg.org/domske&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/douglasparker&quot;&gt;https://codeberg.org/douglasparker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DraconicNEO&quot;&gt;https://codeberg.org/DraconicNEO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eNBeWe&quot;&gt;https://codeberg.org/eNBeWe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/esensar&quot;&gt;https://codeberg.org/esensar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fkooman&quot;&gt;https://codeberg.org/fkooman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flvffywvffy&quot;&gt;https://codeberg.org/flvffywvffy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fractalf&quot;&gt;https://codeberg.org/fractalf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/goddess&quot;&gt;https://codeberg.org/goddess&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GottemHams&quot;&gt;https://codeberg.org/GottemHams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwymor&quot;&gt;https://codeberg.org/gwymor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/halibut&quot;&gt;https://codeberg.org/halibut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hexaheximal&quot;&gt;https://codeberg.org/hexaheximal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/i9e1&quot;&gt;https://codeberg.org/i9e1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ika&quot;&gt;https://codeberg.org/ika&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/inference&quot;&gt;https://codeberg.org/inference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ivanhercaz&quot;&gt;https://codeberg.org/ivanhercaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jadedctrl&quot;&gt;https://codeberg.org/jadedctrl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jilen&quot;&gt;https://codeberg.org/jilen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jthvai&quot;&gt;https://codeberg.org/jthvai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kikocorreoso&quot;&gt;https://codeberg.org/kikocorreoso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Kladky&quot;&gt;https://codeberg.org/Kladky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KN4CK3R&quot;&gt;https://codeberg.org/KN4CK3R&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KOLANICH&quot;&gt;https://codeberg.org/KOLANICH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/krumelmonster&quot;&gt;https://codeberg.org/krumelmonster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lanodan&quot;&gt;https://codeberg.org/lanodan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ledyba&quot;&gt;https://codeberg.org/ledyba&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lhinderberger&quot;&gt;https://codeberg.org/lhinderberger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lime360&quot;&gt;https://codeberg.org/lime360&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltejur&quot;&gt;https://codeberg.org/maltejur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mathilde&quot;&gt;https://codeberg.org/mathilde&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mbateman&quot;&gt;https://codeberg.org/mbateman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meskobalazs&quot;&gt;https://codeberg.org/meskobalazs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/micash&quot;&gt;https://codeberg.org/micash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mjtimblin&quot;&gt;https://codeberg.org/mjtimblin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mokazemi&quot;&gt;https://codeberg.org/mokazemi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mondstern&quot;&gt;https://codeberg.org/mondstern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moralpanic&quot;&gt;https://codeberg.org/moralpanic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mormegil&quot;&gt;https://codeberg.org/Mormegil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nebras&quot;&gt;https://codeberg.org/nebras&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neuhalje&quot;&gt;https://codeberg.org/neuhalje&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nightm4re&quot;&gt;https://codeberg.org/nightm4re&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/noureddin&quot;&gt;https://codeberg.org/noureddin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nykula&quot;&gt;https://codeberg.org/nykula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oatbiscuits&quot;&gt;https://codeberg.org/oatbiscuits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PatchMixolydic&quot;&gt;https://codeberg.org/PatchMixolydic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PierreLannoy&quot;&gt;https://codeberg.org/PierreLannoy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/puzzle-it-nu&quot;&gt;https://codeberg.org/puzzle-it-nu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/qwerty287&quot;&gt;https://codeberg.org/qwerty287&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rmorettibr&quot;&gt;https://codeberg.org/rmorettibr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rohandebsarkar&quot;&gt;https://codeberg.org/rohandebsarkar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rpoovey&quot;&gt;https://codeberg.org/rpoovey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/salif&quot;&gt;https://codeberg.org/salif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Salt&quot;&gt;https://codeberg.org/Salt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/santalet&quot;&gt;https://codeberg.org/santalet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/seodisparate&quot;&gt;https://codeberg.org/seodisparate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/silverwind&quot;&gt;https://codeberg.org/silverwind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sininenkissa&quot;&gt;https://codeberg.org/sininenkissa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sinsky&quot;&gt;https://codeberg.org/sinsky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/skobkin&quot;&gt;https://codeberg.org/skobkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/slatian&quot;&gt;https://codeberg.org/slatian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Squel&quot;&gt;https://codeberg.org/Squel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thatonecoder&quot;&gt;https://codeberg.org/thatonecoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thefinn93&quot;&gt;https://codeberg.org/thefinn93&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tranzystorekk&quot;&gt;https://codeberg.org/tranzystorekk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxcoder&quot;&gt;https://codeberg.org/tuxcoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/VadZ&quot;&gt;https://codeberg.org/VadZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wangito33&quot;&gt;https://codeberg.org/wangito33&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Werenter&quot;&gt;https://codeberg.org/Werenter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wondercollective&quot;&gt;https://codeberg.org/wondercollective&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wuzzy&quot;&gt;https://codeberg.org/Wuzzy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeziruo&quot;&gt;https://codeberg.org/yeziruo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zareck&quot;&gt;https://codeberg.org/zareck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Zip&quot;&gt;https://codeberg.org/Zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.21.6-0</title><link>https://forgejo.org/2024-02-release-v1-21-6-0/</link><guid isPermaLink="true">https://forgejo.org/2024-02-release-v1-21-6-0/</guid><description>The Forgejo v1.21.6-0 release contains a security fix for Cross-site scripting (XSS) vulnerabilities. It enabled attackers to inject client-side scripts into web pages displayed to Forgejo visitors.</description><pubDate>Thu, 22 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.21.6-0&quot;&gt;Forgejo v1.21.6-0&lt;/a&gt; was released 22 February 2024.&lt;/p&gt;
&lt;p&gt;This release contains &lt;em&gt;a security fix&lt;/em&gt; related to &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;Cross-site scripting (XSS)&lt;/a&gt;
vulnerabilities that can be exploited by registered Forgejo users.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Cross-site scripting (XSS) vulnerability&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;Cross-site scripting (XSS)&lt;/a&gt; vulnerabilities
can be exploited by a registered Forgejo user.&lt;/p&gt;
&lt;p&gt;In some situations where a repository or user name contains HTML scripts, those values are not always properly escaped, thus leading to an XSS attack. For instance when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.codeberg.org/advanced/migrating-repos/&quot;&gt;Migrating a repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/docs/v1.21/user/wiki/&quot;&gt;Publishing content in the wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/docs/v1.21/user/push-to-create/&quot;&gt;Creating a repository on first push&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It allows the attacker to inject a
&lt;a href=&quot;https://en.wikipedia.org/wiki/Client-side_script&quot;&gt;client-side script&lt;/a&gt;
targeting visitors browsing a repository being migrated, the repository settings or the wiki. Note that the repository settings are only visible to repository admins.&lt;/p&gt;
&lt;h3&gt;Responsible disclosure to Gitea&lt;/h3&gt;
&lt;p&gt;On 22 January 2024, the Forgejo security team identified multiple
Cross-site scripting (XSS) vulnerabilities could be exploited by
registered Forgejo users, and the Gitea security team was notified. A
30-day embargo was requested, after which a patch to the v1.21 point
release could be published.&lt;/p&gt;
&lt;p&gt;On 14 February 2024, Gitea &lt;a href=&quot;https://github.com/go-gitea/gitea/pull/29165&quot;&gt;published a pull
request&lt;/a&gt; that fixes the
vulnerability, before the end of the requested embargo. It is embedded
in a large refactor and not labeled to be security related but to a
trained eye, this does catch attention.&lt;/p&gt;
&lt;p&gt;On 17 February 2024, the Gitea security team privately sent a patch
that fixes an additional XSS vulnerability.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo forks its own path forward</title><link>https://forgejo.org/2024-02-forking-forward/</link><guid isPermaLink="true">https://forgejo.org/2024-02-forking-forward/</guid><description>Forgejo started as a soft fork of Gitea, in reaction to governance changes within the project. Over time, it developed its own identity, adopted both development and governance practices - to ensure the stability, quality, and openness of the project - that made it more challenging to remain a soft fork. In early 2024, a decision was made to become a hard fork, and for Forgejo to forge its own path going forward. This post explains the consequences this decision will have.</description><pubDate>Thu, 15 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Since its &lt;a href=&quot;../2022-12-15-hello-forgejo/&quot;&gt;inception&lt;/a&gt;, Forgejo (a self-hosted git forge, like GitHub) has been a soft fork of Gitea. Upgrading to it was - and for the time being, remains to be - as simple as &lt;a href=&quot;../download/&quot;&gt;changing the URL from which the release is downloaded&lt;/a&gt;. Over time, the way Forgejo is governed and developed evolved. To be able to provide stable, secure, reliable releases, Forgejo requires a &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md&quot;&gt;reasonable effort made at writing tests&lt;/a&gt; for each change that goes into the code. This has worked out remarkably well, as it caught both regressions in imported code, and mistakes in proposed changes. Furthermore, Forgejo has accepted features and other changes that are not available in Gitea, and has &lt;a href=&quot;#the-hard-forking-process&quot;&gt;diverged&lt;/a&gt; in other ways already.&lt;/p&gt;
&lt;p&gt;Today, Forgejo has a healthy number of people contributing to its main mission:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;The community is in control, and ensures we develop to address community needs.&lt;/li&gt;
&lt;li&gt;We will help liberate software development from the shackles of proprietary tools.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;To continue living by that statement, a &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/58&quot;&gt;decision was made&lt;/a&gt; in early 2024 to become a hard fork. By doing so, Forgejo is no longer bound to Gitea, and can forge its own path going forward, allowing maintainers and contributors to reduce tech debt at a much higher pace, and implement changes - whether they&apos;re new features or bug fixes - that would otherwise have a high risk of conflicting with changes made in Gitea. Simply put, the governance and development models of Gitea and Forgejo diverged over time, and so did their goals. Becoming a hard fork is the culmination of that divergence.&lt;/p&gt;
&lt;h2&gt;The hard forking process&lt;/h2&gt;
&lt;p&gt;Forgejo has been, since its inception late 2022, a soft fork of Gitea which means it contains all of Gitea, both good and bad, with Forgejo having little control over what it is built on. However, some parts of Gitea were already &quot;hard-forked&quot; before:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Forgejo used &lt;a href=&quot;https://woodpecker-ci.org/&quot;&gt;Woodpecker&lt;/a&gt; first, then &lt;a href=&quot;../docs/v1.21/user/actions/&quot;&gt;Forgejo Actions&lt;/a&gt; as its continuous integration system.&lt;ul&gt;
&lt;li&gt;In addition, the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;forgejo-runner&lt;/a&gt; is also a hard fork.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Documentation has been &lt;a href=&quot;https://codeberg.org/forgejo/docs&quot;&gt;maintained independently&lt;/a&gt; for a good while now.&lt;/li&gt;
&lt;li&gt;Stable releases are a &lt;a href=&quot;../docs/v1.21/developer/workflow/#stable-branches&quot;&gt;hard fork&lt;/a&gt; since &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-1-0&quot;&gt;v1.20&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;More recently, &lt;a href=&quot;../docs/v1.21/developer/localization/&quot;&gt;localization&lt;/a&gt; has been moved from Crowdin to Weblate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of these steps were taken to liberate parts of the code base from proprietary solutions, to manage them with free software instead, and in the same process, make it simpler to manage Forgejo-specific changes. All while keeping the impact on the software itself minimal.&lt;/p&gt;
&lt;h2&gt;Consequences of becoming a hard fork&lt;/h2&gt;
&lt;p&gt;As of Forgejo v1.21, Forgejo contains all of Gitea, and that has the benefit of allowing Forgejo to be a drop-in replacement. With the decision to become a hard fork, this will no longer be guaranteed. It will remain possible to upgrade from the latest &lt;a href=&quot;https://github.com/go-gitea/gitea/releases/tag/v1.21.5&quot;&gt;Gitea version released&lt;/a&gt; at the time of the hard fork, but versions past that will not have such a guarantee.&lt;/p&gt;
&lt;p&gt;As such, if you were considering upgrading to Forgejo, we encourage you to do that sooner rather than later, because as the projects naturally diverge further, doing so will become ever harder. It will not happen overnight, it may not even happen soon, but eventually, Forgejo will stop being a drop-in replacement.&lt;/p&gt;
&lt;p&gt;The Forgejo API will strive to remain compatible with the Gitea API going forward, after the hard fork. Existing APIs at the time of the fork are public, and changing them is a breaking change, which has to be evaluated very carefully, and not done lightly. Future APIs should similarly be evaluated, and Forgejo will try to remain compatible with Gitea. However, Forgejo contributors shall also use their own judgement whether to implement an API or not, and how - with the previous goals in mind.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - January 2024</title><link>https://forgejo.org/2024-01-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2024-01-monthly-update/</guid><description>Forgejo may become a hard fork of Gitea; user research is on the way to figure out the scope of moderation in Forgejo instances; a new requirement for tests was added to the development workflow; the &quot;You pushed on branch&quot; user experience was improved; the migration of translations to Weblate began.</description><pubDate>Sun, 28 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;An &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/58&quot;&gt;agreement is discussed&lt;/a&gt; to make Forgejo a hard fork of Gitea.&lt;/li&gt;
&lt;li&gt;User research is on the way regarding the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/107&quot;&gt;(Scope of) moderation of Forgejo instances&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A new &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/51&quot;&gt;requirement to the development workflow&lt;/a&gt; was added to contain the technical debt.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/104&quot;&gt;migration of Forgejo translations&lt;/a&gt; to &lt;a href=&quot;https://translate.codeberg.org&quot;&gt;the Codeberg instance of Weblate&lt;/a&gt; is on the way.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The monthly report is meant to provide a high level view of what happened in Forgejo in the past month. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/!JpOtsqTARyyfkoizCU:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Forgejo&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo&quot;&gt;https://codeberg.org/forgejo/forgejo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notable improvements and bug fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Repository administrators can &lt;a href=&quot;https://forgejo.org/docs/v7.0/user/wiki/#activation-and-permissions&quot;&gt;allow anyone to edit the wiki&lt;/a&gt; in the repository Settings. (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2001&quot;&gt;#2001&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2222&quot;&gt;nuget api support serving package manifest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2216&quot;&gt;Fix false positive in database migration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2140&quot;&gt;Log SQL queries when the database return error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Instance administrators can enable &lt;a href=&quot;https://forgejo.org/docs/v7.0/user/readme-badges/&quot;&gt;repository badges&lt;/a&gt; in the &lt;a href=&quot;https://forgejo.org/docs/v7.0/admin/config-cheat-sheet/#badges-badges&quot;&gt;configuration file&lt;/a&gt;. This feature depends on a shield generator service such as shields.io, and is disabled by default. (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2070&quot;&gt;#2070&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1900&quot;&gt;Allow viewing the latest Action on the web&lt;/a&gt;: a tiny little convenience route that allows linking to the latest action of a repository. Useful for READMEs and CI badges.&lt;/li&gt;
&lt;li&gt;Forgejo now recognizes more &lt;a href=&quot;https://forgejo.org/docs/v7.0/user/language-detection/&quot;&gt;linguist attributes&lt;/a&gt;, making it possible to include documentation in the repository language statistics, for example. (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2088&quot;&gt;#2088&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Users who signed up, but have not activated their accounts yet, are now able to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1891&quot;&gt;change their email before activation&lt;/a&gt;. (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1891&quot;&gt;#1891&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &quot;You pushed on branch ....&quot; banner user experience was improved (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2141&quot;&gt;#2141&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2195&quot;&gt;#2195&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2196&quot;&gt;#2196&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=&amp;amp;type=all&amp;amp;sort=&amp;amp;state=closed&amp;amp;labels=&amp;amp;milestone=0&amp;amp;project=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;Read more&lt;/a&gt; in the pull requests.&lt;/p&gt;
&lt;h3&gt;In flight pull requests&lt;/h3&gt;
&lt;p&gt;Most &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&quot;&gt;pull requests&lt;/a&gt; are opened and closed within a week. But some of them take a longer time, either because they are more complex or because they are taken care of by volunteers who can only occasionally work on them in their free time. This is a list of those that were updated since the last monthly report. If they are of interest to you, reviewing the changes or providing solutions would be appreciated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2223&quot;&gt;Add initial layout support for right-to-left languages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2231&quot;&gt;Refactor webhook logic in preparation for custom webhook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;Federated repository stars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1746&quot;&gt;Add colorblind theme variants&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Documentation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;New section on &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/371&quot;&gt;how repo language detection works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New section on &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/358&quot;&gt;globally editable wikis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New setting &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/357/files&quot;&gt;[repository].DOWNLOAD_OR_CLONE_METHODS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;new section on &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/356&quot;&gt;README badges feature&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://forgejo.org/docs/v1.21/user/actions&quot;&gt;Forgejo Actions&lt;/a&gt; reference guide was significantly improved.
The &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/actions&quot;&gt;Forgejo Actions tests&lt;/a&gt; were refactored to capture the event payloads. For instance when a workflow is triggered from pushing a commit, the event will contain information about the repository, the SHA etc. The captured events are &lt;strong&gt;automatically used to &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/branch/main/.forgejo/workflows/actions.yml#L65-L82&quot;&gt;update the documentation&lt;/a&gt;&lt;/strong&gt;. The &lt;code&gt;event&lt;/code&gt; &lt;a href=&quot;https://forgejo.org/docs/v1.21/user/actions/#githubevent&quot;&gt;section of the Forgejo Actions documentation&lt;/a&gt; links to these examples and help figure out which fields are available depending on the type of event.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;(Scope of) Moderation of Forgejo instances&lt;/h2&gt;
&lt;p&gt;A discussion &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/107&quot;&gt;started about how to develop effective moderation mechanisms&lt;/a&gt; within Forgejo while maintaining means of dynamically reacting to changing problems. It aims at collecting feedback. How much is in the scope for Forgejo? What kinds of moderation actions do Forgejo admins need to perform? This kind of user research is instrumental to understand existing best practices in order to figure out what problems needs to be resolved first.&lt;/p&gt;
&lt;h2&gt;Reducing the technical debt&lt;/h2&gt;
&lt;p&gt;A discussion on &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/93&quot;&gt;defining expectations regarding tests in the development workflow&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/51&quot;&gt;concluded&lt;/a&gt; with a new requirement &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md&quot;&gt;in the development workflow&lt;/a&gt; by which:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;A reasonable effort has been made to test the change.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;When developers do not perform tests (either automated or manual) end users experience bugs and regressions that &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/103&quot;&gt;are much more time consuming&lt;/a&gt; to diagnose and resolve.&lt;/p&gt;
&lt;p&gt;Ideally Forgejo would have a hard commitment to only merge changes that are covered by automated tests. But there are many areas where the test infrastructure itself is still lacking (the web UI for instance) and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/100&quot;&gt;manual tests are to be documented&lt;/a&gt; instead.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/Cyborus/forgejo-api&quot;&gt;draft implementation of a Rust based Forgejo SDK&lt;/a&gt; started using the &lt;a href=&quot;https://code.forgejo.org/swagger.v1.json&quot;&gt;Swagger file&lt;/a&gt; to generate code instead of manually implementing each API endpoint. Because the Forgejo Swagger file is currently manually maintained and only has a handful of recently added &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-manual-testing/issues&quot;&gt;manual tests&lt;/a&gt; verifying it actually reflects the implementation, the author discovered inconsistencies that were fixed (see &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2182&quot;&gt;this PR for instance&lt;/a&gt;). When complete this SDK could be integrated in the Forgejo testsuite to verify the Swagger specification consistency and guard against regressions.&lt;/p&gt;
&lt;h2&gt;Federation&lt;/h2&gt;
&lt;p&gt;The pull request to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;federated stars&lt;/a&gt; made progress, replay attacks were analyzed and mitigated in k8s. Read &lt;a href=&quot;https://codeberg.org/meissa/forgejo/src/branch/forgejo-federated-star/docs/unsure-where-to-put/blog.md#2024-01-federated-staring-with-like-activity&quot;&gt;more in the activity summary&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The F3 reference implementation &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3&quot;&gt;was refactored&lt;/a&gt; and the old codebase &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3/-/tree/2023-main&quot;&gt;archived&lt;/a&gt;. Read more in the &lt;a href=&quot;https://forum.forgefriends.org/t/f3-monthly-update-january-2024/1007&quot;&gt;January 2024&lt;/a&gt; report. The F3 Forgejo driver &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/105&quot;&gt;refactor started&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/59&quot;&gt;federation implementation task list&lt;/a&gt; was updated.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;The Forgejo translations are depending on Gitea translations which are trapped in a proprietary service. A strategy was put in place to workaround the problem in 2022 and it worked fine until now, the overhead and problems were close to non-existent. Back then nobody knew Forgejo and establishing a brand new translation team would have been difficult but things are different now. There are significantly more people aware of what Forgejo is and willing to help.&lt;/p&gt;
&lt;p&gt;Plans &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/104&quot;&gt;were made&lt;/a&gt; to bootstrap a translation team on &lt;a href=&quot;https://translate.codeberg.org/&quot;&gt;Codeberg&apos;s Weblate instance&lt;/a&gt; and the implementation is well under way, with an initial localization team covering Arabic, Dutch, French, Russian, Hungarian, Greek and German. If you are fluent in another language and would like to help, please &lt;a href=&quot;https://forgejo.org/docs/v1.21/developer/localization/#joining-the-localization-team&quot;&gt;apply&lt;/a&gt; or join the &lt;a href=&quot;https://matrix.to/#/#forgejo-localization:matrix.org&quot;&gt;localization chatroom&lt;/a&gt; to figure out what it entails.&lt;/p&gt;
&lt;h2&gt;Releases&lt;/h2&gt;
&lt;p&gt;There has been &lt;a href=&quot;https://forgejo.org/releases/&quot;&gt;one minor security release&lt;/a&gt; in January 2024. Forgejo admins are encouraged to &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements&quot;&gt;subscribe to security announcement&lt;/a&gt; so they can better plan their upgrades.&lt;/p&gt;
&lt;p&gt;Codeberg &lt;a href=&quot;https://blog.codeberg.org/letter-from-codeberg-looking-into-the-new-year.html&quot;&gt;suffered a DDoS attack&lt;/a&gt; that brought it down during more than 24h. Forgejo&apos;s own infrastructure was not impacted because it is hosted elsewhere and could have been used as an alternative to download releases. Only it did not have a mirror of the Forgejo releases. A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/98&quot;&gt;daily scheduled action&lt;/a&gt; was created and the releases are now also available at &lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo/&quot;&gt;https://code.forgejo.org/forgejo/forgejo/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo&quot;&gt;https://code.forgejo.org/forgejo/forgejo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/releases/&quot;&gt;https://forgejo.org/releases/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/security-announcements&quot;&gt;https://codeberg.org/forgejo/security-announcements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;End-to-end tests&lt;/h2&gt;
&lt;p&gt;Forgejo &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;end-to-end tests&lt;/a&gt; require running an actual Forgejo instance.&lt;/p&gt;
&lt;p&gt;They were extended to include &lt;strong&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/pulls/71&quot;&gt;Alpine packages&lt;/a&gt;&lt;/strong&gt;, verifying a package built out of an Alpine container image can actually be installed.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/docs/v1.21/user/packages/alpine&quot;&gt;https://forgejo.org/docs/v1.21/user/packages/alpine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;https://code.forgejo.org/forgejo/end-to-end&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Governance&lt;/h2&gt;
&lt;h3&gt;Hard fork&lt;/h3&gt;
&lt;p&gt;A discussion started on the &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/96&quot;&gt;opportunity for Forgejo to become a hard fork of Gitea&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Over the past year a number of components have been developed in Forgejo independently of Gitea, they are already hard forks. The documentation, the release process, end-to-end tests, the Forgejo Runner etc. It even happened within the Forgejo codebase. For instance, the &lt;a href=&quot;https://forgejo.org/docs/v1.21/user/blocking-user/&quot;&gt;user blocking feature&lt;/a&gt; is independent from Gitea. It has its own database tables and migrations while being part of the same binary. However Forgejo still cherry-picks commits on top of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestones?state=closed&amp;amp;q=furnace&quot;&gt;Gitea codebase on a weekly basis&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The discussion led to an &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/58&quot;&gt;agreement proposal&lt;/a&gt; where Forgejo community members expressed concerns that are addressed in accordance of the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/DECISION-MAKING.md&quot;&gt;Forgejo decision making process&lt;/a&gt;. If an agreement is reached, the previous logic will be reversed and &lt;strong&gt;commits from Gitea will be cherry-picked on top of the Forgejo codebase&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The discussions related to this agreement are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/103&quot;&gt;Testing strategies and containing regressions&lt;/a&gt; to support the main benefit of a hard fork which is to shield Forgejo from endemic regressions introduced in Gitea due to insufficient testing.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/108&quot;&gt;Integration of the Gitea changes inside Forgejo&lt;/a&gt; should the agreement pass.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/99&quot;&gt;Explicitly encourage contributions to Forgejo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/103&quot;&gt;Gitea is Open Core&lt;/a&gt; explains why, with links for fact checking.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/92&quot;&gt;cloud.gitea.com shared account&lt;/a&gt; shows some of the proprietary features of Gitea Cloud and the non-Free Software version of Gitea that it runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unless new concerns emerge, the agreement may be finalized in February.&lt;/p&gt;
&lt;h3&gt;Moderation&lt;/h3&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MODERATION-PROCESS.md&quot;&gt;moderation action&lt;/a&gt; was carried out to put an end to &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/53&quot;&gt;ad-hominem attacks and harassment&lt;/a&gt;: the person responsible for this behavior was banned for a period of two years. They have since created half a dozen accounts in an attempt to circumvent the ban but all content was removed or redacted within 24h.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/governance&quot;&gt;https://codeberg.org/forgejo/governance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/0ko&quot;&gt;https://codeberg.org/0ko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/6543&quot;&gt;https://codeberg.org/6543&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adz&quot;&gt;https://codeberg.org/adz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/asandikci&quot;&gt;https://codeberg.org/asandikci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/banaanihillo&quot;&gt;https://codeberg.org/banaanihillo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/basebuilder&quot;&gt;https://codeberg.org/basebuilder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CanisHelix&quot;&gt;https://codeberg.org/CanisHelix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Crown0815&quot;&gt;https://codeberg.org/Crown0815&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cwpute&quot;&gt;https://codeberg.org/Cwpute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fl1tzi&quot;&gt;https://codeberg.org/Fl1tzi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwymor&quot;&gt;https://codeberg.org/gwymor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/halibut&quot;&gt;https://codeberg.org/halibut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/houkime&quot;&gt;https://codeberg.org/houkime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hwpplayer1&quot;&gt;https://codeberg.org/hwpplayer1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jfinkhaeuser&quot;&gt;https://codeberg.org/jfinkhaeuser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jornfranke&quot;&gt;https://codeberg.org/jornfranke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kaffeeknecht&quot;&gt;https://codeberg.org/kaffeeknecht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KOLANICH&quot;&gt;https://codeberg.org/KOLANICH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lukawaay&quot;&gt;https://codeberg.org/lukawaay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/macfanpl&quot;&gt;https://codeberg.org/macfanpl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mmarif&quot;&gt;https://codeberg.org/mmarif&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mokazemi&quot;&gt;https://codeberg.org/mokazemi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moralpanic&quot;&gt;https://codeberg.org/moralpanic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neuhalje&quot;&gt;https://codeberg.org/neuhalje&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nevarr0&quot;&gt;https://codeberg.org/nevarr0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oatbiscuits&quot;&gt;https://codeberg.org/oatbiscuits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/OdinVex&quot;&gt;https://codeberg.org/OdinVex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/panos&quot;&gt;https://codeberg.org/panos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rdwz&quot;&gt;https://codeberg.org/rdwz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Salt&quot;&gt;https://codeberg.org/Salt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/santalet&quot;&gt;https://codeberg.org/santalet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/spla&quot;&gt;https://codeberg.org/spla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/swaggboi&quot;&gt;https://codeberg.org/swaggboi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thepaperpilot&quot;&gt;https://codeberg.org/thepaperpilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxcoder&quot;&gt;https://codeberg.org/tuxcoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Visne&quot;&gt;https://codeberg.org/Visne&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/voltagex&quot;&gt;https://codeberg.org/voltagex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wackbyte&quot;&gt;https://codeberg.org/wackbyte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/walpo&quot;&gt;https://codeberg.org/walpo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Werenter&quot;&gt;https://codeberg.org/Werenter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolftune&quot;&gt;https://codeberg.org/wolftune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zareck&quot;&gt;https://codeberg.org/zareck&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - December 2023</title><link>https://forgejo.org/2023-12-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-12-monthly-update/</guid><description>Codeberg migrated to Forgejo v1.21, a long awaited forge comparison page was published, the Forgejo Helm Chart reached GA, end-to-end tests proved useful to fix Forgejo Actions bugs and two new machines were added to the infrastructure.</description><pubDate>Sat, 30 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;Codeberg migrated to Forgejo v1.21 and suffered a downtime related to performance issues. Although it was quickly recovered, it shows work is still needed to improve scaling and stability.&lt;/li&gt;
&lt;li&gt;A new &lt;a href=&quot;https://forgejo.org/compare/&quot;&gt;forge comparison&lt;/a&gt; page is available. Gitea turned Open Core this month and it articulates why Forgejo is a safe heaven for admins who want to escape this trap.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm&quot;&gt;Forgejo Helm Chart&lt;/a&gt; reached general availability with version 1.0.0.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;Forgejo end-to-end testing&lt;/a&gt; can now be triggered from Forgejo pull requests by setting a label. For instance, they were &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/src/commit/d3bd171b6edeab58ea5cbb547a2b1af9c63196dd/actions/example-cron/run.sh#L3-L16&quot;&gt;used to verify&lt;/a&gt; a bug fix in how &lt;a href=&quot;https://forgejo.org/docs/v1.21/user/actions/#onschedule&quot;&gt;scheduled actions&lt;/a&gt; work by automatically running an actual Forgejo instance and a runner.&lt;/li&gt;
&lt;li&gt;Two new machines were &lt;a href=&quot;https://forgejo.org/docs/next/developer/infrastructure/#hetzner0203&quot;&gt;added to the Forgejo infrastructure&lt;/a&gt; to service &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt;, an instance dedicated to Forgejo development.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As Forgejo grows, the format of this monthly report changed to distribute the workload among all Forgejo contributors. The summary is replaced with a bullet list of the highlights and the sections are written by the Forgejo contributors who have been active on a given subject. If you would like to help, please get in touch in &lt;a href=&quot;https://matrix.to/#/!JpOtsqTARyyfkoizCU:matrix.org&quot;&gt;the chatroom&lt;/a&gt; or participate in the &lt;a href=&quot;https://codeberg.org/forgejo/discussions&quot;&gt;ongoing discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Forgejo&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo&quot;&gt;https://codeberg.org/forgejo/forgejo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notable improvements or bug fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1891&quot;&gt;Allow changing the email address before activation&lt;/a&gt;: In case someone accidentally registered with the wrong email address (made a typo, for example), with this PR, they will be able to change the email address, and request a new activation mail to be sent. This requires logging in, which &lt;em&gt;is&lt;/em&gt; possible, even while the account isn&apos;t activated yet. Previously, this required help from an instance administrator, now it can be self-serviced.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1900&quot;&gt;Allow viewing the latest Action on the web&lt;/a&gt;: a tiny little convenience route that allows linking to the latest action of a repository. Useful for READMEs and CI badges.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;In flight pull requests&lt;/h3&gt;
&lt;p&gt;Most &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&quot;&gt;pull requests&lt;/a&gt; are opened and closed within a week. But some of them take a longer time, either because they are more complex or because they are taken care of by volunteers who can only occasionally work on them in their free time. This is a list of those that were updated since the last monthly report. If they are of interest to you, reviewing the changes or providing solutions would be appreciated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1866&quot;&gt;Actions: Link to Workflow in View&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1992&quot;&gt;pulls: &quot;Edit File&quot; button in &quot;Files Changed&quot; tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;Federated repository stars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1746&quot;&gt;Add colorblind theme variants&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;The pull request to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;federated stars&lt;/a&gt; can now be tested manually and &lt;a href=&quot;https://codeberg.org/meissa/forgejo/src/branch/forgejo-federated-star/docs/unsure-where-to-put/blog.md#2023-12-federated-staring-open-for-test&quot;&gt;an activity summary was published&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3/-/merge_requests/90/commits&quot;&gt;F3 refactor&lt;/a&gt;
is making daily progress.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/59&quot;&gt;federation implementation task list&lt;/a&gt; was updated.&lt;/p&gt;
&lt;h3&gt;Releases&lt;/h3&gt;
&lt;p&gt;Forgejo &lt;a href=&quot;https://forgejo.org/docs/latest/admin/upgrade/#release-life-cycle&quot;&gt;maintains &lt;strong&gt;two&lt;/strong&gt; stable releases&lt;/a&gt; at any given time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stable (latest major version): receives full support, bugfixes and security fixes.&lt;/li&gt;
&lt;li&gt;Old Stable (previous major version): receives only critical security support.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There has been &lt;a href=&quot;https://forgejo.org/releases/&quot;&gt;one release a week&lt;/a&gt; in the past month, an unusually high frequency explained by a series of security vulnerabilities. They are labeled with a different color &lt;strong&gt;Stable&lt;/strong&gt; and &lt;strong&gt;Oldstable&lt;/strong&gt; to make it easier for the Forgejo admin to figure out which one applies to their instance.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-49946&quot;&gt;CVE-2023-49946&lt;/a&gt; was created a week after the publication of the &lt;a href=&quot;https://forgejo.org/2023-11-release-v1-20-5-1/&quot;&gt;Forgejo v1.20.5-1 release that fixes this critical vulnerability&lt;/a&gt;. As a reminder the Forgejo v1.21 stable release already includes the associated security fixes and was never vulnerable.&lt;/p&gt;
&lt;p&gt;Forgejo admins are encouraged to &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements&quot;&gt;subscribe to security announcement&lt;/a&gt; so they can better plan their upgrades.&lt;/p&gt;
&lt;p&gt;References&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/releases/&quot;&gt;https://forgejo.org/releases/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/security-announcements&quot;&gt;https://codeberg.org/forgejo/security-announcements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;End-to-end testing&lt;/h2&gt;
&lt;p&gt;Forgejo end-to-end tests require running an actual instance and were moved to &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;a dedicated repository&lt;/a&gt; which requires a significant number of manual steps to run them on a given Forgejo pull request. It was made simpler by triggering them with the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=159443&quot;&gt;&lt;code&gt;run-end-to-end-tests&lt;/code&gt;&lt;/a&gt; label. For instance, in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/2015&quot;&gt;this Forgejo pull request&lt;/a&gt; setting the label triggered &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/actions/runs/391/jobs/1&quot;&gt;this workflow in the end-to-end&lt;/a&gt; repository, using a binary &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/c98322ed9c877a9bf717f22c4035d3fc45a5ea54/.forgejo/workflows/cascade-setup-end-to-end.yml&quot;&gt;created with the pull request&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/actions/cascading-pr/&quot;&gt;https://code.forgejo.org/actions/cascading-pr/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;https://code.forgejo.org/forgejo/end-to-end&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Forgejo helm&lt;/h2&gt;
&lt;p&gt;Forgejo Helm Chart reached GA version 1.0.0 and is basically HA ready thanks to upstream Gitea Chart.&lt;/p&gt;
&lt;p&gt;The only remaining issue is that all cron jobs are run on all instances because there&apos;s no leader elections yet.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm&quot;&gt;https://codeberg.org/forgejo-contrib/forgejo-helm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo-contrib/forgejo-renovate/&quot;&gt;https://code.forgejo.org/forgejo-contrib/forgejo-renovate/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Codeberg&lt;/h2&gt;
&lt;p&gt;Codeberg migrated to Forgejo v1.21 and despite preliminary testing and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/1783&quot;&gt;curated list of potential regressions&lt;/a&gt;, a performance issue prevented it from running. It was quickly diagnosed and fixed but the root problem remains: there is a lack of performance tests in Forgejo. That could be mitigated if there were other Forgejo (or Gitea) instances running at the same scale (~100,000 users and projects, publicly available) as they would also run into the same problems. But in the past years the vast majority of performance issues were discovered in the context of Codeberg, which strongly suggests it is the largest instance in existence.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/Codeberg/Community/issues/1356&quot;&gt;priority list&lt;/a&gt; has been established so Forgejo contributors can quickly figure out which problems deserve their attention.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Codeberg/Community&quot;&gt;https://codeberg.org/Codeberg/Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Codeberg/Community/issues/1356&quot;&gt;https://codeberg.org/Codeberg/Community/issues/1356&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Forgejo runner&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#3-3-0&quot;&gt;Forgejo runner 3.3.0&lt;/a&gt; was published and is now IPv6 capable. Unfortunately there is &lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/issues/19&quot;&gt;a bug in Debian LXC support&lt;/a&gt; that limits the scope of tests it can support.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers&quot;&gt;https://code.forgejo.org/forgejo/lxc-helpers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;https://code.forgejo.org/forgejo/runner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Governance&lt;/h2&gt;
&lt;h3&gt;Mergers team&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#contributors&quot;&gt;Contributors&lt;/a&gt; team has no permissions on &quot;Code&quot; which prevents members from merging pull requests although they have write permissions on &quot;PullRequests&quot; for the Forgejo repository. There is not much scrutiny to enter the contributors team because it bears almost no risk to the integrity of the Forgejo project. Being given permission to write the repository is a different matter. The new &quot;Mergers&quot; team is created &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/46&quot;&gt;and requires a formal application process&lt;/a&gt;. However light, it will make a difference that matters in terms of trust and commitment.&lt;/p&gt;
&lt;h3&gt;Moderation&lt;/h3&gt;
&lt;p&gt;Two &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MODERATION-PROCESS.md&quot;&gt;moderation actions&lt;/a&gt; were carried out: one regarding an &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/45&quot;&gt;ad-hominem attack&lt;/a&gt; and another regarding the publication of &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/49&quot;&gt;private information&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/governance&quot;&gt;https://codeberg.org/forgejo/governance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Professional services&lt;/h2&gt;
&lt;p&gt;Forgejo, just like any other Free Software can be the base of commercial activity from service providers independent from the project itself. Forgejo exists under the umbrella of the Codeberg e.V. non profit which does not provide professional services so there is no competition and will never be.&lt;/p&gt;
&lt;p&gt;Even if to address a handful of requests per year, it is convenient to have a place where people in need of professional services can meet service providers with the will and the skills to meet their needs. Here are some similar places in other Free Software projects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drupal &lt;a href=&quot;https://www.drupal.org/drupal-services&quot;&gt;https://www.drupal.org/drupal-services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenStack &lt;a href=&quot;https://www.openstack.org/marketplace/consulting/&quot;&gt;https://www.openstack.org/marketplace/consulting/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OSD &lt;a href=&quot;https://discourse.opensourcedesign.net/t/posting-jobs-read-this-first/3416&quot;&gt;https://discourse.opensourcedesign.net/t/posting-jobs-read-this-first/3416&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/47&quot;&gt;decided&lt;/a&gt; to create a kind of job board which was bootstrapped as a &lt;a href=&quot;https://codeberg.org/forgejo/professional-services&quot;&gt;dedicated issue tracker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/professional-services&quot;&gt;https://codeberg.org/forgejo/professional-services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hardware infrastructure&lt;/h2&gt;
&lt;p&gt;Two new machines were &lt;a href=&quot;https://forgejo.org/docs/next/developer/infrastructure/#hetzner0203&quot;&gt;added to the Forgejo infrastructure&lt;/a&gt; and are now hosting &lt;code&gt;code.forgejo.org&lt;/code&gt; that was previously in an OpenStack virtual machine. It is faster (10 times more bandwidth) and also is IPv6 capable. The LXC containers are setup and maintained using &lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/&quot;&gt;lxc-helpers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A LXC container with extended capabilities required to run a nested k8s cluster was setup on an dedicated hardware for better isolation. Forgejo runners are installed for both &lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers&quot;&gt;lxc-helpers&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo-contrib/forgejo-helm&quot;&gt;forgejo-helm&lt;/a&gt; so they can &lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/src/branch/main/.forgejo/workflows/test.yml#L13&quot;&gt;run workflows that depend on k8s&lt;/a&gt;. For instance, it helped detect regressions with the Forgejo Helm chart prior to version 1.0.0.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;next.forgejo.org&lt;/code&gt; instance that is running the development branch of Forgejo (updated weekly) is now also hosted on this hardware. It was reset entirely on that occasion and displays a prominent reminder that there is no guarantee that any data will persist. It is only for experimental purposes.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers&quot;&gt;https://code.forgejo.org/forgejo/lxc-helpers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/docs/next/developer/next-forgejo-org/&quot;&gt;https://forgejo.org/docs/next/developer/next-forgejo-org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgejo.org/docs/next/developer/infrastructure/#hetzner0203&quot;&gt;https://forgejo.org/docs/next/developer/infrastructure/#hetzner0203&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;OCI mirrors&lt;/h2&gt;
&lt;p&gt;Container images hosted at &lt;a href=&quot;https://hub.docker.com/&quot;&gt;https://hub.docker.com/&lt;/a&gt; are subject to rate
limiting which can be disrupting, for instance when the CI is used
intensively by multiple contributors.&lt;/p&gt;
&lt;p&gt;Some of the most commonly used container images used by Forgejo were
manually mirrored in a &lt;a href=&quot;https://code.forgejo.org/oci/-/packages&quot;&gt;dedicated
organization&lt;/a&gt; to partially
resolve that problem. Updating these images should be done
automatically but there still is no script to do so.&lt;/p&gt;
&lt;p&gt;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/oci/-/packages&quot;&gt;https://code.forgejo.org/oci/-/packages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/6543&quot;&gt;https://codeberg.org/6543&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adrinux&quot;&gt;https://codeberg.org/adrinux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/adz&quot;&gt;https://codeberg.org/adz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/algernon&quot;&gt;https://codeberg.org/algernon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/APoniatowski&quot;&gt;https://codeberg.org/APoniatowski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Aqa-Ib&quot;&gt;https://codeberg.org/Aqa-Ib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/asandikci&quot;&gt;https://codeberg.org/asandikci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ashimokawa&quot;&gt;https://codeberg.org/ashimokawa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cs137&quot;&gt;https://codeberg.org/Cs137&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dejan&quot;&gt;https://codeberg.org/dejan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/delgh1&quot;&gt;https://codeberg.org/delgh1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/foxy&quot;&gt;https://codeberg.org/foxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Freso&quot;&gt;https://codeberg.org/Freso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/halibut&quot;&gt;https://codeberg.org/halibut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/HexagonCDN&quot;&gt;https://codeberg.org/HexagonCDN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jfinkhaeuser&quot;&gt;https://codeberg.org/jfinkhaeuser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/joeroe&quot;&gt;https://codeberg.org/joeroe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jornfranke&quot;&gt;https://codeberg.org/jornfranke&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jthvai&quot;&gt;https://codeberg.org/jthvai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KN4CK3R&quot;&gt;https://codeberg.org/KN4CK3R&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lmaotrigine&quot;&gt;https://codeberg.org/lmaotrigine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/luca-pellegrini&quot;&gt;https://codeberg.org/luca-pellegrini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/macfanpl&quot;&gt;https://codeberg.org/macfanpl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Miraha&quot;&gt;https://codeberg.org/Miraha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oelmekki&quot;&gt;https://codeberg.org/oelmekki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sachaz&quot;&gt;https://codeberg.org/sachaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/schwarze&quot;&gt;https://codeberg.org/schwarze&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/sdolan99&quot;&gt;https://codeberg.org/sdolan99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Septem9er&quot;&gt;https://codeberg.org/Septem9er&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/teutat3s&quot;&gt;https://codeberg.org/teutat3s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/twann&quot;&gt;https://codeberg.org/twann&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Weebull&quot;&gt;https://codeberg.org/Weebull&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wild-Turtles&quot;&gt;https://codeberg.org/Wild-Turtles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wolcen&quot;&gt;https://codeberg.org/wolcen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/woofman420&quot;&gt;https://codeberg.org/woofman420&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Xinayder&quot;&gt;https://codeberg.org/Xinayder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xyhhx&quot;&gt;https://codeberg.org/xyhhx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zareck&quot;&gt;https://codeberg.org/zareck&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.21.2-1</title><link>https://forgejo.org/2023-12-release-v1-21-2-1/</link><guid isPermaLink="true">https://forgejo.org/2023-12-release-v1-21-2-1/</guid><description>The Forgejo v1.21.2-1 release contains an additional security fix related to permissions enforcement of API endpoints.</description><pubDate>Tue, 12 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.21.2-1&quot;&gt;Forgejo v1.21.2-1&lt;/a&gt; was released 12 December 2023.&lt;/p&gt;
&lt;p&gt;This release contains &lt;em&gt;a security fix&lt;/em&gt; related to permissions enforcement of web endpoints.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;The project page of private users is publicly visible&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/v1.21/user/project/&quot;&gt;project page&lt;/a&gt; of a
private user was missing a permission check and was visible
publicly. The other pages (packages, repositories, etc.) of this user
or even its existence are not visible publicly.&lt;/p&gt;
&lt;h3&gt;Reminder of responsible disclosure&lt;/h3&gt;
&lt;p&gt;On 11 December 2023 the project page vulnerability was &lt;a href=&quot;https://github.com/go-gitea/gitea/pull/28423&quot;&gt;revealed publicly&lt;/a&gt;
in contradiction with the
&lt;a href=&quot;https://github.com/go-gitea/gitea/blob/763938e889c233e82a1a046010b9d332abaa833f/SECURITY.md#reporting-a-vulnerability&quot;&gt;Gitea&lt;/a&gt; and
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING.md&quot;&gt;Forgejo&lt;/a&gt; security policies
as well as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coordinated_vulnerability_disclosure&quot;&gt;general principles of responsible disclosure&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This unfortunate incident forced the immediate preparation of this
Forgejo patch release. With no advance warning it only allowed for limited testing
and there is a non negligible risk of a regression.&lt;/p&gt;
&lt;p&gt;In such a situation the Forgejo admins and users are suffering the
consequences, either because they are left unnecessarily exposed to
publicly known vulnerabilities or because their instance may run into
regressions due to insufficient preparation time and testing.&lt;/p&gt;
&lt;p&gt;If you discover a new vulnerability, you are &lt;strong&gt;urged to not reveal it
publicly&lt;/strong&gt; but to &lt;a href=&quot;https://forgejo.org/.well-known/security.txt&quot;&gt;send an encrypted email&lt;/a&gt; to &lt;a href=&quot;mailto:security@forgejo.org&quot;&gt;security@forgejo.org&lt;/a&gt; so
this situation does not happen again.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - November 2023</title><link>https://forgejo.org/2023-11-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-11-monthly-update/</guid><description>Forgejo is one year old and just published v1.21 its fourth major release. Developed in the interest of the general public it grew to become more secure, include more features while staying true to its commitment to only develop Free Software. Your help will make a difference and you are kindly invited to join the Forgejo contributors who work daily to implement federation.</description><pubDate>Thu, 30 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Forgejo was &lt;a href=&quot;https://forgejo.org/2022-12-15-hello-forgejo/&quot;&gt;created in October 2022&lt;/a&gt; after a for profit company took over the Gitea project. In the beginning they were almost identical, except for the name and the color. But in the past year, this difference in governance led to choices that made Forgejo significantly and durably different from Gitea.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better security&lt;/strong&gt;. Forgejo focuses on identifying and fixing security vulnerabilities as soon as they are discovered. Gitea is always notified in advance via encrypted channels (e.g. &lt;a href=&quot;https://forgejo.org/2023-11-release-v1-20-5-1/&quot;&gt;Forgejo v1.20.5-1&lt;/a&gt; or &lt;a href=&quot;https://forgejo.org/2023-10-release-v1-20-5-0/&quot;&gt;Forgejo v1.20.5-0&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More features&lt;/strong&gt;. Forgejo includes all of Gitea features and integrates new one as soon as they are available. It is a 100% compatible drop-in replacement with additional features, &lt;a href=&quot;https://forgejo.org/docs/v1.21/user/blocking-user/&quot;&gt;self moderation&lt;/a&gt; being the first one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better stability&lt;/strong&gt;. Forgejo relies on &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/&quot;&gt;end-to-end&lt;/a&gt; and upgrade tests. The upgrade tests were introduced to address an &lt;a href=&quot;https://forgejo.org/2023-08-release-v1-20-3-0/&quot;&gt;instability caused by a regression in the storage settings&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since its inception Forgejo has been strongly committed to provide forge federation. This long term work &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/59&quot;&gt;keeps contributors busy daily&lt;/a&gt; and it will still be a while before it is complete. Your help will make a difference and you are kindly invited to &lt;a href=&quot;https://matrix.to/#/#forgejo-development:matrix.org&quot;&gt;join the team&lt;/a&gt;. Your work will not help build a startup chasing unicorns, it will benefit the general public and yourself. You will only use Free Software as Forgejo is developed with Forgejo on &lt;a href=&quot;https://codeberg.org&quot;&gt;Codeberg&lt;/a&gt; with a CI and releases powered by Forgejo Actions.&lt;/p&gt;
&lt;h2&gt;Development&lt;/h2&gt;
&lt;h3&gt;v1.21 release&lt;/h3&gt;
&lt;p&gt;After eight release candidates over eight weeks, the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-21-1-0&quot;&gt;Forgejo v1.21 release&lt;/a&gt;
was published and the &lt;a href=&quot;https://forgejo.org/2023-11-release-v1211-0/&quot;&gt;companion blog post&lt;/a&gt; provides a summary of the work it includes.&lt;/p&gt;
&lt;h3&gt;In flight pull requests&lt;/h3&gt;
&lt;p&gt;Most &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&quot;&gt;pull requests&lt;/a&gt; are opened and closed within a week. But some of them take a longer time, either because they are more complex or because they are taken care of by volunteers who can only occasionally work on them in their free time. This is a list of those that were updated since the last monthly report. If they are of interest to you, reviewing the changes or providing solutions would be appreciated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1790&quot;&gt;Avoid conflicts of issue and PR numbers in GitLab migration&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1841&quot;&gt;Mock HTTP calls in GitLab migration unit test &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1746&quot;&gt;Add colorblind theme variants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;Federated repository stars&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;End to end tests&lt;/h3&gt;
&lt;p&gt;Forgejo contributors developed end to end tests which require running actual instances and realistic use cases. The proved particularly useful to fix and debug the &lt;a href=&quot;https://forgejo.org/2023-08-release-v1-20-3-0/#fixing-the-risk-of-data-loss-related-to-storage-sections&quot;&gt;regressions related to storage settings&lt;/a&gt; and verifying the workflows sent to the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; succeed.&lt;/p&gt;
&lt;p&gt;There were all moved into a &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end/&quot;&gt;dedicated repository&lt;/a&gt; where they can conveniently be run and developed rather than being scattered in the Forgejo repository itself or the &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo&quot;&gt;setup-forgejo&lt;/a&gt; action.&lt;/p&gt;
&lt;h3&gt;Experimental releases&lt;/h3&gt;
&lt;p&gt;Starting 25 November 2023, test releases including the latest developments &lt;a href=&quot;https://forgejo.org/docs/v1.21/developer/release/#experimental-release-process&quot;&gt;will be published&lt;/a&gt; on a regular basis, usually every week. They will be used to run &lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt;. It is not recommended to use them in production.&lt;/p&gt;
&lt;h3&gt;Testing requirements&lt;/h3&gt;
&lt;p&gt;As a rule changes introduced in Forgejo are associated with tests that verify they work. Without such tests they are prone to regressions over time and more difficult to review. However, it is sometime challenging to create a new test when the underlying codebase lacks the basic infrastructure to do so. It is the case, for instance, for the JavaScript parts of the frontend or more generally user interface changes in Forgejo. As an exception, some pull requests will be merged without tests and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?labels=167348&quot;&gt;tagged as such&lt;/a&gt; when they can be contributed back to the main author of the codebase and not burden Forgejo with the associated technical debt.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;A new pull request was open to implement &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1680&quot;&gt;federated stars&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/meissa/forgejo/src/commit/d6c49675438fe5d5f84364e081ab1cb60ca42d75/docs/unsure-where-to-put/blog.md&quot;&gt;an activity summary was published&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3/-/merge_requests/90/commits&quot;&gt;F3 refactor&lt;/a&gt;
is making daily progress.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/59&quot;&gt;task list&lt;/a&gt; created a year ago to track federation work is now updated monthly.&lt;/p&gt;
&lt;h2&gt;Forgejo Actions&lt;/h2&gt;
&lt;p&gt;With the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#320&quot;&gt;3.2.0&lt;/a&gt; release of the Forgejo runner, the &lt;a href=&quot;https://forgejo.org/docs/v1.21/admin/actions/#lxc&quot;&gt;LXC backend&lt;/a&gt; was improved and can now be configured with capabilities to run k8s. It &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/55#issuecomment-3332&quot;&gt;unblocked the work&lt;/a&gt; started a few months ago to verify a helm chart using Forgejo can run in a workflow.&lt;/p&gt;
&lt;p&gt;Groundwork for &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/issues/119&quot;&gt;IPv6 support&lt;/a&gt; is done and needs testing before it can be released.&lt;/p&gt;
&lt;h2&gt;Security releases&lt;/h2&gt;
&lt;p&gt;Late October, the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#security&quot;&gt;Forgejo security team&lt;/a&gt; discovered critical vulnerabilities and worked on fixes that were published as part of Forgejo v1.21 and &lt;a href=&quot;https://forgejo.org/2023-11-release-v1-20-5-1/&quot;&gt;backported to Forgejo v1.20.5-1&lt;/a&gt; after a 30-day embargo. To better prepare for such upgrades, Forgejo admins can now watch &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/issues&quot;&gt;a repository&lt;/a&gt; dedicated to security announcements or subscribe to the &lt;a href=&quot;https://codeberg.org/forgejo/security-announcements.rss&quot;&gt;associated RSS feed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The severity of the vulnerabilities motivated security team members to &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/86&quot;&gt;write a post-mortem&lt;/a&gt; and ask for input and ideas in an open discussion.&lt;/p&gt;
&lt;h2&gt;User research&lt;/h2&gt;
&lt;p&gt;Although it is largely agreed that &lt;a href=&quot;https://jdittrich.github.io/userNeedResearchBook/&quot;&gt;user research&lt;/a&gt; is one of the areas where Forgejo needs more work, it has not seen significant progress in the past year. The effort has resumed, starting with &lt;a href=&quot;https://codeberg.org/forgejo/user-research/issues/20&quot;&gt;sorting issues into categories&lt;/a&gt;. The goal is to better understand Forgejo users.&lt;/p&gt;
&lt;h2&gt;Hardware infrastructure&lt;/h2&gt;
&lt;p&gt;As &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt; keeps growing, &lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/262&quot;&gt;new hardware is being provisioned&lt;/a&gt; so it can move from the cloud and have more disk space, mostly.&lt;/p&gt;
&lt;h2&gt;Governance and communication&lt;/h2&gt;
&lt;p&gt;The moderation team is now composed of &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#moderation&quot;&gt;two members&lt;/a&gt;. A Forgejo contributor also &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/41&quot;&gt;applied&lt;/a&gt; to the security team.&lt;/p&gt;
&lt;p&gt;A few &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/44&quot;&gt;new members&lt;/a&gt; were added to the contributors team and it &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#contributors&quot;&gt;does not require a formal application process&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/abyxcos&quot;&gt;https://codeberg.org/abyxcos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/arkdae&quot;&gt;https://codeberg.org/arkdae&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/asandikci&quot;&gt;https://codeberg.org/asandikci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bodsch&quot;&gt;https://codeberg.org/bodsch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cbn8krgm&quot;&gt;https://codeberg.org/cbn8krgm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jfinkhaeuser&quot;&gt;https://codeberg.org/jfinkhaeuser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jwildeboer&quot;&gt;https://codeberg.org/jwildeboer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Korbs&quot;&gt;https://codeberg.org/Korbs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltejur&quot;&gt;https://codeberg.org/maltejur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meaz&quot;&gt;https://codeberg.org/meaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/moralpanic&quot;&gt;https://codeberg.org/moralpanic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rome-user&quot;&gt;https://codeberg.org/rome-user&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/s3lph&quot;&gt;https://codeberg.org/s3lph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/stevenroose&quot;&gt;https://codeberg.org/stevenroose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thepaperpilot&quot;&gt;https://codeberg.org/thepaperpilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/w8emv&quot;&gt;https://codeberg.org/w8emv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xyhhx&quot;&gt;https://codeberg.org/xyhhx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yoctozepto&quot;&gt;https://codeberg.org/yoctozepto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zareck&quot;&gt;https://codeberg.org/zareck&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.20.6-0</title><link>https://forgejo.org/2023-11-release-v1-20-6-0/</link><guid isPermaLink="true">https://forgejo.org/2023-11-release-v1-20-6-0/</guid><description>The Forgejo v1.20.6-0 release contains an additional security fix related to permissions enforcement of API endpoints.</description><pubDate>Tue, 28 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.20.6-0&quot;&gt;Forgejo v1.20.6-0&lt;/a&gt; was released 28 November 2023.&lt;/p&gt;
&lt;p&gt;This release contains &lt;em&gt;a security fix&lt;/em&gt; related to permissions enforcement of API endpoints.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;API and web endpoint vulnerable to manually crafted identifiers&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;https://forgejo.org/2023-11-release-v1-20-5-1/#api-and-web-endpoint-vulnerable-to-manually-crafted-identifiers&quot;&gt;Forgejo v1.20.5-1 blog post&lt;/a&gt; for
a detailed explanation on this kind of vulnerability.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;get the public key of a user&lt;/li&gt;
&lt;li&gt;get a release or a release attachment&lt;/li&gt;
&lt;li&gt;get OAuth2 applications (except for the secret)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixes were written for the vulnerable endpoints but not thoroughly tested.&lt;/p&gt;
&lt;h3&gt;Reminder of responsible disclosure&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.20.5-1&quot;&gt;Forgejo v1.20.5-1&lt;/a&gt; was released 25 November 2023
after &lt;a href=&quot;https://forgejo.org/2023-11-release-v1-20-5-1/#responsible-disclosure-to-gitea&quot;&gt;a 30-day embargo&lt;/a&gt;
that gave enough time to Gogs, Gitea and Forgejo
to prepare and publish a patch release on 25 November 2025.&lt;/p&gt;
&lt;p&gt;The complete list of identified vulnerabilities was communicated by
the Forgejo security team to Gitea on 5 November 2023 and the final
version of the patch fixing all of them was sent on 24 November
2023, via encrypted email. In addition, two PRs (for
&lt;a href=&quot;https://github.com/go-gitea/gitea/pull/28211&quot;&gt;v1.20&lt;/a&gt; and
&lt;a href=&quot;https://github.com/go-gitea/gitea/pull/28212&quot;&gt;v1.21&lt;/a&gt;) were sent to
Gitea on 25 November 2023 prior to the announcement of the Forgejo
release to help fast track a stable point release.&lt;/p&gt;
&lt;p&gt;On 25 November 2023, shortly after the release, additional vulnerabilities were &lt;a href=&quot;https://github.com/go-gitea/gitea/pull/28213&quot;&gt;revealed
publicly&lt;/a&gt; in contradiction with the
&lt;a href=&quot;https://github.com/go-gitea/gitea/blob/763938e889c233e82a1a046010b9d332abaa833f/SECURITY.md#reporting-a-vulnerability&quot;&gt;Gitea&lt;/a&gt; and
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING.md&quot;&gt;Forgejo&lt;/a&gt; security policies
as well as the &lt;a href=&quot;https://en.wikipedia.org/wiki/Coordinated_vulnerability_disclosure&quot;&gt;general principles of responsible disclosure&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This unfortunate incident forced the immediate preparation of this
Forgejo patch release. With no advance warning it only allowed for limited testing
and there is a non negligible risk of a regression.&lt;/p&gt;
&lt;p&gt;In such a situation the Forgejo admins and users are suffering the
consequences, either because they are left unnecessarily exposed to
publicly known vulnerabilities or because their instance may run into
regressions due to insufficient preparation time and testing.&lt;/p&gt;
&lt;p&gt;If you discover a new vulnerability, you are &lt;strong&gt;urged to not reveal it
publicly&lt;/strong&gt; but to &lt;a href=&quot;https://forgejo.org/.well-known/security.txt&quot;&gt;send an encrypted email&lt;/a&gt; to &lt;a href=&quot;mailto:security@forgejo.org&quot;&gt;security@forgejo.org&lt;/a&gt; so
this situation does not happen again.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v1.21 is available</title><link>https://forgejo.org/2023-11-release-v1211-0/</link><guid isPermaLink="true">https://forgejo.org/2023-11-release-v1211-0/</guid><description>Forgejo v1.21 is available and comes with significant improvements to Forgejo Actions and the Forgejo runner. It also brings better user blocking, many documentation improvements, a shortcut button to open new PRs, mail notifications when new users are created and more. As always, make sure to carefully read the breaking changes from the release notes and make a full backup before upgrading.</description><pubDate>Sun, 26 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/download/&quot;&gt;Forgejo v1.21.1-0&lt;/a&gt; is here and you will find the most interesting changes it introduces below. Before upgrading it is &lt;em&gt;strongly recommended&lt;/em&gt; to make a full backup as explained in the &lt;a href=&quot;/docs/v1.21/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;em&gt;all breaking changes&lt;/em&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-21-1-0&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or in the &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;chat room&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.21/user/actions&quot;&gt;Actions&lt;/a&gt;&lt;/strong&gt;: server side, secrets can be managed via the API and the &lt;code&gt;pull_request_target&lt;/code&gt; makes it possible to securely run workflows on pull requests, even when they need to access secrets. A major version of the Forgejo runner was &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#320&quot;&gt;also published&lt;/a&gt; and it is now capable of &lt;a href=&quot;/docs/v1.21/admin/actions/#labels-and-runs-on&quot;&gt;running actions on Docker, LXC or in a shell&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.21/user/blocking-user&quot;&gt;Blocking a user&lt;/a&gt;&lt;/strong&gt;: repository transfers originating from the blocked user are canceled and the blocked user is removed from the list of collaborators on repositories owned by the user doing the blocking. This self-moderation feature introduced in v1.20 is most useful on large Forgejo instances and was since deployed on Codeberg. It has been used a few times by the Forgejo moderation team in cases that did not require admin privileges.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.21&quot;&gt;Documentation&lt;/a&gt;&lt;/strong&gt;: new sections were added to the &lt;a href=&quot;/docs/v1.21/developer/&quot;&gt;developer guide&lt;/a&gt; such as the &lt;a href=&quot;/docs/v1.21/developer/customization/&quot;&gt;user interface customization&lt;/a&gt;, which is considered an internal detail and requires intimate knowledge of the codebase to be maintained. Every new feature listed in the release notes was matched with an update in the documentation because it is intended to become an exhaustive reference. The &lt;a href=&quot;https://codeberg.org/forgejo/docs/&quot;&gt;documentation repository&lt;/a&gt; was split out of the website repository and restructured to facilitate the &lt;a href=&quot;https://codeberg.org/forgejo/docs/src/branch/next/README.md#contributing&quot;&gt;maintenance and contribution workflow&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.21/user/pull-requests-and-git-flow/#create-a-pull-request&quot;&gt;Shortcut to create a PR&lt;/a&gt;:&lt;/strong&gt; a button is automatically shown if you recently pushed to branch and will open a PR with the default branch as a base.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;New user mail notification&lt;/strong&gt;: When a Forgejo instance has open registration, it is occasionally subject to spam accounts. With the &lt;code&gt;SEND_NOTIFICATION_EMAIL_ON_NEW_USER = true&lt;/code&gt; setting, the Forgejo admin will receive a mail when a new account is created and can immediately act on it, instead of discovering a dozen of spam bots a much later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Additional syntax highlighting&lt;/strong&gt;: for &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/765&quot;&gt;Smali&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/772&quot;&gt;DHCP&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/776&quot;&gt;WebGPU Shading Language&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/commit/4779f9035a3aaea3ec650f0923657c12e12dd35a&quot;&gt;AutoHotkey&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/commit/029798b351baa9c3d0dd5ec16e87ab98486d843c&quot;&gt;AutoIt&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/commit/e422a6286fdc61393deb09afd270293eb590d023&quot;&gt;tal (uxntal)&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/794&quot;&gt;ArangoDB Query Language (AQL)&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/796&quot;&gt;BIND DNS Zone&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/802&quot;&gt;Odin&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/804&quot;&gt;Sourcepawn&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/813&quot;&gt;CPP&lt;/a&gt;, &lt;a href=&quot;https://github.com/alecthomas/chroma/pull/815&quot;&gt;C&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Additional language detection&lt;/strong&gt;: &lt;a href=&quot;https://github.com/atom-haskell/language-haskell&quot;&gt;Bluespec BH&lt;/a&gt;, &lt;a href=&quot;https://github.com/terrastruct/d2-vscode&quot;&gt;D2&lt;/a&gt;, &lt;a href=&quot;https://github.com/golang/vscode-go&quot;&gt;Go Workspace&lt;/a&gt;, &lt;a href=&quot;https://github.com/nishtahir/language-kotlin&quot;&gt;Gradle Kotlin DSL&lt;/a&gt;, &lt;a href=&quot;https://github.com/Alhadis/language-etc&quot;&gt;Hosts File&lt;/a&gt;, &lt;a href=&quot;https://github.com/KrazIvan/LOLCODE-grammar-vscode&quot;&gt;LOLCODE&lt;/a&gt;, &lt;a href=&quot;https://github.com/wooorm/markdown-tm-language&quot;&gt;MDX&lt;/a&gt;, &lt;a href=&quot;https://github.com/BobDotCom/Nasal.tmbundle&quot;&gt;Nasal&lt;/a&gt;, &lt;a href=&quot;https://github.com/hustcer/nu-grammar&quot;&gt;Nushell&lt;/a&gt;, &lt;a href=&quot;https://github.com/kadena-io/pact-atom&quot;&gt;Pact&lt;/a&gt;, &lt;a href=&quot;https://github.com/soutaro/vscode-rbs-syntax&quot;&gt;RBS&lt;/a&gt;, &lt;a href=&quot;https://github.com/textmate/rez.tmbundle&quot;&gt;Rez&lt;/a&gt;, &lt;a href=&quot;https://github.com/textmate/sweave.tmbundle&quot;&gt;Sweave&lt;/a&gt;, &lt;a href=&quot;https://github.com/adamint/tlv-vscode&quot;&gt;TL-Verilog&lt;/a&gt;, &lt;a href=&quot;https://github.com/michidk/typst-grammar&quot;&gt;Typst&lt;/a&gt;, &lt;a href=&quot;https://github.com/broadinstitute/wdl-sublime-syntax-highlighter&quot;&gt;WDL&lt;/a&gt;, &lt;a href=&quot;https://github.com/wgsl-analyzer/wgsl-analyzer&quot;&gt;WGSL&lt;/a&gt;, &lt;a href=&quot;https://github.com/bytecodealliance/vscode-wit&quot;&gt;WebAssembly Interface Type&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-21-1-0&quot;&gt;in the Forgejo v1.21.1-0 release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Forgejo Actions&lt;/h3&gt;
&lt;p&gt;Forgejo is only as stable and robust as the test infrastructure that verifies it works. Forgejo Actions is not just a feature, it is an integral part of what makes Forgejo whole. With v1.21 this self-sustainable ecosystem grew with more components such as &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;end to end testing&lt;/a&gt; and upgrade tests running older versions of Forgejo. Each repository is independent but it is not isolated from the others. Developers do not need to manually keep them in sync, they are &lt;a href=&quot;https://code.forgejo.org/actions/cascading-pr/#forgejo-dependencies&quot;&gt;bound together with tests&lt;/a&gt;. As more components are added, these tests will be the cement keeping them together, allowing developers to focus on what matters.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Server side the most notable improvements are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;/docs/v1.21/user/actions/#onpull_request_target&quot;&gt;&lt;code&gt;pull_request_target&lt;/code&gt; event&lt;/a&gt; is implemented and can securely access secrets because it runs using the workflows from the base branch instead of the pull request.&lt;/li&gt;
&lt;li&gt;The API can now be used to manage secrets for &lt;a href=&quot;https://code.forgejo.org/api/swagger/#/user/updateUserSecret&quot;&gt;users&lt;/a&gt;, &lt;a href=&quot;https://code.forgejo.org/api/swagger/#/organization/orgListActionsSecrets&quot;&gt;organizations&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/api/swagger/#/repository/updateRepoSecret&quot;&gt;repositories&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Registration tokens can &lt;a href=&quot;/docs/v1.21/admin/actions/#registration&quot;&gt;register multiple runners&lt;/a&gt; instead of a single one.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/v1.21/user/actions/#variables&quot;&gt;Variables can be used in addition to secrets&lt;/a&gt; to configure workflows when there is no need for secrecy.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/v1.21/user/actions/#onschedule&quot;&gt;Recurring actions similar to cron jobs&lt;/a&gt; can be defined in the main branch.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/v1.21/user/actions/#artifacts&quot;&gt;Uploaded artifacts can be automatically cleaned up&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When a new commit is pushed to a branch, the workflows triggered by previous commits are &lt;a href=&quot;/docs/v1.21/user/actions/#auto-cancelation-of-workflows&quot;&gt;automatically canceled&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;It is now possible to &lt;a href=&quot;/docs/v1.21/user/actions/#artifacts&quot;&gt;upload multiple artifacts&lt;/a&gt; instead of a single one.&lt;/li&gt;
&lt;li&gt;The labels can be communicated to Forgejo from the runner when they connect &lt;a href=&quot;/docs/v1.21/admin/actions/#registration&quot;&gt;instead of just during registration&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;/docs/v1.21/user/actions&quot;&gt;Forgejo Actions&lt;/a&gt; is however &lt;strong&gt;not yet production ready&lt;/strong&gt;, for the reasons explained in the &lt;a href=&quot;/2023-07-release-v1201-0/#forgejo-actions&quot;&gt;Forgejo v1.20&lt;/a&gt; blog post.&lt;/p&gt;
&lt;p&gt;Client side, the newer version of the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#320&quot;&gt;Forgejo runner&lt;/a&gt; that is responsible for running the workflows now comes in two flavors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v3.2.0&quot;&gt;binary release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/-/packages/container/runner/3.2.0&quot;&gt;container image&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is &lt;a href=&quot;https://code.forgejo.org/forgejo/end-to-end&quot;&gt;tested&lt;/a&gt; with itself to verify
a new version does not introduce a trivial regression that would break Forgejo, using an &lt;a href=&quot;https://code.forgejo.org/actions/cascading-pr/&quot;&gt;action to cascade
pull requests between repositories&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Read more about Forgejo actions &lt;a href=&quot;/docs/v1.21/user/actions/&quot;&gt;in the user guide&lt;/a&gt; and &lt;a href=&quot;/docs/v1.21/admin/actions/&quot;&gt;in the administrator guide&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;What is unique to Forgejo?&lt;/h3&gt;
&lt;p&gt;Until recently all Forgejo commits could have been merged into Gitea
overnight. But as of October 2023 Gitea &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/67&quot;&gt;requires a copyright
assignment&lt;/a&gt; in addition to the MIT license. It
means that the most significant contributions such as
&lt;a href=&quot;/docs/v1.21/user/blocking-user&quot;&gt;blocking a user&lt;/a&gt; will not be merged into Gitea
and are unique to Forgejo v1.21 and later.&lt;/p&gt;
&lt;p&gt;Forgejo continues to include all of Gitea and guarantees a 100%
drop-in replacement for Gitea admins. No action is required, it is
enough to replace the Gitea binary or the container image with the
equivalent Forgejo release and restart.&lt;/p&gt;
&lt;p&gt;Such an upgrade may be motivated to benefit from security
fixes that only exist in Forgejo, such as the
&lt;a href=&quot;/2023-10-release-v1-20-5-0/#long-term-authentication-token&quot;&gt;Long-term authentication&lt;/a&gt;
vulnerability which is fixed since Forgejo v1.20.5-0 and will also be in Gitea v1.22 early 2024.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;Does &lt;code&gt;Forgejo&lt;/code&gt; support federation? Not yet. Was there progress? Yes.&lt;/p&gt;
&lt;p&gt;The monthly reports &lt;a href=&quot;/tag/report/&quot;&gt;have details&lt;/a&gt; on
these progress and the &lt;a href=&quot;https://forgefriends.org/blog/2023/06/21/2023-06-state-forge-federation/&quot;&gt;State of the Forge Federation: 2023
edition&lt;/a&gt;
published in June 2023 explains how Forgejo fits in the big picture.&lt;/p&gt;
&lt;p&gt;Forges have existed for over twenty years and none of them has achieved
data portability let alone federation. Forgejo is yet to celebrate the publication of
its first release and it will take it a little time to get there.&lt;/p&gt;
&lt;h3&gt;Get Forgejo v1.21&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-21-1-0&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-21-1-0&quot;&gt;the breaking changes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.21.1-0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.21.1-0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.21&quot;&gt;&lt;code&gt;1.21&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;1.21.x&lt;/code&gt; point release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v1.21/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade. It also covers upgrading from Gitea, as far back as version 1.2.0.
Forgejo includes all of Gitea v1.21.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.20.5-1</title><link>https://forgejo.org/2023-11-release-v1-20-5-1/</link><guid isPermaLink="true">https://forgejo.org/2023-11-release-v1-20-5-1/</guid><description>The Forgejo v1.20.5-1 release contains critical security fixes related to permissions enforcement of API endpoints.</description><pubDate>Sat, 25 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.20.5-1&quot;&gt;Forgejo v1.20.5-1&lt;/a&gt; was released 25 November 2023.&lt;/p&gt;
&lt;p&gt;This release contains &lt;em&gt;critical security fixes&lt;/em&gt; related to permissions enforcement of API endpoints.&lt;/p&gt;
&lt;p&gt;This release also contains bug fixes, as detailed &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-5-1&quot;&gt;in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;API and web endpoint vulnerable to manually crafted identifiers&lt;/h3&gt;
&lt;p&gt;Some API endpoints, such as &lt;a href=&quot;https://code.forgejo.org/api/swagger#/issue/issuePostCommentReaction&quot;&gt;adding a reaction to a comment&lt;/a&gt;, rely on an identifier unique to an object (a comment in this example). There are similar cases for web endpoints which are used by the Forgejo web interface.&lt;/p&gt;
&lt;p&gt;The permissions required for the user performing the action on the
repository are properly enforced. But a check was missing to ensure
that the object (a comment in the example) also belongs to the
repository the permissions are checked against. Without this check it
is possible both to perform destructive actions and to access
information in repositories unrelated to the request, including
private ones.&lt;/p&gt;
&lt;p&gt;API and web endpoints have been analysed, and those that were missing such a verification can be exploited by a malicious actor to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;delete releases and tags&lt;/li&gt;
&lt;li&gt;delete and modify issues or pull requests comments&lt;/li&gt;
&lt;li&gt;reveal the content of issues or pull requests comments from private repositories&lt;/li&gt;
&lt;li&gt;perform other non-destructive actions such as creating issues, moving pinned issues, or obtaining deploy public keys&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The vulnerable endpoints were fixed and tests written to verify the fix is effective.&lt;/p&gt;
&lt;h3&gt;docker login and 2FA&lt;/h3&gt;
&lt;p&gt;When using &lt;code&gt;docker login&lt;/code&gt; to authenticate against a Forgejo instance
using basic authentication, there needs to be an additional
verification if 2FA is activated for the user. That verification was
missing for the API endpoint used by &lt;code&gt;docker login&lt;/code&gt;, thus bypassing
2FA.&lt;/p&gt;
&lt;h3&gt;Responsible disclosure to Gitea&lt;/h3&gt;
&lt;p&gt;On 25 October 2023 the Forgejo security team identified that multiple
API and web endpoints were not protected against manually crafted
identifiers, and the Gitea security team was notified. A 30-day
embargo was requested, after which a patch to the v1.20 point release
could be published. Further research from both Gitea and Forgejo teams
in the following days revealed more vulnerabilities. Initial fixes and
tests verifying they are effective were exchanged, but after their
last email on 31 October 2023 the Gitea security team stopped
responding. Given the severity of the vulnerability, the Forgejo
security team asked again for feedback on 16 November 2023, but did
not get any reply. Having exhausted all options for cooperation, the
Forgejo security team completed the security fix on its own. The
resulting fix which is published in this release was sent to the Gitea
security team encrypted in its final version on 24 November 2023. At
the time of publication, there was still no response from the Gitea
security team.&lt;/p&gt;
&lt;h3&gt;Responsible disclosure to Gogs&lt;/h3&gt;
&lt;p&gt;The Gogs developer was notified of the vulnerability on 25 October 2023. There is no encrypted channel and only a terse but unambiguous
message was sent. There has been no response.&lt;/p&gt;
&lt;h3&gt;Forgejo will give advance warning of security releases&lt;/h3&gt;
&lt;p&gt;Similar to what is done when a Go release contains a security fix,
Forgejo will now publish advance warning of security releases. They
will not reveal the details of the vulnerability but will allow
Forgejo admins to plan ahead and better secure their instance. Anyone
can watch to the
&lt;a href=&quot;https://codeberg.org/forgejo/security-announcements/&quot;&gt;dedicated tracker&lt;/a&gt; or
&lt;a href=&quot;https://codeberg.org/forgejo/security-announcements.rss&quot;&gt;subscribe to the RSS feed&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Gogs and Gitea upgrades to Forgejo&lt;/h3&gt;
&lt;p&gt;Gitea admins are reminded that Forgejo is a 100% compatible drop-in replacement for Gitea. It is enough to replace the Gitea binary or the container image with Forgejo and restart. No configuration modification is necessary. They are encouraged to choose that option to get this security fix as soon as possible.&lt;/p&gt;
&lt;p&gt;In the absence of a security fix for Gogs, it is also possible to try and upgrade Gogs to Forgejo. Note however that such an upgrade will require manual intervention and configuration changes because the upgrade path has not been tested.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - October 2023</title><link>https://forgejo.org/2023-10-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-10-monthly-update/</guid><description>A security issue related to Long-term Authentication was fixed for Forgejo v1.21 and backported to Forgejo v1.20.5-0. Four release candidates were published for Forgejo v1.21 and the documentation updated to cover the new functionalities. A service request was published to develop new functionalities for the benefit of German schools. Solutions were also identified for bootstrapping a fully Free Software hosting provider including Forgejo.</description><pubDate>Mon, 23 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A security issue identified earlier this year was fixed for Forgejo
v1.21 and backported to Forgejo v1.20. It was non trivial and
involved a 90-day embargo as well as a database upgrade. Four release
candidates for Forgejo v1.21 were published in the &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases&quot;&gt;experimental
organization&lt;/a&gt;. The
improvements it contains for Forgejo Actions were documented and are
now associated with end to end testing to guard against future
regressions.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/28&quot;&gt;service
request&lt;/a&gt;
originating from German schools in need of additional Forgejo
features was published. There are currently no known freelance or
company providing Forgejo expertise and discussions happened about
what to do with such requests. Solutions were also identified for
bootstrapping a fully Free Software hosting provider including Forgejo.&lt;/p&gt;
&lt;h2&gt;Development&lt;/h2&gt;
&lt;h3&gt;Refactor of Long-term Authentication&lt;/h3&gt;
&lt;p&gt;When a user logs into Forgejo, they can click the &lt;strong&gt;Remember This Device&lt;/strong&gt; checkbox and their browser will store a &lt;strong&gt;Long-term authentication&lt;/strong&gt; token provided by the server, in a cookie that will allow them to stay logged in for a number of days as defined by the &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/config-cheat-sheet/#security-security&quot;&gt;&lt;code&gt;LOGIN_REMEMBER_DAYS&lt;/code&gt;&lt;/a&gt; setting.&lt;/p&gt;
&lt;p&gt;Given a copy of the Forgejo database, a &lt;strong&gt;Long-term authentication&lt;/strong&gt; token could be constructed for any user and used to impersonate them. Such a token did not expire &lt;code&gt;LOGIN_REMEMBER_DAYS&lt;/code&gt; days after it was created and remained valid for as long as users did not change their password.&lt;/p&gt;
&lt;p&gt;This security issue does not require brute force and was the most significant discovered this year.
A fix was published by the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#security&quot;&gt;Forgejo security team&lt;/a&gt; on &lt;a href=&quot;https://forgejo.org/2023-10-release-v1-20-5-0/&quot;&gt;6 October
2023&lt;/a&gt; after a &lt;a href=&quot;https://forgejo.org/2023-10-release-v1-20-5-0/#responsible-disclosure-to-gitea&quot;&gt;90-day
embargo&lt;/a&gt; and
was backported to &lt;a href=&quot;https://forgejo.org/2023-10-release-v1-20-5-0/&quot;&gt;Forgejo
v1.20.5-0&lt;/a&gt; the same day.&lt;/p&gt;
&lt;h3&gt;v1.21 release candidates&lt;/h3&gt;
&lt;p&gt;The Forgejo v1.21 release candidate cycle is coming to an end, with
&lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases&quot;&gt;four
releases&lt;/a&gt;,
published in the &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases&quot;&gt;experimental
organization&lt;/a&gt;. They
are now used daily on the &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt; and
&lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt; instances and all the release blockers
discovered so far were fixed.&lt;/p&gt;
&lt;p&gt;Tests were conducted on a simulation of a Codeberg upgrade to verify
the database migration was fast enough, despite some operations that
were potentially expensive on large tables.&lt;/p&gt;
&lt;p&gt;End-to-end testing for Forgejo v1.20 is part of the
&lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo&quot;&gt;setup-forgejo&lt;/a&gt; action
testsuite. It was extended to &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo/src/branch/main/.forgejo/workflows/integration.yml#L14-L17&quot;&gt;include the Forgejo v1.21 release candidates&lt;/a&gt; and new tests for the Forgejo Actions features that did not exist in Forgejo v1.20.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://forgeflux.org/&quot;&gt;ForgeFlux&lt;/a&gt; is working towards providing
compliance testing for the forge federation ecosystem using a tool called &lt;a href=&quot;https://docs.forgeflux.org/ftest/introduction&quot;&gt;&quot;ftest&quot;&lt;/a&gt;. The tool ran successfully against Forgejo and produced &lt;a href=&quot;https://docs.forgeflux.org/example/ftest/results/targets/forgejo/results&quot;&gt;this compliance report&lt;/a&gt; proving the correctness of Forgejo&apos;s work-in-progress implementation.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://f3.forgefriends.org/&quot;&gt;F3&lt;/a&gt; Forgejo driver is on pause
while the
&lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3&quot;&gt;gof3&lt;/a&gt; package
is undergoing a &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3/-/merge_requests/90/commits&quot;&gt;complete
refactor&lt;/a&gt;. The
API will be roughly the same and allow to copy data from one forge to another.&lt;/p&gt;
&lt;h2&gt;Forgejo service providers&lt;/h2&gt;
&lt;p&gt;Forgejo exists under the umbrella of Codeberg which is a non-profit
organization. But it can be used by freelancers or for-profit
companies to generate an income. Just like there are many service
providers using Git which exists under the umbrella of &lt;a href=&quot;https://sfconservancy.org/projects/current/&quot;&gt;Software
Freedom Conservancy&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Professional services&lt;/h3&gt;
&lt;p&gt;When someone needs a Forgejo instance of their own but does not have the
resources to maintain and improve upon it, they should be able to find
help, for a fee. For instance the German state of
&lt;a href=&quot;https://en.wikipedia.org/wiki/Baden-W%C3%BCrttemberg&quot;&gt;Baden-Württemberg&lt;/a&gt;
needs &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/28&quot;&gt;additional
features&lt;/a&gt; to
deploy Forgejo in German schools next year. The new development could
then be contributed back to Forgejo and be available for all.&lt;/p&gt;
&lt;h3&gt;Hosting provider&lt;/h3&gt;
&lt;p&gt;If someone is looking for a hosting provider where they can rent their
own Forgejo instance and Forgejo runner without being bothered by
upgrades, they currently have nowhere to go.&lt;/p&gt;
&lt;p&gt;The easiest solution would be that Forgejo is part of the application
portfolio of an existing hosting providers. But none of them is powered
by Free Software and the Forgejo instance would be trapped: migrating
to another hosting provider would require a significant effort.&lt;/p&gt;
&lt;p&gt;There are two fully Free Software stacks providing &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/72&quot;&gt;a turnkey solution
to setup a hosting service
provider&lt;/a&gt;. One of
them is unmaintained and &lt;a href=&quot;https://fossbilling.org/&quot;&gt;the other&lt;/a&gt; needs a
Forgejo driver.&lt;/p&gt;
&lt;h2&gt;Documentation&lt;/h2&gt;
&lt;p&gt;The bulk of the documentation updates relate to the new Forgejo v1.21
features of Forgejo Action in the
&lt;a href=&quot;https://forgejo.org/docs/v1.21/user/actions/&quot;&gt;user&lt;/a&gt; and
&lt;a href=&quot;https://forgejo.org/docs/v1.21/user/actions/&quot;&gt;admin&lt;/a&gt; sections. They
are associated with &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo/src/branch/main/testdata&quot;&gt;examples and
tests&lt;/a&gt;
that help understand how they actually work.&lt;/p&gt;
&lt;p&gt;A round of updates was also done by harvesting documentation improvements
&lt;a href=&quot;https://codeberg.org/forgejo/docs/commit/89c24509f03ea3fe1cbea866180dee8019e7e48f&quot;&gt;from Codeberg&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/docs/commit/0b81e66c45cc6a7a24306a948707e8ee01361876&quot;&gt;from
Gitea&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Forgejo Actions&lt;/h2&gt;
&lt;h3&gt;Runner 3.0.1&lt;/h3&gt;
&lt;p&gt;A number of actions
(e.g. &lt;a href=&quot;https://code.forgejo.org/actions/checkout/src/tag/v4&quot;&gt;checkout@v4&lt;/a&gt;)
now depend on node 20 which was only recently supported by
&lt;a href=&quot;https://code.forgejo.org/forgejo/act&quot;&gt;ACT&lt;/a&gt; on top of which the
&lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; is based. The &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/RELEASE-NOTES.md#301&quot;&gt;Forgejo runner
3.0.1&lt;/a&gt;
contains that upgrade.&lt;/p&gt;
&lt;h3&gt;The cascading-pr action&lt;/h3&gt;
&lt;p&gt;Forgejo is not a mono-repository project. It is made up of several software projects that
have their own release cycle in multiple repositories. Synchronizing
them is sometimes challenging, as demonstrated by the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/tag/v3.0.0/README.md#hacking&quot;&gt;rather
involved&lt;/a&gt;
test instructions of the Forgejo runner.&lt;/p&gt;
&lt;p&gt;To simplify the development workflow a new action was
developed. &lt;a href=&quot;https://code.forgejo.org/actions/cascading-pr/&quot;&gt;cascading-pr&lt;/a&gt;
can be used in the workflow of a repository to verify that a proposed
change won&apos;t break anything when a dependent software upgrades.
For instance, when a pull request is opened in the Forgejo runner,
a &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/cascade-setup-forgejo.yml&quot;&gt;workflow&lt;/a&gt;
will also &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo/pulls/68/files&quot;&gt;open a pull request&lt;/a&gt; in setup-forgejo.&lt;/p&gt;
&lt;p&gt;If the CI passes on setup-forgejo, it is an additional confirmation
that the proposed change in Forgejo runner does not contain a
regression that would break setup-forgejo once released.&lt;/p&gt;
&lt;h2&gt;Governance and communication&lt;/h2&gt;
&lt;h3&gt;Gitea copyright assignment&lt;/h3&gt;
&lt;p&gt;Code contributions to Gitea now &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/67&quot;&gt;require a copyright
assignment&lt;/a&gt;. It
does not impact the most trivial bug fixes because they are not subject
to copyright. But it means that it is not enough for a contribution to
be released under the MIT license, all copyright headers must also be
removed.&lt;/p&gt;
&lt;p&gt;This new requirement was discovered when the Forgejo security team
contributed the fix for the Long-term Authentication security issue
explained above. It contained files with a &lt;code&gt;Copyright Forgejo&lt;/code&gt; header
in addition to the &lt;code&gt;Copyright Gitea&lt;/code&gt; header and was blocked for that
reason. The author of the patch agreed under protest to remove their
copyright headers for the sake of Gitea admin security.&lt;/p&gt;
&lt;h3&gt;FOSDEM 2024&lt;/h3&gt;
&lt;p&gt;Plans are made to organize a &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/65&quot;&gt;Forgejo and Codeberg
presence&lt;/a&gt; at
&lt;a href=&quot;https://fosdem.org/2024/&quot;&gt;FOSDEM 2024&lt;/a&gt;. If you would like to
participate, feel free to reach out in the &lt;a href=&quot;https://matrix.to/#/#forgejo-development:matrix.org&quot;&gt;development
chatroom&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Moderation&lt;/h3&gt;
&lt;p&gt;The moderation team currently has just one person, which is
problematic when they are involved in a moderation action. A new
member &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/35&quot;&gt;proposed their
participation&lt;/a&gt; to
remedy this.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/BradBot1&quot;&gt;https://codeberg.org/BradBot1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buhtz&quot;&gt;https://codeberg.org/buhtz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DanielGibson&quot;&gt;https://codeberg.org/DanielGibson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dikey0ficial&quot;&gt;https://codeberg.org/dikey0ficial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ell1e&quot;&gt;https://codeberg.org/ell1e&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fasterthanlime&quot;&gt;https://codeberg.org/fasterthanlime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fluzz&quot;&gt;https://codeberg.org/fluzz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gmem&quot;&gt;https://codeberg.org/gmem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grisha&quot;&gt;https://codeberg.org/grisha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hazy&quot;&gt;https://codeberg.org/hazy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KOLANICH&quot;&gt;https://codeberg.org/KOLANICH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/leana8959&quot;&gt;https://codeberg.org/leana8959&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lm41&quot;&gt;https://codeberg.org/lm41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/magicfelix&quot;&gt;https://codeberg.org/magicfelix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maltejur&quot;&gt;https://codeberg.org/maltejur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mikaela&quot;&gt;https://codeberg.org/Mikaela&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mlncn&quot;&gt;https://codeberg.org/mlncn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nezbednik&quot;&gt;https://codeberg.org/nezbednik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/nyncral&quot;&gt;https://codeberg.org/nyncral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rome-user&quot;&gt;https://codeberg.org/rome-user&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ryan-distrust.co&quot;&gt;https://codeberg.org/ryan-distrust.co&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Sertonix&quot;&gt;https://codeberg.org/Sertonix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/smxi&quot;&gt;https://codeberg.org/smxi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/strypey&quot;&gt;https://codeberg.org/strypey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tgy&quot;&gt;https://codeberg.org/tgy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xfix&quot;&gt;https://codeberg.org/xfix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zareck&quot;&gt;https://codeberg.org/zareck&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.20.5-0</title><link>https://forgejo.org/2023-10-release-v1-20-5-0/</link><guid isPermaLink="true">https://forgejo.org/2023-10-release-v1-20-5-0/</guid><description>The Forgejo v1.20.5-0 release adds protection to prevent a malicious actor from impersonating Forgejo users by using a copy of the database.</description><pubDate>Fri, 06 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.20.5-0&quot;&gt;Forgejo v1.20.5-0&lt;/a&gt; was released.&lt;/p&gt;
&lt;p&gt;This release contains an &lt;em&gt;important security fix&lt;/em&gt; that adds protection to prevent a malicious actor from impersonating Forgejo users by using a copy of the database, as described below.&lt;/p&gt;
&lt;p&gt;This release also contains bug fixes, as detailed &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-5-0&quot;&gt;in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;em&gt;strongly recommend&lt;/em&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Long term authentication token&lt;/h3&gt;
&lt;p&gt;When a user logs into Forgejo, they can click the &lt;strong&gt;Remember This Device&lt;/strong&gt; checkbox and their browser will store a &lt;strong&gt;Long-term authentication&lt;/strong&gt; token provided by the server, in a cookie that will allow them to stay logged in for a number of days as defined by the &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/config-cheat-sheet/#security-security&quot;&gt;&lt;code&gt;LOGIN_REMEMBER_DAYS&lt;/code&gt;&lt;/a&gt; setting.&lt;/p&gt;
&lt;h4&gt;Impersonation&lt;/h4&gt;
&lt;p&gt;Given a copy of the Forgejo database, a &lt;strong&gt;Long-term authentication&lt;/strong&gt; token can be constructed for any user and used to impersonate them. Such a token does not expire &lt;code&gt;LOGIN_REMEMBER_DAYS&lt;/code&gt; days after it was created and remains valid for as long as users do not change their password.&lt;/p&gt;
&lt;p&gt;The construction of such a token does not involve any kind of brute-force or cracking, it only requires the values as stored literally in the database.&lt;/p&gt;
&lt;h4&gt;Protection&lt;/h4&gt;
&lt;p&gt;The former implementation was inherently insecure, because it allowed the &lt;strong&gt;Long-term authentication&lt;/strong&gt; token to be constructed from the database alone. It is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/51988ef52bc93b63184d28395d10bf3b76914ad0&quot;&gt;reworked&lt;/a&gt; to require additional information from the user cookie. The idea &lt;a href=&quot;https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-term-persistence#secure-remember-me-cookies&quot;&gt;is derived from a 2015 blog post&lt;/a&gt; where it is explained in more detail.&lt;/p&gt;
&lt;h3&gt;Responsible disclosure to Gitea&lt;/h3&gt;
&lt;p&gt;On 6 July 2023 the &lt;a href=&quot;https://forgejo.org/.well-known/security.txt&quot;&gt;Forgejo security team&lt;/a&gt; notified the Gitea security team that the mechanism responsible for long-term authentication (the &apos;remember me&apos; cookie) uses a weak construction technique. A possible solution was suggested together with a more detailed explanation. We requested a 90 days embargo, after which a patch to the v1.20 point release could be published.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you! Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt; for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;, or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt; (&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v1.21 release candidates</title><link>https://forgejo.org/2023-09-release-v1210-0-rc0/</link><guid isPermaLink="true">https://forgejo.org/2023-09-release-v1210-0-rc0/</guid><description>The first Forgejo v1.21 release candidate is ready for testing. In addition to many improvements to `Forgejo Actions` it also includes an improved issue search, a hint to speed up the creation of newly pushed branches, the ability to archive labels and more.</description><pubDate>Fri, 22 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today the first release candidate for the upcoming Forgejo v1.21 release &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.21.0-0-rc0&quot;&gt;was published&lt;/a&gt;. It is meant for testing only: &lt;strong&gt;do not upgrade a production instance with it&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Beside a number of improvements to &lt;code&gt;Forgejo Actions&lt;/code&gt; (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/35a653d7edbe0d693649604b8309bfc578dd988b&quot;&gt;variables&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/0d55f64e6cd3de2e1e5c0ee795605823efb14231&quot;&gt;cron&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/19872063a3c14256a1d89b2a104d63e7538a3a28&quot;&gt;disabling workflows&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/460a2b0edffe71d9e64633beaa1071fcf4a33369&quot;&gt;artifacts cleanup&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/44781f9f5c4ede618660d8cfe42437f0e8dc22a0&quot;&gt;auto-cancellation of concurrent jobs&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/f3d293d2bbe0b2eab047bdd403046069cffbc0c4&quot;&gt;multiple artifacts&lt;/a&gt; and more), the most prominent new features are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/6375419468edc95fdfac94aac3b0e10b23743557&quot;&gt;Newly pushed branches show in the web UI with a link to create a PR&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improved &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/1e76a824bcd71acd59cdfb2c4547806bc34b3d86&quot;&gt;issue search&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Admins can be notified via &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/7d2d9970115c94954dacb45684f9e3c16117ebfe&quot;&gt;email when a new user registers&lt;/a&gt; to help fight spam bots.&lt;/li&gt;
&lt;li&gt;Labels that are no longer useful &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/cafce3b4b5afb3f254a48e87f1516d7b5dc209b6&quot;&gt;can be archived&lt;/a&gt;. They can no longer be selected but they remain on existing issues.&lt;/li&gt;
&lt;li&gt;When a PR contains multiple commits, it is now &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/55532061c83d38d33ef48bdc5eeac0f652844e8a&quot;&gt;possible review to each commit independently&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In addition to the cron jobs defined to cleanup packages, it is now &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/0c6ae61229bce9d9ad3d359cee927464968a2dd1&quot;&gt;also possible to trigger the cleanup manually&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;CODEOWNERS&lt;/code&gt; file is interpreted to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/3bdd48016f659c440d6e8bb57386fab7ad7b357b&quot;&gt;automatically set reviewers on PRs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;To improve performances, branch information is &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/6e19484f4d3bf372212f2da462110a1a8c10cbf2&quot;&gt;now cached in a database table&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-21-0-0&quot;&gt;draft release notes&lt;/a&gt;
will be completed in the following weeks. Make sure to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md&quot;&gt;check the breaking
changes&lt;/a&gt;
and get your production instance ready for when the v1.21 release is available.&lt;/p&gt;
&lt;p&gt;There also was progress regarding federation with the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commits/branch/forgejo-f3&quot;&gt;F3 driver and its CLI&lt;/a&gt;
(an essential building block to synchronize forges
with each other) but nothing is ready for experimenting yet.&lt;/p&gt;
&lt;h3&gt;Try it out&lt;/h3&gt;
&lt;p&gt;The release candidate is published in &lt;a href=&quot;https://codeberg.org/forgejo-experimental&quot;&gt;the dedicated &quot;experimental&quot;
Forgejo organization&lt;/a&gt; and
can be downloaded from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Containers at &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/1.21&quot;&gt;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/1.21&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Binaries at &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.21.0-0-rc0&quot;&gt;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.21.0-0-rc0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out the v1.21 documentation section for detailed
&lt;a href=&quot;/docs/v1.21/admin/installation&quot;&gt;installation instructions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It will be updated based on your feedback until it becomes robust enough to be released.&lt;/p&gt;
&lt;h3&gt;Help write good release notes&lt;/h3&gt;
&lt;p&gt;The best release notes are meant to articulate the needs and benefits
of new features and the actions recommended for breaking changes so
Forgejo admins quickly know if it is of interest to them.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-21-0-0&quot;&gt;current draft release
notes&lt;/a&gt;
are still incomplete. They will be finished by the time the release is published
and you can help make them better.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - September 2023</title><link>https://forgejo.org/2023-09-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-09-monthly-update/</guid><description>The lifecycle of Forgejo v1.20 is coming to an end and v1.21 is entering the release candidate phase this week. There is every reason to believe this new release will go smoothly, but that should not hide the fact that there is a pressing need for more contributors. The storage settings regressions from v1.20.2-0 required more work but the issue is now resolved.</description><pubDate>Thu, 21 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The lifecycle of Forgejo v1.20 is coming to an end and v1.21 is entering
the release candidate phase this week. In addition to work on the codebase a
lot also happened on the
&lt;a href=&quot;https://codeberg.org/Forgejo/website&quot;&gt;website&lt;/a&gt;, the
&lt;a href=&quot;https://codeberg.org/Forgejo/documentation&quot;&gt;documentation&lt;/a&gt; and the
&lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Judging from the activity of Forgejo contributors, there is every
reason to believe this new release will go smoothly. No-one is
overworked or stressed, dependencies are up to date, features are
added, the technical debt is kept in check and it looks like it could
go on forever. But that should not hide the fact that there are
&lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/53&quot;&gt;many areas where progress could
happen&lt;/a&gt; if only
there were more contributors.&lt;/p&gt;
&lt;p&gt;The past month was again dominated by the aftermath of the &lt;a href=&quot;https://forgejo.org/2023-08-release-v1-20-3-0&quot;&gt;storage
settings regressions&lt;/a&gt;
but this unfortunate episode is, at last, concluded. It
was a lesson for everyone involved on how to manage bugs that require
action from the Forgejo admins because they cannot be fixed with a new
release and an unattended upgrade. The recipe is simple enough but
also quite time consuming: understand the problem, write tests to
verify the conclusions, clearly explain what happened and provide
detailed recovery recommendations.&lt;/p&gt;
&lt;h2&gt;Development&lt;/h2&gt;
&lt;h3&gt;Fixing S3 configuration bugs and regressions&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/storage/&quot;&gt;storage configuration&lt;/a&gt; regressions fixed
with the &lt;a href=&quot;https://forgejo.org/2023-08-release-v1-20-3-0/#fixing-the-risk-of-data-loss-related-to-storage-sections&quot;&gt;Forgejo v1.20.3-0&lt;/a&gt;
release were verified with newly introduced
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/tag/v1.20.3-0/.forgejo/upgrades/test-upgrade.sh#L268-L271&quot;&gt;upgrade tests&lt;/a&gt;.
They were focused on local storage and assumed S3 configuration was not subject to the same issues.&lt;/p&gt;
&lt;p&gt;This assumption was not verified with any test and turned out to be
wrong. A Forgejo instance setup to use
&lt;a href=&quot;https://garagehq.deuxfleurs.fr/&quot;&gt;garage&lt;/a&gt; instead of MinIO faced two
simultaneous issues blocking the upgrade: the storage unexpectedly
went from being in the filesystem to S3, and the S3 backend failed to
initialize. The failure to initialize was a
rather simple error in the settings, hidden behind a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1365&quot;&gt;non human
readable&lt;/a&gt; error
message. With a configuration change, the Forgejo instance was upgraded successfully.&lt;/p&gt;
&lt;p&gt;To help other Forgejo admins running into these bugs the storage documentation was
&lt;a href=&quot;https://codeberg.org/forgejo/docs/pulls/100&quot;&gt;updated&lt;/a&gt; with examples
and references. The recommendations
in the &lt;a href=&quot;https://forgejo.org/2023-08-release-v1-20-3-0/#fixing-the-risk-of-data-loss-related-to-storage-sections&quot;&gt;Forgejo v1.20.3-0 blog post&lt;/a&gt;
were also extensively updated to address both S3 and local storage. They were verified with
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/a4369782e1cfbbc6f588c0cda5776ee823b0e493/.forgejo/upgrades/test-upgrade.sh#L577-L588&quot;&gt;more upgrade tests&lt;/a&gt;
that do the following for a variety of storage configurations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;start an S3 server&lt;/li&gt;
&lt;li&gt;start a Forgejo instance at a given version&lt;/li&gt;
&lt;li&gt;upload objects into all subsystems (avatars, packages, attachments, etc.)&lt;/li&gt;
&lt;li&gt;verify they are found where they are supposed to be&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The upgrade tests are run before each pull request is merged. They can also be
extended to identify breaking changes between major Forgejo versions
and verify the recommended actions to deal with them are accurate.&lt;/p&gt;
&lt;h3&gt;Changing the update time of issues via the API&lt;/h3&gt;
&lt;p&gt;The pull request to allow for setting the update times of issues and
comments via the API &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/764&quot;&gt;was
merged&lt;/a&gt;. It is one of
the most fragile commits in Forgejo and was made significantly more
robust with an extensive set of tests.&lt;/p&gt;
&lt;p&gt;When upgrading Forgejo dependencies, Forgejo can be impacted in two
ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the API or the codebase changed and Forgejo won&apos;t compile&lt;/li&gt;
&lt;li&gt;there is no conflict but the &lt;strong&gt;behavior&lt;/strong&gt; changed in an incompatible way, and Forgejo tests will fail&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Forgejo codebase is organized in a set of about 100 commits (as of
today) and heavily relies on tests during upgrades. It allows
maintainers to focus on meaningful problems instead of spending their
valuable time manually verifying, over and over, the same features keep working.&lt;/p&gt;
&lt;h3&gt;User blocking&lt;/h3&gt;
&lt;p&gt;When a user tries to transfer a repository to a user or organization that has blocked them, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1436&quot;&gt;that transfer is denied&lt;/a&gt;. Pre-existing transfer requests are also denied when the user is blocked. &lt;a href=&quot;https://forgejo.org/docs/v1.21/user/blocking-user/&quot;&gt;Read more in the moderation section of the documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&amp;amp;labels=120787&quot;&gt;all moderation pull requests&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Publishing development versions&lt;/h3&gt;
&lt;p&gt;A few months ago it was &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/51&quot;&gt;proposed to publish Forgejo development
versions&lt;/a&gt; on a
weekly basis. This has happened in the past month and is what
&lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt; is running. The version number is something
like &lt;code&gt;vX.Y.Z-test&lt;/code&gt;, to clearly state it is not to be used for real.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://f3.forgefriends.org/&quot;&gt;F3&lt;/a&gt; Forgejo driver entered a new &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&amp;amp;labels=114735&quot;&gt;development phase&lt;/a&gt;. It goes like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;forgejo-cli f3 mirror&lt;/code&gt; is run for upload or download on an existing repository&lt;/li&gt;
&lt;li&gt;a bug shows and is fixed either in:&lt;ul&gt;
&lt;li&gt;the &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3&quot;&gt;gof3 package&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo-f3/services/f3/driver&quot;&gt;Forgejo driver&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;repeat&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is still experimental.&lt;/p&gt;
&lt;p&gt;See &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?state=closed&amp;amp;labels=114735&quot;&gt;all F3 pull requests&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;CURL based Forgejo client&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-curl&quot;&gt;forgejo-curl.sh&lt;/a&gt; is a
new thin curl wrapper that helps with Forgejo authentication. Beyond
that it does not provide anything. It is low maintenance because it
only relies on the authentication logic and does not need updating
when the REST API (or the web UI endpoints) change.&lt;/p&gt;
&lt;h2&gt;Website and documentation&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/362&quot;&gt;upgraded to version 3&lt;/a&gt;,
and further improvements were made to the file layout to further separate content from code.&lt;/p&gt;
&lt;p&gt;A number of small improvements were made, including a
&lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/366&quot;&gt;switch to system fonts&lt;/a&gt; to improve
performance and fix a layout issue which sometimes caused scroll anchors to misbehave.&lt;/p&gt;
&lt;p&gt;The documentation content &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/331&quot;&gt;was moved&lt;/a&gt; to
&lt;a href=&quot;https://codeberg.org/forgejo/docs&quot;&gt;its own dedicated repository&lt;/a&gt; to ease contribution
and separate the content from the website code.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/docs#contributing&quot;&gt;Detailed instructions&lt;/a&gt; are now provided
for working locally on the documentation.
Tooling is available to preview the results before sending a PR, and to fix linting errors.
A Git hook helps to ensure badly-formatted content is not committed,
and the Forgejo Actions CI helps to apply checks to the content before PRs are merged,
as well as helping to backport changes to older versions of the docs where necessary.&lt;/p&gt;
&lt;p&gt;Creating previews for documentation PRs without exposing secrets is
not a trivial problem. Some CI have a setting to take the risk. But
Forgejo Actions does not work that way and that &lt;a href=&quot;https://codeberg.org/forgejo/docs/issues/89&quot;&gt;requires a
different&lt;/a&gt; strategy,
similar to what is used when publishing Forgejo releases in order to
protect the release signing key. It depends on a feature that will only
be available in v1.21 and it needs more manual work in the meantime.&lt;/p&gt;
&lt;h2&gt;Forgejo Actions&lt;/h2&gt;
&lt;p&gt;The actions supporting the Forgejo runner release process are grouped
into a new repository,
&lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-build-publish/&quot;&gt;forgejo-build-publish&lt;/a&gt;. The
&lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-build-publish/src/branch/main/build&quot;&gt;build
phase&lt;/a&gt;
and the &lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-build-publish/src/branch/main/publish&quot;&gt;publishing
phase&lt;/a&gt;. They
are not new actions, they were copy/pasted from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v1.20/forgejo/.forgejo/actions&quot;&gt;Forgejo main
repository&lt;/a&gt;,
generalized to also be usable for the runner and verified with
&lt;a href=&quot;https://code.forgejo.org/forgejo/forgejo-build-publish/src/branch/main/.forgejo/workflows/build-publish-integration.yml&quot;&gt;integration
tests&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v3.0.0&quot;&gt;new version of the Forgejo
runner&lt;/a&gt;
that came out of this new release process has binaries named
differently than before and unified with the Forgejo binary naming
scheme.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/-/packages/container/runner/3.0.0&quot;&gt;container
image&lt;/a&gt;
already existed but was not supported or thought through. It is now
&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/example-docker-compose.yml&quot;&gt;tested&lt;/a&gt;
and documented with a standalone &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/examples/docker-compose&quot;&gt;docker-compose
example&lt;/a&gt;
that is verified to work.&lt;/p&gt;
&lt;p&gt;The container image only contains the runner binary and does not run
as root. The &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/examples/docker-compose&quot;&gt;docker-compose
example&lt;/a&gt;
shows there is no need for anything else, even when using
&lt;code&gt;docker:dind&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;The infrastructure as well as the runner backends rely on &lt;a href=&quot;https://linuxcontainers.org/lxc/&quot;&gt;LXC system
containers&lt;/a&gt; and use
&lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/&quot;&gt;lxc-helpers.sh&lt;/a&gt; to
implement patterns common to Forgejo. Among other things, it sets the
permissions of the container to run docker, nested LXC or libvirt but
lacked flexibility to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add more permissions to run a kubernetes cluster&lt;/li&gt;
&lt;li&gt;Restrict permissions for better isolation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The new &lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/#usage&quot;&gt;&lt;code&gt;--config&lt;/code&gt; option&lt;/a&gt;
provides a range of pre-defined permissions to remedy that problem. It includes &lt;code&gt;k8s&lt;/code&gt; which is
&lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/src/branch/main/.forgejo/workflows/test.yml&quot;&gt;tested&lt;/a&gt;
to work when &lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/src/commit/e59af3f4257d6baff880b4cdbcaf9d1de1f28b60/lxc-helpers-lib-test.sh#L153-L171&quot;&gt;installing&lt;/a&gt; &lt;a href=&quot;https://www.rancher.com/products/k3s&quot;&gt;k3s&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Governance and communication&lt;/h2&gt;
&lt;h3&gt;Contributors team&lt;/h3&gt;
&lt;p&gt;The Forgejo &quot;contributors&quot; team was created informally and liberally
to grant permissions to label issue, manage CIs and pull requests
etc. To make it official it was formally proposed &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/32&quot;&gt;in the governance
repository&lt;/a&gt; to be
decided according to the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/DECISION-MAKING.md&quot;&gt;decision making process&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Debconf23&lt;/h3&gt;
&lt;p&gt;There were discussions about Forgejo at
&lt;a href=&quot;https://debconf23.debconf.org/&quot;&gt;Debconf23&lt;/a&gt; and a contributor to
FreedomBox was interested in packaging Forgejo for Debian so that
it can be distributed with FreedomBox. They could join the
&lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-deb&quot;&gt;forgejo-deb&lt;/a&gt; which
already provides functional Debian GNU/Linux packages.&lt;/p&gt;
&lt;h3&gt;Sustainability&lt;/h3&gt;
&lt;p&gt;A new &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/53&quot;&gt;discussion
started&lt;/a&gt; on how to
absorb the workload from the Forgejo issue tracker. There is no
conclusion or action planned and the problem unfortunately
remains. However, Codeberg independently &lt;a href=&quot;https://codeberg.org/Codeberg/Contributing/issues/37&quot;&gt;sent a call for
help&lt;/a&gt; to get
help with handling their scaling issues and it will hopefully attract
more contributors to Forgejo.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/24&quot;&gt;second payment&lt;/a&gt; of the
&lt;a href=&quot;https://codeberg.org/forgejo/sustainability#2023&quot;&gt;NLnet grant&lt;/a&gt; was received.
In total 40% of &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2022-12-01-nlnet/2023-06-workplan.md&quot;&gt;the workplan&lt;/a&gt;
approved for the grant in June 2023 was implemented.&lt;/p&gt;
&lt;h3&gt;Moderation&lt;/h3&gt;
&lt;p&gt;Earlier this year ad-hominem attacks were published in the Forgejo
spaces. This goes against the Forgejo Code of Conduct and some of
these messages were redacted. The author repeatedly refused to
acknowledge this was not an acceptable behavior in Forgejo spaces and
recently sent threats to publish more
ad-hominem attacks. &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/31&quot;&gt;Read more in the moderation report&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Adrodoc&quot;&gt;https://codeberg.org/Adrodoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alex19srv&quot;&gt;https://codeberg.org/alex19srv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alrs&quot;&gt;https://codeberg.org/alrs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/belette&quot;&gt;https://codeberg.org/belette&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brainchild&quot;&gt;https://codeberg.org/brainchild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CSDUMMI&quot;&gt;https://codeberg.org/CSDUMMI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cyborus&quot;&gt;https://codeberg.org/cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/daenney&quot;&gt;https://codeberg.org/daenney&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DanielGibson&quot;&gt;https://codeberg.org/DanielGibson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DansLeRuSH&quot;&gt;https://codeberg.org/DansLeRuSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/firefly-cpp&quot;&gt;https://codeberg.org/firefly-cpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fl1tzi&quot;&gt;https://codeberg.org/Fl1tzi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flightkick&quot;&gt;https://codeberg.org/flightkick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fluzz&quot;&gt;https://codeberg.org/fluzz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/glts&quot;&gt;https://codeberg.org/glts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gmem&quot;&gt;https://codeberg.org/gmem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jetsung&quot;&gt;https://codeberg.org/jetsung&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mainboarder&quot;&gt;https://codeberg.org/mainboarder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mctaylors&quot;&gt;https://codeberg.org/mctaylors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meyay&quot;&gt;https://codeberg.org/meyay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mikaela&quot;&gt;https://codeberg.org/Mikaela&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/noisytoot&quot;&gt;https://codeberg.org/noisytoot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RaptaG&quot;&gt;https://codeberg.org/RaptaG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/realaravinth&quot;&gt;https://codeberg.org/realaravinth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rome-user&quot;&gt;https://codeberg.org/rome-user&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rrahl0&quot;&gt;https://codeberg.org/rrahl0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Schoumi&quot;&gt;https://codeberg.org/Schoumi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thepaperpilot&quot;&gt;https://codeberg.org/thepaperpilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/therealpim&quot;&gt;https://codeberg.org/therealpim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/valvin&quot;&gt;https://codeberg.org/valvin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wh0ami&quot;&gt;https://codeberg.org/wh0ami&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Wild-Turtles&quot;&gt;https://codeberg.org/Wild-Turtles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yeziruo&quot;&gt;https://codeberg.org/yeziruo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yoctozepto&quot;&gt;https://codeberg.org/yoctozepto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zareck&quot;&gt;https://codeberg.org/zareck&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.20.3-0</title><link>https://forgejo.org/2023-08-release-v1-20-3-0/</link><guid isPermaLink="true">https://forgejo.org/2023-08-release-v1-20-3-0/</guid><description>Forgejo v1.20.3-0 stable release update prevents leaking emails via the API and includes a safeguard to avoid data loss in case `[storage*]` sections in the `app.ini` file do not pass sanity checks.</description><pubDate>Mon, 21 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.20.3-0&quot;&gt;Forgejo v1.20.3-0&lt;/a&gt; was released.&lt;/p&gt;
&lt;p&gt;This release includes safeguards in case &lt;code&gt;[storage].PATH&lt;/code&gt; is set or conflicting storage sections are found in the &lt;code&gt;app.ini&lt;/code&gt; file. For instance if both &lt;code&gt;[storage.packages]&lt;/code&gt; and &lt;code&gt;[packages]&lt;/code&gt; exist, the directory in which the packages are stored may change after the upgrade. Forgejo will refuse to upgrade from &lt;code&gt;v1.20.2-0&lt;/code&gt; (or an earlier version) if the sanity checks fail and require manual intervention to avoid data loss, as described below.&lt;/p&gt;
&lt;p&gt;It also contains a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/4fd8ac0653b95fc204eade4471734b23039bca13&quot;&gt;security fix that prevents leaking emails via the API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Technical details of these bug fixes are available &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-3-0&quot;&gt;in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; this blog post was updated early September 2023 for Forgejo instances using S3 for storage. If you have read the previous version, please &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/364/files&quot;&gt;take a look at the diff&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We recommend that all installations running a version affected by the issues described below are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Fixing the risk of data loss related to &lt;code&gt;[storage*]&lt;/code&gt; sections&lt;/h3&gt;
&lt;p&gt;A manual action is required to avoid the risk of losing data if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;code&gt;app.ini&lt;/code&gt; file contains one or more &lt;code&gt;[storage*]&lt;/code&gt; sections that are as follows:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[storage].PATH&lt;/code&gt; is set&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[attachment]&lt;/code&gt; and &lt;code&gt;[storage.attachments]&lt;/code&gt; exist&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[lfs]&lt;/code&gt; and &lt;code&gt;[storage.lfs]&lt;/code&gt; exist&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[avatar]&lt;/code&gt; and &lt;code&gt;[storage.avatars]&lt;/code&gt; exist&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[repo-avatar]&lt;/code&gt; and &lt;code&gt;[storage.repo-avatars]&lt;/code&gt; exist&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[repo-archive]&lt;/code&gt; and &lt;code&gt;[storage.repo-archive]&lt;/code&gt; exist&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[packages]&lt;/code&gt; and &lt;code&gt;[storage.packages]&lt;/code&gt; exist&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;app.ini&lt;/code&gt; file contains &lt;code&gt;STORAGE_TYPE = minio&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;you are currently currently running:&lt;ul&gt;
&lt;li&gt;A Forgejo version lower than &lt;code&gt;v1.20.3-0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;A Gitea version lower than &lt;code&gt;v1.21&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If this is not the case this chapter does not concern you and can be skipped.&lt;/p&gt;
&lt;h4&gt;Bug description&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/storage/&quot;&gt;storage configuration&lt;/a&gt; in the &lt;code&gt;app.ini&lt;/code&gt; file was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/d6dd6d641b593c54fe1a1041c153111ce81dbc20&quot;&gt;refactored in
v1.20&lt;/a&gt;
and bugs were introduced. There were also bugs in the previous implementation and all versions up to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-2-0&quot;&gt;Forgejo v1.20.2-0&lt;/a&gt; are impacted.&lt;/p&gt;
&lt;p&gt;These bugs are best explained through an example. By default the files for each
subsystems - Attachments, LFS, Avatars, Repository avatars, Repository
archives, Packages - are stored in a
dedicated directory. For instance if &lt;code&gt;APP_DATA_PATH&lt;/code&gt; is set to &lt;code&gt;/data&lt;/code&gt;, the
directory layout looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/data/attachments
/data/lfs
/data/avatars
/data/repo-avatars
/data/repo-archive
/data/packages
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But if the &lt;code&gt;app.ini&lt;/code&gt; file contains the
following section and no &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/storage/&quot;&gt;other storage related
sections&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[storage]
PATH = /my/storage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;all subsystems will share &lt;code&gt;/my/storage&lt;/code&gt; instead of having their own
directory. The attachments will be stored in the &lt;code&gt;/my/storage&lt;/code&gt;
directory, together with the avatars, the repository archives, etc.&lt;/p&gt;
&lt;h4&gt;Bug impact&lt;/h4&gt;
&lt;h5&gt;Subsystems sharing a directory&lt;/h5&gt;
&lt;p&gt;If &lt;code&gt;[storage].PATH&lt;/code&gt; exists in the &lt;code&gt;app.ini&lt;/code&gt; file it may cause some subsystems -
Attachments, LFS, Avatars, Repository avatars, Repository archives,
Packages - to share the same directory.&lt;/p&gt;
&lt;p&gt;It may not create a problem immediately and can go unnoticed for an
extended period of time. But since each subsystem was designed to have a
dedicated directory it will eventually:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a name clash when one subsystem tries to use the same files as another subsystem&lt;/li&gt;
&lt;li&gt;Permanently destroy data when one subsystems delete files from another subsystem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One example of permanent data loss is when clicking on &lt;strong&gt;Delete all
repositories&apos; archives (ZIP, TAR.GZ, etc..)&lt;/strong&gt; in the system
administration web page: it will not only delete the archives but
also attachments, LFS files etc.&lt;/p&gt;
&lt;h5&gt;Misplaced data&lt;/h5&gt;
&lt;p&gt;When two sections related to a subsystem are found in the &lt;code&gt;app.ini&lt;/code&gt;
file (for instance &lt;code&gt;[packages]&lt;/code&gt; and &lt;code&gt;[storage.packages]&lt;/code&gt;), the
location in which the data is stored may change in an unpredictable
way after the upgrade to &lt;code&gt;v1.20.3-0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Prior to Forgejo v1.20, using &lt;code&gt;STORAGE_TYPE = minio&lt;/code&gt; in some contexts was ignored and
the files were actually found in local storage (for instance the
[&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/267967e81da01279808f527b1aad509a9dbd0c1a/.forgejo/upgrades/misplace-s3-app.ini&quot;&gt;repo-archive&lt;/a&gt;]
section &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo-development/.forgejo/upgrades/test-upgrade.sh#L451-L469&quot;&gt;as demonstrated by this test&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;The Forgejo instance will no longer find the files stored in the
previous location and it will &lt;a href=&quot;https://github.com/go-gitea/gitea/issues/26864&quot;&gt;start populating the new location&lt;/a&gt;.
As time passes there will be no way to reconcile the content of the
two locations that diverged in this way.&lt;/p&gt;
&lt;h5&gt;Relative paths inconsistencies&lt;/h5&gt;
&lt;p&gt;When the path to a &lt;code&gt;local&lt;/code&gt; storage location does not start with a &lt;code&gt;/&lt;/code&gt;, it is
interpreted to be relative to another path. Unfortunately the logic
changed across versions, as demonstrated by &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/52ec2f30a4f7ead2acd0fdaa040662c65181fe35/.forgejo/upgrades/test-upgrade.sh#L211-L291&quot;&gt;an extensive set of tests&lt;/a&gt;
going back to &lt;code&gt;Forgejo v1.18.5-0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For instance if &lt;code&gt;app.ini&lt;/code&gt; contains &lt;code&gt;[storage.lfs].PATH = somedir&lt;/code&gt; it will end up in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;APP_DATA_PATH/lfs&lt;/code&gt; for &lt;code&gt;Forgejo v1.19.4-0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WORK_PATH/somedir&lt;/code&gt; for &lt;code&gt;Forgejo v1.20.2-0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APP_DATA_PATH/somedir&lt;/code&gt; for &lt;code&gt;Forgejo v1.20.3-0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Recommended action&lt;/h4&gt;
&lt;p&gt;Forgejo supports two storage backends: the file system (the default or
when &lt;code&gt;STORAGE_TYPE = local&lt;/code&gt; is set) and S3 compatible storage (when
&lt;code&gt;STORAGE_TYPE = minio&lt;/code&gt; is set). To figure out where each subsystem stores its files before
the upgrade, &lt;code&gt;grep&lt;/code&gt; the Forgejo logs as shown in the following example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ grep -e &apos;New.*Storage()&apos; -e &apos;Initialising.*storage&apos; &amp;lt; forgejo.log
:initAttachments() [I] Initialising Attachment storage with type:
NewLocalStorage() [I] Creating new Local Storage at /data/gitea/attachments
:initAvatars() [I] Initialising Avatar storage with type:
NewLocalStorage() [I] Creating new Local Storage at /data/gitea/avatars
:initRepoAvatars() [I] Initialising Repository Avatar storage with type:
NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-avatars
:initLFS() [I] Initialising LFS storage with type: minio
NewMinioStorage() [I] Creating Minio storage at 127.0.0.1:9000:forgejo with base path lfs/
:initRepoArchives() [I] Initialising Repository Archive storage with type:
NewLocalStorage() [I] Creating new Local Storage at /data/gitea/repo-archive
:initPackages() [I] Initialising Packages storage with type:
NewLocalStorage() [I] Creating new Local Storage at /data/gitea/packages
:initActions() [I] Initialising Actions storage with type: minio
NewMinioStorage() [I] Creating Minio storage at 127.0.0.1:9000:forgejo with base path actions_log/
:initActions() [I] Initialising ActionsArtifacts storage with type: minio
NewMinioStorage() [I] Creating Minio storage at 127.0.0.1:9000:forgejo with base path actions_artifacts/
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; when a &lt;a href=&quot;https://forgejo.org/docs/next/admin/installation/#installation-with-docker&quot;&gt;Forgejo container&lt;/a&gt; is configured using variables such as &lt;code&gt;-e FORGEJO__storage__PATH=/my/storage&lt;/code&gt;, it will create an &lt;code&gt;app.ini&lt;/code&gt; file that contains &lt;code&gt;[storage].PATH&lt;/code&gt;. Removing this variable will not remove the section from the &lt;code&gt;app.ini&lt;/code&gt; file, it has to be done manually.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Follow the instructions below to update your &lt;code&gt;app.ini&lt;/code&gt; so that the storage locations stay the same. Keep in mind that some manifestations of these bugs are not covered by the sanity checks preventing an upgrade that may have an impact on the storage location. For instance when relative paths are used in the &lt;code&gt;app.ini&lt;/code&gt; file or other corner cases that have not been discovered yet.&lt;/p&gt;
&lt;p&gt;If you have any doubt about the following steps or if you suspect the storage directories are merged together as described above, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;file an issue&lt;/a&gt; or reach out to &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;the chatroom&lt;/a&gt; to get help.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Before upgrading to Forgejo v1.20.3-0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save the output of &lt;code&gt;grep -e &apos;New.*Storage()&apos; -e &apos;Initialising.*storage&apos;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For each &lt;code&gt;local&lt;/code&gt; storage, add a section to &lt;code&gt;app.ini&lt;/code&gt;, replacing the &lt;code&gt;PATH&lt;/code&gt; value with the
absolute path of the directory for each subsystem.
Check the &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/storage/&quot;&gt;table in the documentation&lt;/a&gt; to find the correspondence between the name of the subsystem displayed in the logs and the section in the &lt;code&gt;app.ini&lt;/code&gt; file.
For instance, the subsystem &lt;code&gt;Attachment&lt;/code&gt; is associated with the &lt;code&gt;[attachment]&lt;/code&gt; section:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[attachment]
PATH = /my/storage/attachments
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For each &lt;code&gt;minio&lt;/code&gt; storage, add the following to &lt;code&gt;app.ini&lt;/code&gt;, replacing the &lt;code&gt;MINIO_BASE_PATH&lt;/code&gt; value with the
base path found in the logs (see the grep example above).
Check the &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/storage/&quot;&gt;table in the documentation&lt;/a&gt; for a correspondence between the name of the subsystem displayed in the logs and the section in the &lt;code&gt;app.ini&lt;/code&gt; file.
For instance, &lt;code&gt;LFS&lt;/code&gt; needs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[lfs]
STORAGE_TYPE = minio
MINIO_BASE_PATH = mylfs/

MINIO_ENDPOINT = 127.0.0.1:9000
MINIO_ACCESS_KEY_ID = [redacted]
MINIO_SECRET_ACCESS_KEY = [redacted]
MINIO_BUCKET = forgejo
MINIO_LOCATION = us-east-1
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove the &lt;code&gt;[storage]&lt;/code&gt; section from &lt;code&gt;app.ini&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove the &lt;code&gt;[server].LFS_CONTENT_PATH&lt;/code&gt; entry from &lt;code&gt;app.ini&lt;/code&gt; (it is the default for &lt;code&gt;[lfs].PATH&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove the &lt;code&gt;[picture].AVATAR_UPLOAD_PATH&lt;/code&gt; entry from &lt;code&gt;app.ini&lt;/code&gt; (it is the default for &lt;code&gt;[avatar].PATH&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove the &lt;code&gt;[picture].REPOSITORY_AVATAR_UPLOAD_PATH&lt;/code&gt; entry from &lt;code&gt;app.ini&lt;/code&gt; (it is the default for &lt;code&gt;[repo-avatar].PATH&lt;/code&gt;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merge the settings found in related sections together as follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;move the settings found in the &lt;code&gt;[storage.attachments]&lt;/code&gt; section into the &lt;code&gt;[attachment]&lt;/code&gt; section and remove it (one plural, the other singular)&lt;/li&gt;
&lt;li&gt;move the settings found in the &lt;code&gt;[storage.lfs]&lt;/code&gt; section into the &lt;code&gt;[lfs]&lt;/code&gt; section and remove it&lt;/li&gt;
&lt;li&gt;move the settings found in the &lt;code&gt;[storage.avatars]&lt;/code&gt; section into the &lt;code&gt;[avatar]&lt;/code&gt; section and remove it (one plural, the other singular)&lt;/li&gt;
&lt;li&gt;move the settings found in the &lt;code&gt;[storage.repo-avatars]&lt;/code&gt; section into the &lt;code&gt;[repo-avatar]&lt;/code&gt; section and remove it (one plural, the other singular)&lt;/li&gt;
&lt;li&gt;move the settings found in the &lt;code&gt;[storage.repo-archive]&lt;/code&gt; section into the &lt;code&gt;[repo-archive]&lt;/code&gt; section and remove it (both singular)&lt;/li&gt;
&lt;li&gt;move the settings found in the &lt;code&gt;[storage.packages]&lt;/code&gt; section into the &lt;code&gt;[packages]&lt;/code&gt; section and remove it (both plural)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upgrade to &lt;code&gt;v1.20.3-0&lt;/code&gt; or a later version&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Verify each subsystem uses the expected storage with &lt;code&gt;grep -e &apos;New.*Storage()&apos; -e &apos;Initialising.*storage&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bug fix and data recovery&lt;/h4&gt;
&lt;p&gt;After &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/88f6f7579cdaa557333bc86b3e45bf6458d889b6&quot;&gt;upgrading to v1.20.3-0&lt;/a&gt;
the storage settings can be used as &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/storage/&quot;&gt;explained in the documentation&lt;/a&gt;.
But there is unfortunately &lt;strong&gt;no way to automatically repair an existing
instance impacted by these bugs during the upgrade&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;To address this problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;v1.20.3-0&lt;/code&gt; and later will &lt;strong&gt;refuse to upgrade&lt;/strong&gt; from
&lt;code&gt;v1.20.2-0&lt;/code&gt; (or an earlier version) if the sanity checks fail.
Upgrading without manual verification would be taking the risk of
silently changing the location in which a subsystem expects to find its files. The data would not be lost
because it would still exist in the former location, but Forgejo will not find it any more.
The new location will start being populated
in a way that may be impossible to reconcile with the content of the former location.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v1.20&lt;/code&gt; point releases from &lt;code&gt;v1.20.3-0&lt;/code&gt; and later will &lt;strong&gt;refuse to
downgrade&lt;/strong&gt; to &lt;code&gt;v1.20.1-0&lt;/code&gt; or &lt;code&gt;v1.20.2-0&lt;/code&gt;. Although it is usually
possible to downgrade from a point release to a lower point release,
it is forbidden in this case to protect the Forgejo instance from
any risk of data loss.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; A recovery strategy to separate directories that were previously merged together can be to duplicate the merged data into the target directories. There can still be name clashes and it only works for &lt;code&gt;local&lt;/code&gt; storage if the amount of data is not too large.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Get Forgejo v1.20&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-3-0&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-3-0&quot;&gt;the breaking changes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.20.3-0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.20.3-0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.20&quot;&gt;&lt;code&gt;1.20&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;1.20.x&lt;/code&gt; point release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v1.20/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade. It also covers upgrading from Gitea, as far back as version 1.2.0.
Forgejo includes all of Gitea v1.20.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo summer update - July &amp; August 2023</title><link>https://forgejo.org/2023-08-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-08-monthly-update/</guid><description>A new major release, Forgejo v1.20, was published. It has some interesting new features and was 100% built with Forgejo Actions. Codeberg was upgraded a few days ago and discovered an unexpected issue. It was fortunately resolved within hours and a fix will be integrated in the next point release. Meanwhile development continued on the code, the website, the documentation etc. All signs of a healthy project that needs your help to keep going in the long run.</description><pubDate>Thu, 17 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2023-07-release-v1201-0/&quot;&gt;Publishing Forgejo v1.20&lt;/a&gt; was the highlight of these past few weeks and also required more time than the previous major releases. The new features are the most attractive part of the announcement but most of the work went into listing and explaining the breaking changes in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-1-0&quot;&gt;the release notes&lt;/a&gt;. They have to be as clear as possible for Forgejo admins asking themselves: does it matter to me? What should I do then? Unfortunately a few issues were missed and one of them caused a downtime when upgrading Codeberg. A robust and durable solution was developed as a followup.&lt;/p&gt;
&lt;p&gt;Meanwhile the development quietly went on, a project to produce Debian packages entered the Forgejo contrib organization, the website was reorganized internally, new documentation chapters were created, the hardware infrastructure did not cause any trouble and the Codeberg moderation dealt with spam bots efficiently. Are these signs that Forgejo is a healthy project? Definitely. Does this mean someone willing to help would be turned down because there is nothing else to do? Absolutely not! If you are serious about creating a world where Free Software can be developed with Free Software, step in, your help is needed.&lt;/p&gt;
&lt;h3&gt;Forgejo v1.20&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://forgejo.org/2023-07-release-v1201-0/&quot;&gt;Forgejo v1.20&lt;/a&gt; was published 24 July 2023 and there are reasons to be happy about the new features described in the blog post. And also by the fact that the entire release process is now based on Forgejo Actions. It is a challenging release for Forgejo admins because there are &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-1-0&quot;&gt;many breaking changes&lt;/a&gt;. A lot of attention went into ensuring a seamless experience when upgrading from any Gitea version, v1.20 included, and there has been no report of failed upgrades so far.&lt;/p&gt;
&lt;p&gt;Codeberg was successfully upgraded to Forgejo v1.20.2-0 on 10 August 2023 after a few tests of database upgrades. In the days prior to the upgrade, Forgejo contributors and Codeberg volunteers worked together to figure out the potential issues and prepare the ground. A &lt;a href=&quot;https://blog.codeberg.org/the-permissions-for-your-scoped-access-tokens-might-change-on-thursday.html&quot;&gt;mail was sent&lt;/a&gt; to all users a few days before, warning them to re-create their personal access tokens in order to ensure their scope were not unexpectedly modified. This was the most prominent breaking change since it required all users to be aware of its impact.&lt;/p&gt;
&lt;p&gt;Shortly after the upgrade all &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/packages/&quot;&gt;packages&lt;/a&gt; became unexpectedly unavailable and the feature was disabled while investigating. It turned out to be a regression caused by conflicting storage settings in the &lt;code&gt;app.ini&lt;/code&gt; file and the problem was fixed a few hours later. The lesson was learned and the Forgejo v1.20.3-0 release will include a safeguard against that particular issue. Other bugs (with less impact) were discovered and some of them were fixed right away (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1240&quot;&gt;profile rendering&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1241&quot;&gt;auth icons ratio&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1242&quot;&gt;dropzone filename hidden&lt;/a&gt;, ...).&lt;/p&gt;
&lt;h3&gt;Development&lt;/h3&gt;
&lt;p&gt;In addition to the development areas discussed below, it is worth mentioning there has been an unprecedented amount of pull requests proposed and merged to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls?q=&amp;amp;type=all&amp;amp;state=closed&amp;amp;labels=78137&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=26734&quot;&gt;fix bugs&lt;/a&gt; or implement features such as &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1076&quot;&gt;OpenStreetMap links in profiles&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/676&quot;&gt;banning dots in usernames&lt;/a&gt; or &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1126&quot;&gt;unifying project views&lt;/a&gt;. A number of these changes were &lt;a href=&quot;https://github.com/go-gitea/gitea/pulls?q=is%3Apr+author%3Aearl-warren+is%3Aclosed&quot;&gt;contributed back&lt;/a&gt; to Forgejo dependencies to keep the Forgejo codebase size to a minimum.&lt;/p&gt;
&lt;h4&gt;Federation&lt;/h4&gt;
&lt;p&gt;A pull request &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/764&quot;&gt;started a few months ago&lt;/a&gt; to allow for setting the update times of issues and comments via the API is now two tests away from being merged. It matters to federation because mirroring an issue from one forge to another so it can be displayed requires the dates are preserved which is not currently possible.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/services/f3/driver&quot;&gt;F3&lt;/a&gt; driver for Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/cmd/forgejo/f3.go&quot;&gt;now relies&lt;/a&gt; on the &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3&quot;&gt;gof3 CLI&lt;/a&gt; instead of implementing its own. It was made possible by a &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3/-/merge_requests/63/diffs&quot;&gt;refactor of gof3&lt;/a&gt; that uses &lt;a href=&quot;https://pkg.go.dev/github.com/urfave/cli/v2&quot;&gt;urfave/v2&lt;/a&gt; to be compatible with Forgejo. This kind of factorization reduces the redundant work required to maintain independent projects and keeps their combined codebases &lt;a href=&quot;https://en.wikipedia.org/wiki/Don%27t_repeat_yourself&quot;&gt;DRY&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The new &lt;code&gt;forgejo-cli f3 mirror&lt;/code&gt; subcommand will do what it suggests: mirrors projects, issues, pull requests, etc. from one forge to the other. The implementation is not complete but &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1191/files&quot;&gt;made progress together with tests&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Storage settings regressions&lt;/h4&gt;
&lt;p&gt;Around 6 August work started to deal with a difficult problem regarding storage settings (see &lt;a href=&quot;https://codeberg.org/forgejo/website/src/commit/fb78c664e841dd97b1cb0de9c13c44c8af1d63c8/src/content/blog/2023-08-release-v1-20-3-0.md&quot;&gt;the final draft blog post&lt;/a&gt; if you are reading this before it is published). There are multiple cascading issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The bug is found in all Forgejo releases&lt;/li&gt;
&lt;li&gt;Upgrading to a release fixing the bug requires manual intervention&lt;/li&gt;
&lt;li&gt;Implementing a safeguard has to be done before the database upgrade and after loading the settings but there is no logic to do that&lt;/li&gt;
&lt;li&gt;The safeguard has to prevent downgrading from a point release but the information about the previously running Forgejo instance is not available&lt;/li&gt;
&lt;li&gt;Testing the safeguard can only be done reliably with automated upgrade tests which do not exist&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A solution for those issues was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1225/commits&quot;&gt;implemented&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1220&quot;&gt;backported to v1.20&lt;/a&gt;. It was almost done when the Codeberg upgrade to v1.20 happened on 10 August and discovered one manifestation of the bug that was overlooked (conflicting &lt;code&gt;[packages]&lt;/code&gt; and &lt;code&gt;[storage.packages]&lt;/code&gt; sections). It was an unfortunate oversight but had the benefit of improving the fix to be released in v1.20.3-0.&lt;/p&gt;
&lt;p&gt;Codeberg hit the issue shortly after &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1225#issuecomment-1037223&quot;&gt;extensive manual upgrade testing&lt;/a&gt; was conducted. All of which had to be repeated after fixing the newly found issue. It was a great example of why manual testing is generally a bad idea and eventually more time consuming than writing automated tests. Instead of running the upgrade tests manually again, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/884ca63738cc2e2c7cde31c649e9fa77cd590044&quot;&gt;automated upgrade tests were implemented&lt;/a&gt;. Although they launch multiple versions of Forgejo a dozen times, they run under five minutes.&lt;/p&gt;
&lt;h4&gt;Semantic Version&lt;/h4&gt;
&lt;p&gt;The Forgejo semantic version was used when &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/197177510980db4d237d4f7979497622a97e1562/services/forgejo/sanity_v1TOv5_0_1Included.go&quot;&gt;implementing the storage setting sanity checks&lt;/a&gt;. It is not yet used for releases or public facing Forgejo version numbering. But it can be used internally.&lt;/p&gt;
&lt;h4&gt;Moderation&lt;/h4&gt;
&lt;p&gt;When a user is blocked and is also a collaborator on a repository that the blocker owns, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/1151&quot;&gt;that collaboration is removed&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Publishing development versions&lt;/h4&gt;
&lt;p&gt;It was &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/51&quot;&gt;proposed to publish Forgejo development versions&lt;/a&gt; on a weekly basis. Although this was done as a byproduct of the weekly Forgejo rebase &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestones?sort=furthestduedate&amp;amp;state=closed&amp;amp;q=rebase&quot;&gt;in August&lt;/a&gt;, the discussion is still ongoing. They are only for experimentation and could be used to run &lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt; which is meant to help figure out if a bug is happening in the most recent development branch.&lt;/p&gt;
&lt;h3&gt;Forgejo contrib&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo-contrib/&quot;&gt;forgejo-contrib&lt;/a&gt; organization is where projects related to Forgejo can find a home while they are being developed or when the long term maintenance is uncertain.&lt;/p&gt;
&lt;h4&gt;Debian packages for Forgejo&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-deb&quot;&gt;Debian packages for Forgejo&lt;/a&gt; project moved to &lt;code&gt;forgejo-contrib&lt;/code&gt;. The packages &lt;a href=&quot;https://code.forgejo.org/forgejo-contrib/-/packages&quot;&gt;it provides&lt;/a&gt; use the &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/packages/debian/&quot;&gt;Debian package&lt;/a&gt; registry that was introduced in Forgejo v1.20.&lt;/p&gt;
&lt;h4&gt;Helm chart for forgejo&lt;/h4&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm/pulls/165&quot;&gt;pull request was proposed&lt;/a&gt; to the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-helm&quot;&gt;Helm chart for forgejo&lt;/a&gt; to deploy the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; alongside Forgejo. The &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/actions/#offline-registration&quot;&gt;offline registration&lt;/a&gt; implemented in Forgejo and the runner were designed to help that particular use case.&lt;/p&gt;
&lt;h3&gt;Website and Documentation&lt;/h3&gt;
&lt;p&gt;The website &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/323&quot;&gt;was restructured&lt;/a&gt; to use &lt;a href=&quot;https://docs.astro.build/en/guides/content-collections/&quot;&gt;Astro content collections&lt;/a&gt; to better separate content from the source and improve maintainability over the ad-hoc system previously in use. There also were smaller changes such as &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/329&quot;&gt;custom 404 pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now that v1.20 was published, the &lt;a href=&quot;https://codeberg.org/forgejo/docs/src/branch/next&quot;&gt;v1.21 documentation&lt;/a&gt; was created to receive updates that are not relevant to v1.20 such as the &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/335/files&quot;&gt;new moderation features&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/292&quot;&gt;table of content&lt;/a&gt; was added to help navigate large pages and preparations were made to &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/331&quot;&gt;move the documentation into a separate repository&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;New workflow for stable releases&lt;/h3&gt;
&lt;p&gt;The Forgejo development branch is &lt;a href=&quot;https://forgejo.org/docs/v1.21/developer/workflow/&quot;&gt;rebased weekly&lt;/a&gt; and that worked out nicely for almost a year. The same was done until last month for stable branches. It also worked well but had one confusing side effect: the tags of the stable versions could not be found in the stable version branch. For instance the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/tag/v1.19.0-3&quot;&gt;v1.93.3-0 tag&lt;/a&gt; is not on a commit found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v1.19/forgejo&quot;&gt;forgejo/v1.19&lt;/a&gt; branch. Although it did not seem to create any actual problems, it is unusual and cause for confusion.&lt;/p&gt;
&lt;p&gt;Early July a &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/296&quot;&gt;proposal was made&lt;/a&gt; for a different workflow to address this issue. It has been adopted when the first v1.20 release was published and the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/tag/v1.20.1-0&quot;&gt;v1.20.1-0&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/tag/v1.20.2-0&quot;&gt;v1.20.2-0&lt;/a&gt; are now both found in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v1.20/forgejo&quot;&gt;forgejo/v1.20&lt;/a&gt; branch.&lt;/p&gt;
&lt;h2&gt;Infrastructure&lt;/h2&gt;
&lt;p&gt;There &lt;strong&gt;has been no issue&lt;/strong&gt; with any of the &lt;a href=&quot;https://forgejo.org/docs/v1.20/developer/infrastructure/&quot;&gt;hardware in the Forgejo infrastructure&lt;/a&gt;. It is worth mentioning resources used daily for the CI and the releases did not cause trouble.&lt;/p&gt;
&lt;p&gt;This kind of stability is taken for granted when relying on cloud providers but it does not happen magically. Their staff is hard at work to maintain a stable environment over time. Forgejo chose to rely on Free Software only and runs its own hardware. Part of the infrastructure is using an &lt;a href=&quot;https://www.openstack.org/&quot;&gt;OpenStack&lt;/a&gt; provider, similar to AWS but based on a Free Software stack and API. The rest is running on dedicated &lt;a href=&quot;https://linuxcontainers.org/lxc/&quot;&gt;LXC&lt;/a&gt; hypervisors.&lt;/p&gt;
&lt;p&gt;Being independent from cloud providers running proprietary software means more work for Forgejo community members. But since Free Software is &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MISSION.md#values&quot;&gt;one of the core values&lt;/a&gt; of Forgejo, it is also a requirement. The promise is to deliver a Free Software codebase but also to ensure it can be developed and released in a Free Software environment. The big question is: can the Forgejo devops team durably maintain a reliable and secure infrastructure? It is too early to tell but over four weeks of uninterrupted and stable service is a very positive sign.&lt;/p&gt;
&lt;h2&gt;Governance and communication&lt;/h2&gt;
&lt;h3&gt;Wikidata&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.wikidata.org/&quot;&gt;Wikidata&lt;/a&gt; acts as central storage for the structured data of its Wikimedia sister projects including Wikipedia, Wikivoyage, Wiktionary, Wikisource, and others. Forgejo &lt;a href=&quot;https://www.wikidata.org/wiki/Q115962387&quot;&gt;has an entry&lt;/a&gt; which was thoroughly updated. The Forgejo releases are also listed and &lt;a href=&quot;https://www.wikidata.org/w/index.php?title=Q115962387&amp;amp;action=history&quot;&gt;updated by Wikidata editors&lt;/a&gt; when they are published.&lt;/p&gt;
&lt;h3&gt;Sustainability&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/sustainability#2023&quot;&gt;NLnet grant&lt;/a&gt; is progressing and some tasks related to the release process were completed. A &quot;Requests for Payment&quot; was &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/22&quot;&gt;approved&lt;/a&gt; and another &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/pulls/24&quot;&gt;is pending&lt;/a&gt;. The relationship between NLnet and Forgejo is not a contract in the traditional sense and a &quot;Request for Payment&quot; is the equivalent of an invoice, only it is paid to the beneficiary as a charitable donation. In this case the payment will go to Codeberg e.V.&lt;/p&gt;
&lt;p&gt;Time is as valuable as funding and Forgejo durability heavily depends on how much time volunteers are willing to devote to moderation, sorting bugs, fixing them etc. It is, in fact, arguably the most precious resource any Free Software project has. The time spent by &lt;a href=&quot;https://codeberg.org/forgejo/sustainability#2023&quot;&gt;one volunteer&lt;/a&gt; was added to the sustainability repository to account for that. It is not a requirement and each volunteer decides whether or not they want their time to be accounted for in this way.&lt;/p&gt;
&lt;h3&gt;Moderation&lt;/h3&gt;
&lt;p&gt;With the upgrade to Forgejo v1.20, the &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/blocking-user/&quot;&gt;self-moderation features&lt;/a&gt; are available on Codeberg and were used to &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/16&quot;&gt;enforce the ban&lt;/a&gt; decided on 17 March 2023 for a period of one year.&lt;/p&gt;
&lt;p&gt;Two spam bots posted a dozen messages that have been sent via email to people watching the Forgejo repositories. The bots were removed by the Codeberg moderation team before the incident was even noticed by the Forgejo moderation team.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/29&quot;&gt;moderation report was published&lt;/a&gt; and reminds Forgejo community members that &quot;nobody can, under any circumstances, unilaterally decide to reveal private information in Forgejo spaces. It does not only go against one of the core values of Forgejo, it also goes against the most basic expectation for privacy of every person entering Forgejo spaces&quot;.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alex19srv&quot;&gt;https://codeberg.org/alex19srv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aral&quot;&gt;https://codeberg.org/aral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/brainchild&quot;&gt;https://codeberg.org/brainchild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chrysn&quot;&gt;https://codeberg.org/chrysn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/commonism&quot;&gt;https://codeberg.org/commonism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Cyborus&quot;&gt;https://codeberg.org/Cyborus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DanielGibson&quot;&gt;https://codeberg.org/DanielGibson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/diem&quot;&gt;https://codeberg.org/diem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Eragon&quot;&gt;https://codeberg.org/Eragon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/f00&quot;&gt;https://codeberg.org/f00&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/f0sh&quot;&gt;https://codeberg.org/f0sh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fasterthanlime&quot;&gt;https://codeberg.org/fasterthanlime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fl1tzi&quot;&gt;https://codeberg.org/Fl1tzi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/flamenco687&quot;&gt;https://codeberg.org/flamenco687&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fluzz&quot;&gt;https://codeberg.org/fluzz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fr33domlover&quot;&gt;https://codeberg.org/fr33domlover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/g2px1&quot;&gt;https://codeberg.org/g2px1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/galambborong&quot;&gt;https://codeberg.org/galambborong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gmem&quot;&gt;https://codeberg.org/gmem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GreenImp&quot;&gt;https://codeberg.org/GreenImp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jb_wisemo&quot;&gt;https://codeberg.org/jb_wisemo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jklippel&quot;&gt;https://codeberg.org/jklippel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jmshrtn&quot;&gt;https://codeberg.org/jmshrtn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/link2xt&quot;&gt;https://codeberg.org/link2xt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/louis9902&quot;&gt;https://codeberg.org/louis9902&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/lucajunge&quot;&gt;https://codeberg.org/lucajunge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MagicLike&quot;&gt;https://codeberg.org/MagicLike&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/mainboarder&quot;&gt;https://codeberg.org/mainboarder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/melroy89&quot;&gt;https://codeberg.org/melroy89&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/neveraskedtoexist&quot;&gt;https://codeberg.org/neveraskedtoexist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oscarcp&quot;&gt;https://codeberg.org/oscarcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/PatchMixolydic&quot;&gt;https://codeberg.org/PatchMixolydic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/pierreprinetti&quot;&gt;https://codeberg.org/pierreprinetti&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RaptaG&quot;&gt;https://codeberg.org/RaptaG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rome-user&quot;&gt;https://codeberg.org/rome-user&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/snematoda&quot;&gt;https://codeberg.org/snematoda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SteffoSpieler&quot;&gt;https://codeberg.org/SteffoSpieler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thatonecalculator&quot;&gt;https://codeberg.org/thatonecalculator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/update.freak&quot;&gt;https://codeberg.org/update.freak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vintprox&quot;&gt;https://codeberg.org/vintprox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vladh&quot;&gt;https://codeberg.org/vladh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wetneb&quot;&gt;https://codeberg.org/wetneb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/yverry&quot;&gt;https://codeberg.org/yverry&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v1.20 is available</title><link>https://forgejo.org/2023-07-release-v1201-0/</link><guid isPermaLink="true">https://forgejo.org/2023-07-release-v1201-0/</guid><description>Forgejo v1.20 is available and comes with an integrated CI, still in alpha stage but robust enough to build this release and verify all Forgejo pull requests. This release also brings customizable user profiles, a simpler Markdown editor, user blocking for self moderation, pinned issues, six more registries and many new API endpoints. As always, make sure to carefully read the breaking changes from the release notes and make a full backup before upgrading.</description><pubDate>Mon, 24 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://forgejo.org/download/&quot;&gt;Forgejo v1.20.1-0&lt;/a&gt; is here and you will find the most interesting changes it introduces below. Before upgrading it is &lt;strong&gt;strongly recommended&lt;/strong&gt; to make a full backup as explained in the &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/upgrade/&quot;&gt;upgrade guide&lt;/a&gt; and carefully read &lt;strong&gt;all breaking changes&lt;/strong&gt; from the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-1-0&quot;&gt;release notes&lt;/a&gt;. If in doubt, do not hesitate to ask for help &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or in the &lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;chat room&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;Actions&lt;/a&gt;&lt;/strong&gt;: the internal CI graduated from &lt;strong&gt;experimental&lt;/strong&gt; to &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle#Alpha&quot;&gt;alpha&lt;/a&gt;&lt;/strong&gt; and is now used by Forgejo to verify pull requests and to create releases, including this one. It comes with a &lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;user&lt;/a&gt; documentation that includes examples and an extensive &lt;a href=&quot;/docs/v1.20/admin/actions&quot;&gt;administrator&lt;/a&gt; guide to set it up.
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User profile&lt;/strong&gt;: the Forgejo home page for a user &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/c090f87a8db5b51e0aa9c7278b38ddc862c048ac&quot;&gt;can now be a Markdown file&lt;/a&gt; instead of the list of repositories they own.
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New markdown editor&lt;/strong&gt;: the editor used when creating issues, adding comments, etc. is now &lt;a href=&quot;https://github.com/github/markdown-toolbar-element&quot;&gt;GitHub markdown&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.20/user/blocking-user/&quot;&gt;Blocking users&lt;/a&gt;:&lt;/strong&gt; is a new self-moderation tool a user or an organization can use to prevent users from interacting with the repositories they own.
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/aaa109466350c531b9238a61115b2877daca57d3&quot;&gt;Pinned issues&lt;/a&gt;&lt;/strong&gt;: it is now possible to select issues and pull requests to show on top of the list.
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Registries:&lt;/strong&gt; additional registries are now available for &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/packages/swift&quot;&gt;SWIFT&lt;/a&gt;, &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/packages/debian&quot;&gt;debian&lt;/a&gt;, &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/packages/rpm&quot;&gt;RPM&lt;/a&gt;, &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/packages/alpine&quot;&gt;alpine&lt;/a&gt;, &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/packages/go&quot;&gt;Go&lt;/a&gt; and &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/packages/cran&quot;&gt;CRAN&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API endpoints:&lt;/strong&gt; new API endpoints are now available for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/d56bb7420184c0c2f451f4bcaa96c9b3b00c393d&quot;&gt;email&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/03591f0f95823a0b1dcca969d2a3ed505c7e6d73&quot;&gt;renaming a user&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/3cab9c6b0c050bfcb9f2f067e7dc1b0242875254&quot;&gt;issue dependencies management&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/6b0df6d8da76d77a9b5c42dcfa78dbfe197fd56d&quot;&gt;activity feeds&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/fb37eefa282543fd8ce63c361cd4cf0dfac9943c&quot;&gt;license templates&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/36a5d4c2f3b5670e5e921034cd5d25817534a6d4&quot;&gt;gitignore templates&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/cf465b472166ccf6d3e001e3043e4bf43e16e6b3&quot;&gt;uploading files to an empty repository&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/cd9a13ebb47d32f46b38439a524e3b2e0c619490&quot;&gt;creating a branch directly from commit&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/25dc1556cd70b567a4920beb002a0addfbfd6ef2&quot;&gt;label templates&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/275d4b7e3f4595206e5c4b1657d4f6d6969d9ce2&quot;&gt;changing/creating/deleting multiple files&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-1-0&quot;&gt;in the Forgejo v1.20.1-0 release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Forgejo Actions&lt;/h3&gt;
&lt;p&gt;Although &lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;Forgejo Actions&lt;/a&gt; is &lt;strong&gt;not yet production ready&lt;/strong&gt;, it became good enough for Forgejo itself to use in production. It &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/actions&quot;&gt;verifies pull requests&lt;/a&gt; (see also the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/60b10cd66051ffd4cbdbae9a4aa63aa0f55b2e8d/.forgejo/workflows/testing.yml&quot;&gt;testing workflow&lt;/a&gt;), &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows/build-release.yml&quot;&gt;builds&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows/publish-release.yml&quot;&gt;publishes&lt;/a&gt; releases (this one and the release candidates before it).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;It is still considered &lt;strong&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Software_release_life_cycle#Alpha&quot;&gt;alpha&lt;/a&gt;&lt;/strong&gt; stage because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; is &lt;strong&gt;not secure enough&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;a single &lt;code&gt;Forgejo runner&lt;/code&gt; will poll &lt;code&gt;Forgejo&lt;/code&gt; every two seconds by default which is not scalable&lt;/li&gt;
&lt;li&gt;some errors only show in the &lt;code&gt;Forgejo runner&lt;/code&gt; logs and not in the &lt;code&gt;Forgejo&lt;/code&gt; user interface which is not a good user experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The potential security bugs are a concern and &lt;code&gt;Forgejo&lt;/code&gt; took the following precautions to reduce the risks in its own infrastructure.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Do not trust any web application with secrets.&lt;/strong&gt; The &lt;code&gt;Forgejo&lt;/code&gt;
release process needs a GPG private key to sign the binaries
before they are
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases&quot;&gt;uploaded&lt;/a&gt;. A web
application with a large attack surface such as &lt;code&gt;Forgejo&lt;/code&gt; or
&lt;code&gt;GitLab&lt;/code&gt; must not be trusted to keep such a secret safe. Instead a
&lt;code&gt;Forgejo&lt;/code&gt; instance dedicated to signing the releases was installed
behind a VPN.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LXC containers confinement.&lt;/strong&gt; All &lt;code&gt;Forgejo runners&lt;/code&gt; are deployed
in &lt;a href=&quot;/docs/v1.20/developer/infrastructure/#installing-forgejo-runners&quot;&gt;dedicated LXC
containers&lt;/a&gt;
and re-installed from scratch from time to time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, the &lt;a href=&quot;/docs/v1.20/user/actions/#pull-request-actions-are-moderated&quot;&gt;required pull request
approval&lt;/a&gt;
prevents unknown users from triggering a task that would include a
malicious workflow.&lt;/p&gt;
&lt;h3&gt;User profile&lt;/h3&gt;
&lt;p&gt;By default the profile page of a user is the list of repositories they
own. It is possible to customize it with a short description that
shows to the left, under their avatar. It can now be fully
personalized with a markdown file that is displayed instead of the
list of repositories.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/docs/v1.20/user/profile/&quot;&gt;Read more user profile customization&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;New markdown editor&lt;/h3&gt;
&lt;p&gt;The web editor used when creating issues, adding comments,
etc. &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/5cc0801de90d16b4d528e62de11c9b525be5d122&quot;&gt;changed&lt;/a&gt;
from &lt;a href=&quot;https://github.com/Ionaru/easy-markdown-editor&quot;&gt;EasyMDE&lt;/a&gt; to
&lt;a href=&quot;https://github.com/github/markdown-toolbar-element&quot;&gt;GitHub
markdown&lt;/a&gt;. To help
with the transition it is still possible to switch back to using
EasyMDE with the double arrow button in the menubar.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This new markdown editor does not provide any WYSIWIG features. As
&lt;a href=&quot;https://github.github.com/markdown-toolbar-element/examples/&quot;&gt;shown in the
demo&lt;/a&gt; it
is merely a helper for users who are not familiar with
&lt;a href=&quot;https://en.wikipedia.org/wiki/Markdown&quot;&gt;markdown&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Want to add a list? Click on the list menu item and see
that a star is inserted for you. Select a word and click the bold
button so it is surrounded by two stars. Nothing fancier. By
comparison the
&lt;a href=&quot;https://github.com/Ionaru/easy-markdown-editor&quot;&gt;EasyMDE&lt;/a&gt; editor has
more features such as showing in bold the word that is surrounded by two stars.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately it is no longer actively maintained and enough has long
standing bugs to justify a replacement.&lt;/p&gt;
&lt;h3&gt;Blocking users&lt;/h3&gt;
&lt;p&gt;On large Forgejo instances with ten of thousands of users it may be
challenging for the moderation team to properly address all
requests. The most common one being a malicious user spamming issues
with advertisements or unwanted noise. It will be immediately noticed
by the repository owner and it may take a while for the moderation
team to act.&lt;/p&gt;
&lt;p&gt;The owner of a repository or an organization can now block a user as
soon as they notice an undesirable interaction. When they go to the
profile page of the user, a new &lt;strong&gt;Block&lt;/strong&gt; button shows on the left.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;After confirmation the user will be added to the list of blocked users.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;From the &lt;strong&gt;Blocked Users&lt;/strong&gt; tab in their profile, the user can unblock
them when the relationship gets better.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The user being blocked is not notified and does not see any difference
until they try to participate in a repository from which they are
blocked. Their action will fail with a message informing them they
have been blocked.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/docs/v1.20/user/blocking-user/&quot;&gt;Read more about blocking users&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Pin issues&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/aaa109466350c531b9238a61115b2877daca57d3&quot;&gt;Issues and pull requests can be pinned&lt;/a&gt; and will show on top of the list of issues (or pull requests). They can be re-arranged by dragging them.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Theming and custom templates&lt;/h3&gt;
&lt;p&gt;The themes and templates changed a lot in this release and there is no
documentation explaining how and why. The hope is that the users will
discover the changes and not be overly confused.&lt;/p&gt;
&lt;p&gt;This is also a reminder that Forgejo considers themes and templates to
be a part of the internals and require an understanding of the source
codebase to be modified and adapted after each release. In other
words, if a Forgejo admin extracted templates and modified them on a
v1.19 instance they will need to read the source code to figure out
how they need to be modified to keep working with v1.20.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;Does &lt;code&gt;Forgejo&lt;/code&gt; support federation? Not yet. Was there progress? Yes.&lt;/p&gt;
&lt;p&gt;The monthly report &lt;a href=&quot;https://forgejo.org/tag/report/&quot;&gt;has details&lt;/a&gt; on
these progress and the &lt;a href=&quot;https://forgefriends.org/blog/2023/06/21/2023-06-state-forge-federation/&quot;&gt;State of the Forge Federation: 2023
edition&lt;/a&gt;
published last month explains how Forgejo fits in the big picture.&lt;/p&gt;
&lt;p&gt;Forges have existed for twenty years and none of them has achieved
data portability let alone federation. Forgejo is yet to celebrate its
first birthday and it will take it a little time to get there. One
thing is for sure: at this point no other forge is doing concrete work
in this direction.&lt;/p&gt;
&lt;h3&gt;Get Forgejo v1.20&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-1-0&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-20-1-0&quot;&gt;the breaking changes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.20.1-0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.20.1-0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.20&quot;&gt;&lt;code&gt;1.20&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;1.20.x&lt;/code&gt; point release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v1.20/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade. It also covers upgrading from Gitea, as far back as version 1.2.0.
Forgejo includes all of Gitea v1.20.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo do not hold back, it is also your project.
Open an issue in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports, reach out &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - June 2023</title><link>https://forgejo.org/2023-06-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-06-monthly-update/</guid><description>Forgejo v1.20 is around the corner. Release candidates were published and most of the activity went into testing it, updating the documentation and rebuilding the release process. Forgejo Actions is now used for all Forgejo development and releases in a spirit of dogfooding. A hardware failure and a Denial of Service (DoS) attack disrupted the work during a week but did not break anything.</description><pubDate>Fri, 07 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Forgejo v1.20 is around the corner: &lt;a href=&quot;../2023-06-10-release-v1200-0-rc0/&quot;&gt;release candidates&lt;/a&gt; were published and most of the activity went into testing them, updating the documentation and rebuilding the release process. Although &lt;code&gt;Forgejo Actions&lt;/code&gt; is not yet considered production ready, it proved stable enough to be used for all Forgejo development and releases. It did not always go smoothly and there were challenging times when a hardware failure and a Denial of Service (DoS) attack disrupted the work during a week.&lt;/p&gt;
&lt;p&gt;Forgejo does not do much of anything in terms of communication but &lt;a href=&quot;https://de.wikipedia.org/wiki/Forgejo&quot;&gt;got its first Wikipedia page&lt;/a&gt; and was mentioned in the &lt;a href=&quot;https://forgefriends.org/blog/2023/06/21/2023-06-state-forge-federation/&quot;&gt;State of the Forge Federation: 2023 edition&lt;/a&gt;. There is a great need for contributors who have strong skills that do not involve writing code, even beyond spreading the word about Forgejo, such as writing documentation, organizing video-conferences, etc. &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/9#issuecomment-956394&quot;&gt;Codeberg allocated funds&lt;/a&gt; to Forgejo that could be used to compensate contributors willing to help but who cannot afford to be volunteers.&lt;/p&gt;
&lt;h3&gt;Development&lt;/h3&gt;
&lt;h4&gt;Forgejo v1.20&lt;/h4&gt;
&lt;p&gt;The first &lt;a href=&quot;../2023-06-10-release-v1200-0-rc0/&quot;&gt;release candidates&lt;/a&gt; for Forgejo v1.20 were published. The highlights are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;internal CI/CD&lt;/a&gt; known as &lt;code&gt;Forgejo Actions&lt;/code&gt; is now used by &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows&quot;&gt;Forgejo itself&lt;/a&gt; and the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows&quot;&gt;Forgejo Runner&lt;/a&gt; for testing pull requests and publishing releases. It is still in beta stage and disabled by default but it is stable and secure enough to be activated on &lt;a href=&quot;https://code.forgejo.org&quot;&gt;Forgejo&apos;s own instance&lt;/a&gt;. An extensive &lt;a href=&quot;/docs/v1.20/admin/actions&quot;&gt;admin&lt;/a&gt; and &lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;user&lt;/a&gt; documentation is available.&lt;/li&gt;
&lt;li&gt;The User Interface (UI) and User eXperience (UX) changed significantly and will require some adjustment from users who will have to adapt to a different layout. And admins who created their own templates and styles will need to figure out, by reading the sources, how it evolved.&lt;/li&gt;
&lt;li&gt;New API endpoints were added (activity feeds, renaming users, uploading file, retrieving commits, etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-20-0-0&quot;&gt;draft release notes&lt;/a&gt; are mostly complete but they still work and contributions would be most welcome.&lt;/p&gt;
&lt;p&gt;Publishing one of the release candidates was made specially difficult because Codeberg suffered from a hardware failure that was followed by a DoS attack. It took about a week instead of a few hours. A similar situation happened in the early days of Forgejo, when the first release was only half published because the process unexpectedly broke at the wrong time. The release process was refactored on that occasion to be resilient to network and hardware failures. This effort paid off this time around, when the release process had to be restarted no less than a dozen times over three days until it finally succeeded.&lt;/p&gt;
&lt;h3&gt;Moderation&lt;/h3&gt;
&lt;p&gt;An &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/827&quot;&gt;API was implemented&lt;/a&gt; to manage blocked users in organizations and user accounts.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;When artifacts (repositories, issues, etc.) are imported in Forgejo, they are now associated with a user &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/943&quot;&gt;that acts as a placeholder if it does not already exists&lt;/a&gt;. If that same user authenticate themselves on Forgejo via OAuth at a later time, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/934&quot;&gt;this placeholder will be promoted to a real user&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In other words, if a repository that belongs to Jane Doe is federated from GitLab to a Forgejo instance, she will be able to reclaim it as soon as she registers via OAuth2 on the Forgejo instance. The OAuth2 authorization from GitLab is proof enough that she is the legitimate owner of this repository.&lt;/p&gt;
&lt;h3&gt;Documentation&lt;/h3&gt;
&lt;p&gt;The Forgejo documentation is a patchwork from various sources (Codeberg, Gitea, etc.) as well as content authored by Forgejo contributors. To improve the documentation for the Forgejo v1.20 release a full pass was done to get relevant updates from these sources. In addition a new section was created with &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/recommendations/&quot;&gt;Recommended Settings and Tips&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Forgejo Actions&lt;/code&gt; &lt;a href=&quot;https://forgejo.org/docs/v1.20/admin/actions/&quot;&gt;admin&lt;/a&gt; guide is complete and the &lt;a href=&quot;https://forgejo.org/docs/v1.20/user/actions/&quot;&gt;user&lt;/a&gt; guide got better but still requires a significant work to be finished. An effort is made to include &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo/src/branch/main/testdata&quot;&gt;examples&lt;/a&gt; that are part of the CI of actively maintained repositories so they can be verified to work.&lt;/p&gt;
&lt;h3&gt;Forgejo Actions&lt;/h3&gt;
&lt;p&gt;A &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases/tag/v2.1.0&quot;&gt;new version of the Forgejo runner&lt;/a&gt; was published to fix bugs and security issues. Although it is stable and runs for weeks uninterrupted, it is best confined on an isolated machine that is reset on a regular basis for security reasons.&lt;/p&gt;
&lt;p&gt;There has been no report of security issues when enabling actions in Forgejo v1.19 and &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/36#issuecomment-935435&quot;&gt;Codeberg decided to enable it&lt;/a&gt;. That allowed for a simpler release process based on Forgejo Actions for both Forgejo and the &lt;code&gt;Forgejo runner&lt;/code&gt; to be &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/230&quot;&gt;implemented&lt;/a&gt;. It was used to publish all release candidates in the &lt;a href=&quot;https://codeberg.org/forgejo-experimental/&quot;&gt;experimental&lt;/a&gt; organization and helped fine tune it.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/v1.19/forgejo/releases&quot;&gt;Woodpecker CI release process&lt;/a&gt; was still used to publish the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.19.4-0&quot;&gt;latest v1.19.4-0&lt;/a&gt; release. It was retired and &lt;a href=&quot;https://codeberg.org/forgejo-contrib/forgejo-ci-woodpecker&quot;&gt;moved to its own repository&lt;/a&gt; as of Forgejo v1.20.&lt;/p&gt;
&lt;h2&gt;Governance and communication&lt;/h2&gt;
&lt;h3&gt;Wikipedia&lt;/h3&gt;
&lt;p&gt;Earlier than expected, &lt;a href=&quot;https://de.wikipedia.org/wiki/Forgejo&quot;&gt;Forgejo got its first Wikipedia page&lt;/a&gt;. It still needs secondary sources to be inserted to durably establish its notoriety but it has not yet been challenged and those can easily be added.&lt;/p&gt;
&lt;h3&gt;State of the Forge Federation: 2023 edition&lt;/h3&gt;
&lt;p&gt;In the &lt;a href=&quot;https://forgefriends.org/blog/2023/06/21/2023-06-state-forge-federation/&quot;&gt;State of the Forge Federation: 2023 edition&lt;/a&gt; published 21 June Forgejo plays a central role.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Late 2022 Forgejo, a new forge with a focus on federation was created. Dozens of people contributed to its making and it is now used in production by ten of thousands of users at Codeberg, Disroot, etc. This large and unforeseen undertaking diverted the energy of most contributors set to work on federation features [...]. [...] the foundations on which forge federation is being built have shifted and there is reason to hope it was for the best.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Matrix archive bot&lt;/h3&gt;
&lt;p&gt;The privacy expectations of people visiting the &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;Forgejo chatrooms&lt;/a&gt; is not high: they are fully aware they are publicly available and that anyone can visit them.&lt;/p&gt;
&lt;p&gt;But even in this context the sudden appearance of an archive bot from Matrix.org surprised a number of active participants. The bot was banned while &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/37&quot;&gt;the situation was discussed&lt;/a&gt;. A few weeks later &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/37#issuecomment-953680&quot;&gt;Matrix.org shut down this service&lt;/a&gt;. Forgejo community members were likely not the only ones to protest.&lt;/p&gt;
&lt;h3&gt;Governance&lt;/h3&gt;
&lt;p&gt;There has been some discussions about how teams are useful and why but no significant progress was made on governance otherwise.&lt;/p&gt;
&lt;h2&gt;Hardware&lt;/h2&gt;
&lt;p&gt;In addition to the hosting provided by Codeberg, Forgejo needs a very secure hardware to host the cryptographic keys used to sign releases as well as the most sensitive work of the security team. It also occasionally needs to run resource consuming Continuous Integration jobs, for instance when performing end to end testing to verify a release can actually be used in a production environment. Or when hardware emulation is required to verify multi-architecture binaries run as expected.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://www.hetzner.com/dedicated-rootserver/ex101&quot;&gt;new hardware&lt;/a&gt; was acquired and is being configured. It suffered intermittent failures that took significant time to figure out during the first week and was eventually replaced. These investigations were an opportunity to confirm that the stack on which Forgejo hardware is deployed is solid (Debian GNU/Linux and LXC). There was little doubt about it since Codeberg uses the same. But when a machine reboots randomly multiple times per day for not apparent reason and all hardware tests confirm it should not, it is a motivation to doubt about everything.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#security&quot;&gt;security team&lt;/a&gt; now uses resources hosted behind a VPN at &lt;code&gt;octopuce.forgejo.org&lt;/code&gt; to work together in a secure environment.&lt;/p&gt;
&lt;h2&gt;Roadmap&lt;/h2&gt;
&lt;p&gt;Forgejo is still in the process of &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/17&quot;&gt;defining its roadmap&lt;/a&gt;, a concrete strategy to move forward with federation, scaling and robustness.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/1&quot;&gt;NLnet grant&lt;/a&gt; that was awarded last month demanded a &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/src/branch/main/2022-12-01-nlnet/2023-06-workplan.md&quot;&gt;workplan&lt;/a&gt;. This provides some clarity about what the beneficiaries are set to accomplish in the following areas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UI and accessibility improvements&lt;/li&gt;
&lt;li&gt;DNS-Update-Checker RFC&lt;/li&gt;
&lt;li&gt;Cleaner Webhook system&lt;/li&gt;
&lt;li&gt;A new continuous integration agent&lt;/li&gt;
&lt;li&gt;Tools to produce a source distribution and multi-architecture Forgejo binaries&lt;/li&gt;
&lt;li&gt;An integrated release pipeline based on Forgejo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is not a roadmap just yet, but it can help create one.&lt;/p&gt;
&lt;h2&gt;Funding&lt;/h2&gt;
&lt;p&gt;During its General Assembly, Codeberg decided to &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/9#issuecomment-956394&quot;&gt;allocate funds to Forgejo&lt;/a&gt; and ideas are welcome to decide how they should be spent.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/13&quot;&gt;funding opportunity was discovered&lt;/a&gt; to raise as much as 600K€ with an amount of administrative work well suited for small companies. No application was sent by the deadline (6 July). However there is &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/14&quot;&gt;another opportunity&lt;/a&gt;, with a 31 July deadline.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/alex19srv&quot;&gt;https://codeberg.org/alex19srv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Beowulf&quot;&gt;https://codeberg.org/Beowulf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/circlebuilder&quot;&gt;https://codeberg.org/circlebuilder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cmonty14&quot;&gt;https://codeberg.org/cmonty14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DanielGibson&quot;&gt;https://codeberg.org/DanielGibson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DansLeRuSH&quot;&gt;https://codeberg.org/DansLeRuSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Dirk&quot;&gt;https://codeberg.org/Dirk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dumblob&quot;&gt;https://codeberg.org/dumblob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Fl1tzi&quot;&gt;https://codeberg.org/Fl1tzi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fluzz&quot;&gt;https://codeberg.org/fluzz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fr33domlover&quot;&gt;https://codeberg.org/fr33domlover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/grosmanal&quot;&gt;https://codeberg.org/grosmanal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/helge&quot;&gt;https://codeberg.org/helge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/hrnz&quot;&gt;https://codeberg.org/hrnz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JohnWalkerx&quot;&gt;https://codeberg.org/JohnWalkerx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/linos&quot;&gt;https://codeberg.org/linos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/macfanpl&quot;&gt;https://codeberg.org/macfanpl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/maralorn&quot;&gt;https://codeberg.org/maralorn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/meaz&quot;&gt;https://codeberg.org/meaz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mikaela&quot;&gt;https://codeberg.org/Mikaela&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Nulo&quot;&gt;https://codeberg.org/Nulo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oewbgoieqwb&quot;&gt;https://codeberg.org/oewbgoieqwb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/RaptaG&quot;&gt;https://codeberg.org/RaptaG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/samrland&quot;&gt;https://codeberg.org/samrland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/update.freak&quot;&gt;https://codeberg.org/update.freak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v1.20 release candidates</title><link>https://forgejo.org/2023-06-10-release-v1200-0-rc0/</link><guid isPermaLink="true">https://forgejo.org/2023-06-10-release-v1200-0-rc0/</guid><description>The first Forgejo v1.20 release candidate is ready for testing. Discover a more stable and secure internal CI/CD with its documentation, new API features, numerous UI/UX changes and user blocking for self-moderation.</description><pubDate>Sat, 10 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today the first release candidate for the upcoming Forgejo v1.20 release &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.20.0-0-rc0&quot;&gt;was published&lt;/a&gt; and the &lt;a href=&quot;/docs/v1.20&quot;&gt;documentation&lt;/a&gt; updated. It is meant for testing only: &lt;strong&gt;do not upgrade a
production instance with it&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The highlights are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;internal CI/CD&lt;/a&gt; known as &lt;code&gt;Forgejo Actions&lt;/code&gt; is now used by Forgejo for &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows&quot;&gt;testing and releasing&lt;/a&gt; the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/&quot;&gt;Forgejo Runner&lt;/a&gt;. It is still in its infancy and disabled by default but it is stable and secure enough to be activated on &lt;a href=&quot;https://code.forgejo.org&quot;&gt;Forgejo&apos;s own instance&lt;/a&gt;. The documentation was updated to explain how to &lt;a href=&quot;/docs/v1.20/admin/actions&quot;&gt;install&lt;/a&gt; and &lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;use&lt;/a&gt; it.&lt;/li&gt;
&lt;li&gt;The User Interface (UI) and User eXperience (UX) changed significantly and will require some adjustment from users and admins who created their own customized templates.&lt;/li&gt;
&lt;li&gt;New API features and endpoints were added (activity feeds, renaming users, uploading file, retrieving commits, etc.).&lt;/li&gt;
&lt;li&gt;Essential sub-systems were refactored (the queue system that handles background tasks such as checking pull requests, the logger used to display Forgejo&apos;s logs, ...). In theory these changes are transparent to the Forgejo user and admin but the risk of subtle regressions is real: do not hesitate to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;reach out&lt;/a&gt; if you suspect anything.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-20-0-0&quot;&gt;draft release notes&lt;/a&gt; have a categorized list of the most significant changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[A11Y]&lt;/code&gt; accessibility of the web interface.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[API]&lt;/code&gt; REST API.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[AUTH]&lt;/code&gt; authentication.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[CI]&lt;/code&gt; Forgejo&apos;s own Continuous Integration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[MODERATION]&lt;/code&gt; moderation tools.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[PACKAGES]&lt;/code&gt; package registries.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[REFACTOR]&lt;/code&gt; internal refactors.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[RSS]&lt;/code&gt; display and creation of RSS feeds.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[TEMPLATES]&lt;/code&gt; templating system used to create web pages, issues, mails, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[TIME]&lt;/code&gt; time localization and readability.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[UI / UX]&lt;/code&gt; User Interface and User eXperience.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[WEBHOOK]&lt;/code&gt; webhooks and notifications triggered when something happens in Forgejo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[WIKI]&lt;/code&gt; wiki features.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Make sure to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-20-0-0&quot;&gt;check the breaking
changes&lt;/a&gt;
(look for the string &lt;code&gt;BREAKING&lt;/code&gt;) and get your production instance
ready for when the v1.20 release is available.&lt;/p&gt;
&lt;p&gt;There was progress regarding federation with the integration of the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commits/branch/forgejo-f3&quot;&gt;F3 driver&lt;/a&gt;
in the codebase (an essential building block to synchronize forges
with each other) but nothing is ready for experimenting yet.&lt;/p&gt;
&lt;h3&gt;Try it out&lt;/h3&gt;
&lt;p&gt;The release candidate is published in &lt;a href=&quot;https://codeberg.org/forgejo-experimental&quot;&gt;the dedicated &quot;experimental&quot;
Forgejo organization&lt;/a&gt; and
can be downloaded from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Containers at &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/1.20&quot;&gt;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/1.20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Binaries at &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.20.0-0-rc0&quot;&gt;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.20.0-0-rc0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Checkout the v1.20 documentation section for detailed
&lt;a href=&quot;/docs/v1.20/admin/installation&quot;&gt;installation instructions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It will be updated based on your feedback until it becomes robust enough to be released.&lt;/p&gt;
&lt;h3&gt;Help write good release notes&lt;/h3&gt;
&lt;p&gt;The best release notes are meant to articulate the needs and benefits
of new features and the actions recommended for breaking changes so
Forgejo admins quickly know if it is of interest to them.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-20-0-0&quot;&gt;current draft release
notes&lt;/a&gt;
are still incomplete. They will be finished by the time the release is published
and you can help make them better.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;the issue tracker&lt;/a&gt;
for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;the Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - May 2023</title><link>https://forgejo.org/2023-05-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-05-monthly-update/</guid><description>NLnet awarded a grant to Forgejo to develop its release process and additional features, starting June 2023. User blocking was implemented to protect repositories you own from unwanted interactions, an essential self-service moderation tool. An extended installation section was added to the documentation as well as a user and admin documentation for Forgejo Actions.</description><pubDate>Wed, 07 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Forgejo was &lt;a href=&quot;https://nlnet.nl/project/Forgejo/&quot;&gt;awarded grant&lt;/a&gt; from &lt;a href=&quot;https://nlnet.nl/&quot;&gt;https://nlnet.nl/&lt;/a&gt; which will allow Codeberg e.V. and community members to get funding for improving the Forgejo release process and develop additional features, starting June 2023. It complements the on-going grant dedicated to federation: the features it will provide can only be deployed if releases are published and tested to work in a secure environment.&lt;/p&gt;
&lt;p&gt;The Codeberg moderation team is facing daily challenges that are a heavy burden. A new feature was implemented to allow &lt;a href=&quot;/docs/v1.20/user/blocking-user&quot;&gt;users to block someone&lt;/a&gt; in the repositories they own, allowing them to mitigate some of the most common problems. This not only helps relieve the pressure on the moderation team of any public Forgejo instance, it also is an essential building block for federation because it creates more opportunities for unwanted attention.&lt;/p&gt;
&lt;h2&gt;Development&lt;/h2&gt;
&lt;p&gt;Forgejo depends on Gitea and over a hundred other Go packages. But Gitea is not provided or designed as a package and that creates unique challenges when upgrading, which is done on a weekly basis. Forgejo developed &lt;a href=&quot;/docs/v1.20/developer/workflow&quot;&gt;workflows&lt;/a&gt; since its inception to reduce the workload.&lt;/p&gt;
&lt;p&gt;Every automated test reduces the scrutiny required from Forgejo contributors when upgrading Gitea. This is specially challenging when dealing with the authentication system because it has almost no test coverage. A mechanism to allow for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/8030&quot;&gt;dependency injection&lt;/a&gt; in integration tests was added as well as a simple OAuth2 test to demonstrate how to use it.&lt;/p&gt;
&lt;p&gt;When upgrading Forgejo, database migrations are applied using a set of files and a sequential numbering to ensure their consistency. Forgejo specific database modifications &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/32&quot;&gt;cannot conveniently be inserted in that sequence&lt;/a&gt;. Instead, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/795&quot;&gt;a separate migration directory&lt;/a&gt; was created and manages a set of tables prefixed with &lt;code&gt;forgejo_&lt;/code&gt;. It was used in the implementation of the user blocking feature.&lt;/p&gt;
&lt;h3&gt;User moderation feature&lt;/h3&gt;
&lt;p&gt;Moderation features now &lt;a href=&quot;/docs/v1.20/developer/workflow#moderation&quot;&gt;have their dedicated feature branch&lt;/a&gt;. It will contain tools that fall in two categories: self-service to help users in the simpler cases and helpers for a dedicated moderation team with admin privileges who take care of the entire Forgejo instance.&lt;/p&gt;
&lt;p&gt;The first to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/540&quot;&gt;land&lt;/a&gt; was &lt;a href=&quot;/docs/v1.20/user/blocking-user&quot;&gt;user blocking&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/802&quot;&gt;organization level blocking&lt;/a&gt; is in progress. Blocking another user is desirable if they are acting maliciously or are spamming your repository.&lt;/p&gt;
&lt;h3&gt;Documentation&lt;/h3&gt;
&lt;p&gt;A new section was added to the documentation with a very detailed explanation of how to &lt;a href=&quot;/docs/v1.20/admin/installation#installation-from-binary&quot;&gt;install and setup Forgejo using a binary&lt;/a&gt;. And also minimal install instructions for &lt;a href=&quot;/docs/v1.20/admin/installation#installation-with-docker&quot;&gt;container images&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Two other sections were also added for the &lt;a href=&quot;/docs/v1.20/admin/actions&quot;&gt;admin&lt;/a&gt; and &lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;user&lt;/a&gt; documentation of Forgejo Actions. It is still work in progress but provides the basics to &lt;a href=&quot;/docs/v1.20/user/actions#quick-start&quot;&gt;get started&lt;/a&gt; and replaces the &lt;a href=&quot;/2023-02-27-forgejo-actions&quot;&gt;older blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Forgejo Actions&lt;/h3&gt;
&lt;p&gt;A CI configuration for Forgejo was &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows&quot;&gt;created based on Forgejo Actions&lt;/a&gt;. Although it has been tested to work, the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.woodpecker&quot;&gt;Woodpecker CI&lt;/a&gt; is still used to validate pull requests. It will be run in parallel as soon as &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/36&quot;&gt;Codeberg enables Forgejo Actions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Forgejo extensively uses &lt;a href=&quot;https://linuxcontainers.org/lxc/&quot;&gt;LXC&lt;/a&gt; in the Forgejo runner. A set of shell scripts &lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/&quot;&gt;named lxc-helpers&lt;/a&gt; were developed, &lt;a href=&quot;https://code.forgejo.org/forgejo/lxc-helpers/actions?workflow=&amp;amp;state=closed&quot;&gt;tested&lt;/a&gt; (with Forgejo Actions) and documented in a separate repository. They are now used in various other contexts (the &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo&quot;&gt;setup-forgejo&lt;/a&gt; action or the &lt;a href=&quot;https://lab.enough.community/main/infrastructure/-/tree/master/playbooks/forgejo&quot;&gt;Ansible playbooks&lt;/a&gt; used to deploy Forgejo hardware).&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; saw &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases&quot;&gt;more releases&lt;/a&gt; and is turning more secure (releases are now GPG signed), stable and configurable.&lt;/p&gt;
&lt;h3&gt;Simpler and more secure release process&lt;/h3&gt;
&lt;p&gt;The release process was &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/230&quot;&gt;revisited&lt;/a&gt;, taking the opportunity of the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;brand new Forgejo runner&lt;/a&gt; to do so. In a nutshell it is a set of &lt;a href=&quot;/docs/v1.20/user/actions&quot;&gt;Forgejo Actions&lt;/a&gt; workflows that behave differently depending on the variables/secrets that are available. The repository is automatically mirrored in different organizations (experimental, integration, release) that have different variables/secrets to perform their expected role.&lt;/p&gt;
&lt;p&gt;Here is how it goes for the Forgejo runner:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;when in the &lt;code&gt;forgejo-integration&lt;/code&gt; organization, &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/build-release.yml&quot;&gt;build the release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;when in the &lt;code&gt;forgejo-release&lt;/code&gt; organization, safely hosted behind a VPN, use the GPG release key &amp;amp; secrets to sign and copy the release that was created in the &lt;code&gt;forgejo-integration&lt;/code&gt; organization to &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/publish-binary.yml&quot;&gt;publish the binary release&lt;/a&gt; and &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/publish-container-image.yml&quot;&gt;the container image&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hardware&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#devops&quot;&gt;devops team&lt;/a&gt; completed the deployment of the new hardware at &lt;code&gt;octopuce.forgejo.org&lt;/code&gt;. It is now in production and part of the &lt;a href=&quot;https://codeberg.org/forgejo/website/pulls/230&quot;&gt;new release process&lt;/a&gt; that was used to produce the latest releases of the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases&quot;&gt;Forgejo runner&lt;/a&gt;. It provides a VPN for the release team to secure the last step which involves a workflow to sign the binaries.&lt;/p&gt;
&lt;h2&gt;Funding&lt;/h2&gt;
&lt;p&gt;The NLnet grant application focused on producing quality Forgejo releases that are essential for federation to happen was &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/1#issuecomment-921831&quot;&gt;granted&lt;/a&gt;. It will provide funding to Codeberg e.V., &lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt; for their work starting in June 2023. It complements the on-going grant that provides funding for developing moderation features.&lt;/p&gt;
&lt;p&gt;The general assembly of Codeberg e.V. renewed its support to Forgejo and decided to allocate funding in 2023 to further Forgejo.&lt;/p&gt;
&lt;h2&gt;Reconciliation and Moderation&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;archive@matrix.org&lt;/code&gt; bot entered the Forgejo chatrooms and started operating. Some Forgejo community members did not approve and asked the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#moderation&quot;&gt;moderation team&lt;/a&gt; to ban it. A &lt;a href=&quot;https://codeberg.org/forgejo/discussions/issues/37&quot;&gt;discussion began&lt;/a&gt; and will be concluded by a decision to accept or reject this bot.&lt;/p&gt;
&lt;p&gt;A few months ago a chatroom was created and is dedicated to the reconciliation of Forgejo community members. Making peace after a dispute is not easy but it happened and sets an example that will hopefully inspire more reconciliations. Until that happens the moderation team offers to act as a buffer between community members so they can contribute to Forgejo, working side by side without being forced into stressful interactions.&lt;/p&gt;
&lt;h2&gt;Licensing&lt;/h2&gt;
&lt;p&gt;Following the decision that &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/20&quot;&gt;Forgejo will accept copylefted contributions&lt;/a&gt;, a blog post was &lt;a href=&quot;/2023-06-copyleft&quot;&gt;published to explain&lt;/a&gt; the reasoning. The next step is an agreement to &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/24&quot;&gt;accept contributions compatible with GPLv3-or-later&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/buhtz&quot;&gt;https://codeberg.org/buhtz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/circlebuilder&quot;&gt;https://codeberg.org/circlebuilder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/CleoMenezesJr&quot;&gt;https://codeberg.org/CleoMenezesJr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DanielGibson&quot;&gt;https://codeberg.org/DanielGibson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/eagle_idea&quot;&gt;https://codeberg.org/eagle_idea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/editfund-founder&quot;&gt;https://codeberg.org/editfund-founder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ekaitz-zarraga&quot;&gt;https://codeberg.org/ekaitz-zarraga&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fluzz&quot;&gt;https://codeberg.org/fluzz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fr33domlover&quot;&gt;https://codeberg.org/fr33domlover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/greenpete&quot;&gt;https://codeberg.org/greenpete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gwymor&quot;&gt;https://codeberg.org/gwymor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/JakobDev&quot;&gt;https://codeberg.org/JakobDev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kryptonian&quot;&gt;https://codeberg.org/kryptonian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/macfanpl&quot;&gt;https://codeberg.org/macfanpl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/matiaslavik&quot;&gt;https://codeberg.org/matiaslavik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mikaela&quot;&gt;https://codeberg.org/Mikaela&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/paintgoblin&quot;&gt;https://codeberg.org/paintgoblin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/prcek&quot;&gt;https://codeberg.org/prcek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Sevichecc&quot;&gt;https://codeberg.org/Sevichecc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/testserver22&quot;&gt;https://codeberg.org/testserver22&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tgy&quot;&gt;https://codeberg.org/tgy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thatonecalculator&quot;&gt;https://codeberg.org/thatonecalculator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/timmwille&quot;&gt;https://codeberg.org/timmwille&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wxiaoguang&quot;&gt;https://codeberg.org/wxiaoguang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zander&quot;&gt;https://codeberg.org/zander&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo welcomes copyleft contributions</title><link>https://forgejo.org/2023-06-copyleft/</link><guid isPermaLink="true">https://forgejo.org/2023-06-copyleft/</guid><description>The world of Free Software includes copylefted software and Git is one of the most widely known example. Distributing Forgejo under a permissive license means that all copyleft authors and software are excluded from participating in its development. The community made a decision to change that status quo and welcome copyleft contributions, just like Git.</description><pubDate>Tue, 06 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Developers who choose to publish their work under a copyleft license are excluded from participating in software that is published under a permissive license. That is at the opposite of the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MISSION.md#values&quot;&gt;core values&lt;/a&gt; of the Forgejo project and &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/20&quot;&gt;it was decided to also accept copylefted&lt;/a&gt; contributions. Will this change anything for Forgejo users? Not a thing since they already use and install one of the most successful copyleft software alongside Forgejo: Git. Will this change anything for Forgejo developers? Not a thing since they can keep contributing under the license of their choice. &lt;strong&gt;Just like Git, Forgejo will be copyleft.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Forgejo users already welcome copyleft&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Forge_(software)&quot;&gt;software forge&lt;/a&gt;, an online development environment, based on &lt;a href=&quot;https://en.wikipedia.org/wiki/Git&quot;&gt;Git&lt;/a&gt;. &lt;strong&gt;Both Forgejo and Git must be installed together&lt;/strong&gt;, either as individual binaries or bundled into the &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.19-rootless&quot;&gt;official container images&lt;/a&gt;. The license of Git is &lt;a href=&quot;https://git-scm.com/about/free-and-open-source&quot;&gt;GNU GPLv2&lt;/a&gt; which is a &lt;a href=&quot;https://www.gnu.org/licenses/copyleft.html&quot;&gt;copyleft license&lt;/a&gt;. Although the Forgejo codebase includes basic support for &lt;a href=&quot;https://github.com/go-git/go-git&quot;&gt;go-git&lt;/a&gt;, a Go package distributed under a permissive license that can be used in place of Git, it is not supported or packaged because it is &lt;a href=&quot;https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md&quot;&gt;not fully compatible&lt;/a&gt; and could corrupt Git repositories.&lt;/p&gt;
&lt;p&gt;There are legal obligations attached to copyleft software which are, in a nutshell, to offer the source code with the binary under the same license. For instance, if an employee was to distribute a Git binary to someone else, the organization they work for can be required to also provide the &lt;a href=&quot;https://sfconservancy.org/copyleft-compliance/glossary.html&quot;&gt;complete and corresponding source&lt;/a&gt;. And if they fail to do so, they may loose all their rights under the license, at least until the copyright holders agree to grant them back. For this reason some organizations exclude copyelfted software entirely. However, &lt;strong&gt;when they use Git, it means the legal counsel has no objection to copylefted software.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;What will change in Forgejo?&lt;/h2&gt;
&lt;p&gt;The license of Forgejo will change to be copyleft when a copylefted work is merged. The most likely candidate is, for instance, when a Go package is discovered that provides an interesting functionality.&lt;/p&gt;
&lt;p&gt;Before it happens a decision will be made by the community to choose a copyleft license, in accordance to the &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/DECISION-MAKING.md&quot;&gt;Forgejo decision making process&lt;/a&gt;. The chosen license will apply to Forgejo as a whole (binary and sources) but each file within the codebase will retain its own license. This is nothing new as Forgejo &lt;a href=&quot;https://code.forgejo.org/assets/licenses.txt&quot;&gt;already includes various licenses&lt;/a&gt; and contributors are expected to agree to the &lt;a href=&quot;/docs/v1.20/developer/dco&quot;&gt;Developer Certificate of Origin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Developers who feel strongly about exclusively publishing their work under a permissive license can keep doing so when working on Forgejo. By the terms of this permissive license, they accept that their work can be sublicensed and redistributed under a proprietary license. And they also accept that it can be sublicensed and redistributed as part of Forgejo, under a copyleft license.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - April 2023</title><link>https://forgejo.org/2023-04-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-04-monthly-update/</guid><description>Codeberg upgraded to Forgejo v1.19 and, as can be expected from the largest instance in existence, hit a performance issue which was dealt with quickly. The security of Forgejo actions and the release process was a focus with solutions being found that involve LXC and a VPN. Federation is taking a step forward with the F3 driver entering the Forgejo development branch.</description><pubDate>Sat, 20 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Codeberg upgraded to Forgejo v1.19 and, as can be expected from the largest instance in existence, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/680&quot;&gt;hit a performance issue&lt;/a&gt; which was dealt with quickly.&lt;/p&gt;
&lt;p&gt;The security of Forgejo actions and the release process was a strong focus. It is critical for Forgejo actions to be used in production safely: a random Codeberg user must be able to rely on the CI by submitting a pull request without putting the underlying infrastructure at risk. A solution based on &lt;a href=&quot;https://linuxcontainers.org/lxc/&quot;&gt;LXC&lt;/a&gt; is implemented. To improve the security of the release pipeline, the devops team is deploying a Forgejo instance and runner on a dedicated hardware behind a VPN to sign the binaries.&lt;/p&gt;
&lt;p&gt;There also are noteworthy activities in the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/delightful-forgejo&quot;&gt;wider Forgejo community&lt;/a&gt; not covered in this update.&lt;/p&gt;
&lt;h3&gt;Forgejo v1.19 point releases&lt;/h3&gt;
&lt;p&gt;Three point releases were published (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-19-1-0&quot;&gt;1.19.1-0&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-19-2-0&quot;&gt;1.19.2-0&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-19-3-0&quot;&gt;1.19.3-0&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Codeberg.org waited until Forgejo v1.19 proved to be stable enough to upgrade. It did not go smoothly because of a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/680&quot;&gt;performance issue&lt;/a&gt;. However, a diagnostic and a workaround were found and applied within 24h. This problem impacts all Forgejo v1.19 instances but was only noticed in Codeberg.org because of its scale. It will be properly fixed in the next point release.&lt;/p&gt;
&lt;p&gt;To make them easier to digest for the Forgejo administrators and users, the release notes now have detailed explanations of the most prominent changes. This is specially useful for security fixes to better understand their impact and evaluate the urgency of the update on a case by case basis.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;/docs/v1.19/user/semver&quot;&gt;Forgejo semantic version&lt;/a&gt; is included in the release notes as a reminder that it can be used for scripting to automatically identify a release that includes a breaking change and avoid unexpected downtime.&lt;/p&gt;
&lt;h3&gt;A step towards federation&lt;/h3&gt;
&lt;p&gt;For federation to happen, Forgejo instances must be able to mirror each other. It is different from being able to migrate a project from one instance to another. The &lt;a href=&quot;https://forum.forgefriends.org/t/about-the-friendly-forge-format-f3/681&quot;&gt;F3&lt;/a&gt; reference &lt;a href=&quot;https://lab.forgefriends.org/friendlyforgeformat/gof3&quot;&gt;implementation&lt;/a&gt;, which is still in development stage, will allow for mirroring a single issue as well as an entire project.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commits/branch/forgejo-f3&quot;&gt;F3 driver&lt;/a&gt; was developed for Forgejo and merged into the development branch. It is not ready for experimenting but it passes some integration tests and will be part of the weekly round of rebase together with the other Forgejo feature branches.&lt;/p&gt;
&lt;h3&gt;Forgejo actions progress&lt;/h3&gt;
&lt;p&gt;As an experimental feature, &lt;a href=&quot;/2023-02-27-forgejo-actions&quot;&gt;Forgejo actions&lt;/a&gt; keeps improving. The &lt;a href=&quot;https://codeberg.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; saw a few more releases, &lt;a href=&quot;https://codeberg.org/forgejo/runner/src/branch/main/.forgejo/workflows/release.yml&quot;&gt;using itself&lt;/a&gt; in a nicely recursive way.&lt;/p&gt;
&lt;p&gt;It is developed on &lt;a href=&quot;https://code.forgejo.org/&quot;&gt;code.forgejo.org&lt;/a&gt; which runs Forgejo v1.19 and includes a CLI that allows it to obtain a registration token: &lt;code&gt;forgejo actions generate-runner-token&lt;/code&gt;. It was not documented or advertised which led to confusion when it was changed to match the Gitea implementation that came later. It is fine when a feature is experimental. But it was a reminder that care must be taken when introducing new features in Forgejo so they do not conflict with Gitea and other dependencies.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://linuxcontainers.org/lxc/&quot;&gt;LXC&lt;/a&gt; is confirmed to be a good option for job isolation. The runner is based on &lt;a href=&quot;https://github.com/nektos/act/&quot;&gt;ACT&lt;/a&gt; which is designed to run jobs on a local machine and assumes its user is trusted. When running a job from a pull request authored by less trusted users, their ability to use docker as a mean to access files from the host becomes problematic. One option is to spawn a &lt;a href=&quot;https://hub.docker.com/_/docker/tags?page=1&amp;amp;name=dind&quot;&gt;dind&lt;/a&gt; on every job. Another is to run the job in LXC.&lt;/p&gt;
&lt;h3&gt;Hardware infrastructure&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#devops&quot;&gt;devops team&lt;/a&gt; was &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/21&quot;&gt;appointed&lt;/a&gt; in accordance to the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/governance/src/branch/main/DECISION-MAKING.md&quot;&gt;decision making process&lt;/a&gt;. It is responsible for the day to day operations of &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt;, &lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt; and &lt;a href=&quot;https://forgejo-ci.codeberg.org&quot;&gt;https://forgejo-ci.codeberg.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A new hardware at &lt;code&gt;octopuce.forgejo.org&lt;/code&gt; is being deployed and provides a VPN for the release team to secure the last step which involves a pipeline to sign the binaries. It reduces the &lt;a href=&quot;https://en.wikipedia.org/wiki/Attack_surface&quot;&gt;attack surface&lt;/a&gt; compared to using a public facing Forgejo instance to do the same. It will first be used for releasing the Forgejo runner and, when stabilized, Forgejo itself.&lt;/p&gt;
&lt;h2&gt;Grant applications&lt;/h2&gt;
&lt;p&gt;The NLnet grant application focused on producing quality Forgejo releases that are essential for federation to happen was &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/1#issuecomment-911709&quot;&gt;accepted to the next step&lt;/a&gt;. This is the last one and it will few weeks before the final decision is known.&lt;/p&gt;
&lt;h2&gt;Moderation team&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/TEAMS.md#moderation&quot;&gt;moderation team&lt;/a&gt; now has &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/23&quot;&gt;one member&lt;/a&gt;. All moderation actions are &lt;a href=&quot;https://codeberg.org/forgejo/governance/src/branch/main/MODERATION-PROCESS.md&quot;&gt;bound to the moderation process&lt;/a&gt; for transparency and audit by the Forgejo community.&lt;/p&gt;
&lt;h2&gt;Licensing&lt;/h2&gt;
&lt;p&gt;It was decided on principle that &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/20&quot;&gt;Forgejo would accept copylefted contributions&lt;/a&gt;. Before it happens a decision will need be made on the choice of a license. Until then the licensing terms of Forgejo are not modified.&lt;/p&gt;
&lt;h2&gt;We Forge&lt;/h2&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bat&quot;&gt;https://codeberg.org/bat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/borega&quot;&gt;https://codeberg.org/borega&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/braydofficial&quot;&gt;https://codeberg.org/braydofficial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/carlokok&quot;&gt;https://codeberg.org/carlokok&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/circlebuilder&quot;&gt;https://codeberg.org/circlebuilder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DanielGibson&quot;&gt;https://codeberg.org/DanielGibson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fluzz&quot;&gt;https://codeberg.org/fluzz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fr33domlover&quot;&gt;https://codeberg.org/fr33domlover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kuhnchris&quot;&gt;https://codeberg.org/kuhnchris&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/LordMZTE&quot;&gt;https://codeberg.org/LordMZTE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Lvceo&quot;&gt;https://codeberg.org/Lvceo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/msrd0&quot;&gt;https://codeberg.org/msrd0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NextFire&quot;&gt;https://codeberg.org/NextFire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/silverwind&quot;&gt;https://codeberg.org/silverwind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/soas&quot;&gt;https://codeberg.org/soas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/spooky-overwrite&quot;&gt;https://codeberg.org/spooky-overwrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Valenoern&quot;&gt;https://codeberg.org/Valenoern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/WRMSR&quot;&gt;https://codeberg.org/WRMSR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wxiaoguang&quot;&gt;https://codeberg.org/wxiaoguang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zander&quot;&gt;https://codeberg.org/zander&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - March 2023</title><link>https://forgejo.org/2023-03-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-03-monthly-update/</guid><description>Forgejo v1.19, the first major upgrade, was published by the release team. Although still experimental, Forgejo Actions is now used daily to develop and maintain the runner. The `setup-forgejo` action was created to spawn a Forgejo instance for the duration of a test.</description><pubDate>Mon, 10 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.19.0-2&quot;&gt;Forgejo v1.19&lt;/a&gt; was published. It is the first major upgrade and was a critical milestone to verify the development strategy of the soft fork actually works. The release team was &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues?q=application%20to%20release%20team&amp;amp;type=all&amp;amp;sort=&amp;amp;state=closed&amp;amp;labels=&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;legitimized by the community&lt;/a&gt; in accordance to the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/governance/src/branch/main/DECISION-MAKING.md&quot;&gt;decision making process&lt;/a&gt;, as promised when Forgejo was created.&lt;/p&gt;
&lt;p&gt;Forgejo Actions, the experimental integrated CI, now runs on the new Forgejo infrastructure which includes two instance. One &lt;a href=&quot;https://next.forgejo.org&quot;&gt;for experimenting and debugging&lt;/a&gt; and another dedicated to &lt;a href=&quot;https://code.forgejo.org&quot;&gt;Forgejo development&lt;/a&gt;. In a spirit of dogfooding, the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; that spawns CI jobs is now &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/release.yml&quot;&gt;released using Forgejo Actions&lt;/a&gt;. A new action, &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo&quot;&gt;setup-forgejo&lt;/a&gt; was also created to conveniently spawn a Forgejo instance for the duration of a test.&lt;/p&gt;
&lt;p&gt;There also are noteworthy activities in the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/delightful-forgejo&quot;&gt;wider Forgejo community&lt;/a&gt; not covered in this update.&lt;/p&gt;
&lt;h3&gt;Forgejo v1.19 release&lt;/h3&gt;
&lt;p&gt;On 21 March 2023 &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.19.0-2&quot;&gt;Forgejo v1.19&lt;/a&gt; was &lt;a href=&quot;/2023-03-release-v1190-2&quot;&gt;released&lt;/a&gt;. It was challenging to figure out how &lt;a href=&quot;/docs/v1.19&quot;&gt;the new documentation&lt;/a&gt; and additional binaries required for &lt;a href=&quot;/2023-02-27-forgejo-actions&quot;&gt;Forgejo Actions&lt;/a&gt; fit in.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The documentation is versioned and maintained in a directory that has the same name as the Forgejo release&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; is released independently and tested to be compatibility with existing Forgejo releases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Forgejo v1.19 includes all of Gitea v1.19 and the upgrade went smoothly. If Gitea was a Go package with a documented API it would be as easy as upgrading one of the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/4c132e77ea2cba9a1161f4cfc18b82b9e2e1b35f/go.mod&quot;&gt;other Forgejo dependencies&lt;/a&gt;. But it is not and that&apos;s where the difficulty of a soft fork resides.&lt;/p&gt;
&lt;p&gt;The Forgejo strategy, since its inception, is to rebase &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/milestones?state=closed&amp;amp;q=rebase&quot;&gt;on top of Gitea weekly&lt;/a&gt;. The Forgejo commit series are kept to a minimum (for instance by &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/590&quot;&gt;squashing related commits&lt;/a&gt;) and conflicts, if any, are resolved (for instance &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/pulls/552&quot;&gt;changing from less to css&lt;/a&gt; required reworking the commit implementing the Forgejo themes). It turns out to be sustainable and the associated maintenance work stays the same over time. Considering that hundreds of commits have been merged in Forgejo over the past four months, there were many opportunities for a rebase to go wrong and get stuck because of conflicts. The absence of problems during the Forgejo v1.19 release is a sign that this strategy is working.&lt;/p&gt;
&lt;p&gt;When Forgejo started, people stepped up to create the releases. There was no decision making process at the time and no clear way for the community to agree that they could be trusted with this role. They were part of &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/commit/f46d4279c7b562648bbc17afedfe044b774185ac/CONTRIBUTING/GOVERNANCE.md#interim-forgejo-governance&quot;&gt;an interim governance&lt;/a&gt; and pledged to resign as soon as a governance was in place. They fulfilled this promise 2 March 2023 by &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues?q=application%20to%20release%20team&amp;amp;type=all&amp;amp;sort=&amp;amp;state=closed&amp;amp;labels=&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;applying&lt;/a&gt; to become legitimate members of the Forgejo release team in accordance to the &lt;a href=&quot;https://codeberg.org/forgejo-contrib/governance/src/branch/main/DECISION-MAKING.md&quot;&gt;decision making process&lt;/a&gt;. They got an agreement a few weeks later and there now is a Forgejo release team agreed upon by the Forgejo community.&lt;/p&gt;
&lt;h3&gt;A dedicated Forgejo infrastructure&lt;/h3&gt;
&lt;h4&gt;next.forgejo.org&lt;/h4&gt;
&lt;p&gt;A volatile Forgejo v1.19 instance dedicated to trying new features and demonstrate bugs is now running at &lt;a href=&quot;https://next.forgejo.org&quot;&gt;https://next.forgejo.org&lt;/a&gt;. It is &lt;a href=&quot;/&quot;&gt;linked from the website&lt;/a&gt; and in the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/new?template=.gitea%2fISSUE_TEMPLATE%2fbug-report.md&quot;&gt;bug report template&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;code.forgejo.org&lt;/h4&gt;
&lt;p&gt;The experimental integrated CI that comes with Forgejo v1.19 is not just a new feature, it also depends on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a new binary, &lt;a href=&quot;https://code.forgejo.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt;, that is responsible for running the CI jobs&lt;/li&gt;
&lt;li&gt;a repository of &lt;a href=&quot;https://code.forgejo.org/actions&quot;&gt;reusable Free Software Actions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They both need to be tested and it would be convenient if Forgejo Actions was enabled on Codeberg. There would be no need for Codeberg to provide a runner: it can be run and connected independently, using a token specific to a given repository. Forgejo would spawn a runner and it would work without requiring any resource from Codeberg. However, there are at least two reasons for waiting until Forgejo v1.20 or v1.21 before enabling this feature on Codeberg, even without providing runners to Codeberg users:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it is still experimental and fragile&lt;/li&gt;
&lt;li&gt;it may have security issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To solve that problem an instance of Forgejo was installed at &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt;. It has a registration open to Codeberg users and is dedicated to Forgejo related development. It has Actions enabled and provides a runner to selected repositories.&lt;/p&gt;
&lt;h4&gt;The devops team&lt;/h4&gt;
&lt;p&gt;These machines need devops and &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues?type=all&amp;amp;state=open&amp;amp;labels=&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=0&amp;amp;q=devops+team&quot;&gt;applications to the devops team&lt;/a&gt; are in progress. Their role is, in a nutshell, to keep all machines Forgejo depends on in a healthy state. That includes the &lt;a href=&quot;https://codeberg.org/forgejo/sustainability#hardware&quot;&gt;new machine&lt;/a&gt; made available to the Forgejo project, which could be used to host code.forgejo.org.&lt;/p&gt;
&lt;h3&gt;Dogfooding Forgejo Actions&lt;/h3&gt;
&lt;p&gt;Forgejo provides some essential Actions in a &lt;a href=&quot;https://code.forgejo.org/actions&quot;&gt;dedicated organization&lt;/a&gt;. As one can expect of any function in Go or Python, Actions are not immune to typos, regressions or subtle misbehavior, just like the software they are designed to test. Testing is even more important in a distributed environment where each Action is maintained by different groups of people and have their own lifecycle.&lt;/p&gt;
&lt;p&gt;The CI of the &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/&quot;&gt;Forgejo Runner&lt;/a&gt; itself relies on workflows that use actions for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Running &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/test.yml&quot;&gt;unit tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/release.yml&quot;&gt;Publishing&lt;/a&gt; its own &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases&quot;&gt;releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.forgejo.org/forgejo/runner/src/branch/main/.forgejo/workflows/release.yml&quot;&gt;Integration testing&lt;/a&gt; to verify it performs as intended with a live Forgejo instance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Forgejo Runner integration tests &lt;a href=&quot;https://codeberg.org/forgejo/runner/src/commit/bcd6096e5b0fb701eca85a391c0dafb0f606fc85/.forgejo/workflows/integration.yml#L16-L21&quot;&gt;uses&lt;/a&gt; a new &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo&quot;&gt;setup-forgejo action&lt;/a&gt;. It runs a Forgejo instance for the duration of the test, very much like a MySQL or PostgreSQL service. It can conveniently be used by software that depends on Forgejo, for instance to test interactions with the Forgejo API instead of relying on mocks.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;setup-forgejo&lt;/code&gt; action uses itself, recursively, for &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo/src/branch/main/.forgejo/workflows/integration.yml&quot;&gt;integration testing&lt;/a&gt; with two levels of nesting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Forgejo 0: &lt;a href=&quot;https://code.forgejo.org&quot;&gt;https://code.forgejo.org&lt;/a&gt; is a Forgejo instance that hosts &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo&quot;&gt;setup-forgejo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Forgejo 1: when a pull request is proposed &lt;code&gt;setup-forgejo&lt;/code&gt;, the CI job creates a brand new Forgejo instance with a runner to experiment with the proposed change.&lt;/li&gt;
&lt;li&gt;Forgejo 2: The &lt;a href=&quot;https://code.forgejo.org/actions/setup-forgejo/src/branch/main/testdata/sanity-checks/.forgejo/workflows/test.yml&quot;&gt;experiment&lt;/a&gt; consists of running &lt;code&gt;setup-forgejo&lt;/code&gt; and verify the Forgejo instance it creates actually works as expected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is &lt;a href=&quot;https://code.forgejo.org/forgejo/act/commit/bc24ebba1bceacf5c2d890caef9ad824ad9d2f80&quot;&gt;made possible&lt;/a&gt; by enabling &lt;a href=&quot;https://linuxcontainers.org/&quot;&gt;LXC&lt;/a&gt; system containers in the runner. With the additional benefit of allowing &lt;code&gt;systemd&lt;/code&gt; to run, installing &lt;code&gt;docker&lt;/code&gt; instead of &lt;code&gt;dind&lt;/code&gt; etc.&lt;/p&gt;
&lt;h3&gt;The Forgejo Community is healing&lt;/h3&gt;
&lt;p&gt;In February 2023 someone new (who wasn&apos;t a contributor that the project is relying on) joined the chat and issue tracker, spoke repeatedly in ways that was hurtful/painful to Forgejo community members, and did not seem to have capacity to speak more sensitively, despite offers for support and repeated requests. It was eventually decided to &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/8&quot;&gt;remove this person from the project&lt;/a&gt; during a year. But the tension they created did not dissipate instantly. In March 2023 it distracted community members from productive and important work on governance, strategy and development. Some community members went silent, others were on edge and &lt;a href=&quot;https://codeberg.org/forgejo/governance/issues/16&quot;&gt;more moderation actions were taken&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is in the nature of inclusive communities to be subject to that sort of trouble in their infancy, when they are still fragile. Some can be destroyed for good, others may choose to be less inclusive to better protect the members of their inner circles. Something different is happening in Forgejo. Late March it went back to be the quiet and productive space it once was. Community members who were silent during the troubles came back. A &lt;a href=&quot;https://codeberg.org/forgejo/governance/pulls/17/files&quot;&gt;moderation process&lt;/a&gt; was proposed and was field tested. It is a little early to be sure but it appears the community is healing and is now better protected from negative influence, without sacrificing on inclusiveness.&lt;/p&gt;
&lt;h3&gt;Grant applications&lt;/h3&gt;
&lt;p&gt;As a followup to questions sent by NLnet on &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/1&quot;&gt;a grant application&lt;/a&gt; to create a Forgejo distribution, potential beneficiaries worked on a &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/1#issuecomment-855819&quot;&gt;detailed project plan&lt;/a&gt;. It was sent late March and it will take a few weeks before a reply is received to determine if it is allowed to proceed to the next step.&lt;/p&gt;
&lt;p&gt;Another &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/4#issuecomment-840994&quot;&gt;grant application focused on improving Forgejo UI/UX&lt;/a&gt; was declined.&lt;/p&gt;
&lt;h3&gt;We Forge&lt;/h3&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aral&quot;&gt;https://codeberg.org/aral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/circlebuilder&quot;&gt;https://codeberg.org/circlebuilder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/cweiske&quot;&gt;https://codeberg.org/cweiske&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/delvh&quot;&gt;https://codeberg.org/delvh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Eragon&quot;&gt;https://codeberg.org/Eragon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fr33domlover&quot;&gt;https://codeberg.org/fr33domlover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fsologureng&quot;&gt;https://codeberg.org/fsologureng&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/GamePlayer-8&quot;&gt;https://codeberg.org/GamePlayer-8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Gusted&quot;&gt;https://codeberg.org/Gusted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jan_x7&quot;&gt;https://codeberg.org/jan_x7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jerger&quot;&gt;https://codeberg.org/jerger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KOLANICH&quot;&gt;https://codeberg.org/KOLANICH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/NextFire&quot;&gt;https://codeberg.org/NextFire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/redwerkz&quot;&gt;https://codeberg.org/redwerkz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SHuRiKeN&quot;&gt;https://codeberg.org/SHuRiKeN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tallship&quot;&gt;https://codeberg.org/tallship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TheEvilSkeleton&quot;&gt;https://codeberg.org/TheEvilSkeleton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/trymeout&quot;&gt;https://codeberg.org/trymeout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/uda&quot;&gt;https://codeberg.org/uda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wxiaoguang&quot;&gt;https://codeberg.org/wxiaoguang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xtex&quot;&gt;https://codeberg.org/xtex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zander&quot;&gt;https://codeberg.org/zander&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v1.19 is available</title><link>https://forgejo.org/2023-03-release-v1190-2/</link><guid isPermaLink="true">https://forgejo.org/2023-03-release-v1190-2/</guid><description>Forgejo v1.19 is available and comes with an extensive documentation, an experimental CI, incoming emails, scoped access tokens, registries for Cargo, Chef &amp; Conda and more.</description><pubDate>Tue, 21 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.19.0-2&quot;&gt;Forgejo v1.19.0-2&lt;/a&gt;
was released. It comes with an extensive &lt;a href=&quot;/docs/v1.19/user&quot;&gt;user guide&lt;/a&gt;, derived for the most part from the &lt;a href=&quot;https://docs.codeberg.org/&quot;&gt;Codeberg documentation&lt;/a&gt;. The new &lt;a href=&quot;/docs/v1.19/admin&quot;&gt;admin guide&lt;/a&gt; covers upgrades and configuration of Forgejo instances.&lt;/p&gt;
&lt;p&gt;The most prominent new features are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/2023-02-27-forgejo-actions&quot;&gt;Actions&lt;/a&gt;&lt;/strong&gt;: an experimental CI/CD, although not ready for real world usage, is present and &lt;a href=&quot;/2023-02-27-forgejo-actions&quot;&gt;can be used to run a demo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.19/admin/incoming-email&quot;&gt;Incoming emails&lt;/a&gt;&lt;/strong&gt;: you can now set up Forgejo to receive incoming emails. When enabled, it is possible to reply to an email notification from Forgejo and (i) add a comment to an issue or a pull request, (ii) unsubscribe to notifications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.19/user/oauth2-provider#scoped-tokens&quot;&gt;Scoped access tokens&lt;/a&gt;&lt;/strong&gt;: Forgejo access token, used with the &lt;a href=&quot;/docs/v1.19/user/api-usage&quot;&gt;API&lt;/a&gt;, can now have a &quot;scope&quot; that limits what it can access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/docs/v1.19/user/packages&quot;&gt;Package registries&lt;/a&gt;&lt;/strong&gt; now support &lt;a href=&quot;/docs/v1.19/user/packages/cargo&quot;&gt;Cargo&lt;/a&gt;, &lt;a href=&quot;/docs/v1.19/user/packages/conda&quot;&gt;Conda&lt;/a&gt; and &lt;a href=&quot;/docs/v1.19/user/packages/chef&quot;&gt;Chef&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read more &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-19-0-2&quot;&gt;in the Forgejo v1.19.0-2 release notes&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Get Forgejo v1.19&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-19-0-2&quot;&gt;release notes&lt;/a&gt;
for more information.&lt;/p&gt;
&lt;h3&gt;Upgrading&lt;/h3&gt;
&lt;p&gt;Carefully read
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-19-0-2&quot;&gt;the breaking changes&lt;/a&gt;
section of the release notes.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.19.0-2&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.19.0-2&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.19&quot;&gt;&lt;code&gt;1.19&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;1.19.x&lt;/code&gt; point release automatically.&lt;/p&gt;
&lt;p&gt;Make sure to check the &lt;a href=&quot;/docs/v1.19/admin/upgrade&quot;&gt;Forgejo upgrade
documentation&lt;/a&gt; for
recommendations on how to properly backup your instance before the
upgrade. It also covers upgrading from Gitea, as far back as version 1.2.0.
Forgejo includes all of Gitea v1.19, with improvements.&lt;/p&gt;
&lt;p&gt;The Forgejo instances &lt;a href=&quot;/2023-02-12-tags&quot;&gt;built from an incorrect
tag&lt;/a&gt; can safely be upgraded.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt;
for feature requests or bug reports, find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo gets an integrated CI named Actions</title><link>https://forgejo.org/2023-02-27-forgejo-actions/</link><guid isPermaLink="true">https://forgejo.org/2023-02-27-forgejo-actions/</guid><description>With the release of Forgejo v1.19 comes an experimental integrated CI similar to GitHub. It aims at being easier to configure than an external CI and is controlled via the Forgejo web interface.</description><pubDate>Mon, 27 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Prior to Forgejo v1.19 running CI jobs required a third party software such as Woodpecker CI. It has its own web interface, relies on webhooks to be notified something changed in a repository and relies on the Forgejo API to figure out user permissions or access to private repositories. When it is finished, the error or success is also sent back to Forgejo via the API, with a link the user needs to click to get more details. It works well enough and Forgejo has been using Woodpecker CI from day one, for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.woodpecker&quot;&gt;testing pull requests&lt;/a&gt; or &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/releases&quot;&gt;publishing releases&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With v1.19 comes an experimental CI (not ready for production just yet) integrated in Forgejo. The CI jobs are configured with a syntax that is similar to GitHub Actions:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# .forgejo/workflows/demo.yaml
name: Demo
run-name: ${{ github.actor }} is testing
on: [push]
jobs:
  Explore-CI:
    runs-on: ubuntu-latest
    steps:
      - run: echo &quot;The job was automatically triggered by a ${{ github.event_name }} event.&quot;
      - run: echo &quot;This job is now running on a ${{ runner.os }} server.&quot;
      - run: echo &quot;The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}.&quot;
      - name: Check out repository code
        uses: actions/checkout@v3
      - run: echo &quot;The ${{ github.repository }} repository has been cloned to the runner.&quot;
      - run: echo &quot;The workflow is now ready to test your code on the runner.&quot;
      - name: List files in the repository
        run: |
          ls ${{ github.workspace }}
      - run: echo &quot;This job&apos;s status is ${{ job.status }}.&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the results are displayed in the Forgejo web interface:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Try it out&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;WARNING: The following procedure was effective for setting up a test instance when early versions of the Forgejo runner were under development, but the details are now outdated. Precompiled &lt;a href=&quot;https://code.forgejo.org/forgejo/runner/releases&quot;&gt;runner binaries&lt;/a&gt; are available and you should refer to the &lt;a href=&quot;https://forgejo.org/docs/latest/admin/actions/&quot;&gt;Forgejo Actions administrator documentation&lt;/a&gt; for runner setup instructions.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a Forgejo v1.19 instance with the user root password admin1234&lt;pre&gt;&lt;code&gt;docker run --name forgejo -e FORGEJO__security__INSTALL_LOCK=true -e FORGEJO__actions__ENABLED=true -d codeberg.org/forgejo-experimental/forgejo:1.19
docker exec --user 1000 forgejo forgejo admin user create --admin --username root --password admin1234 --email root@example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Get the IP of the Forgejo instance (172.17.0.2 in the following)&lt;pre&gt;&lt;code&gt;docker exec --user 1000 forgejo ip a
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Login at &lt;a href=&quot;http://172.17.0.2:3000/&quot;&gt;http://172.17.0.2:3000/&lt;/a&gt; with user root password admin1234&lt;/li&gt;
&lt;li&gt;Create a test project and activate actions in the settings
&lt;/li&gt;
&lt;li&gt;Get the runner token from the runner tab in the &lt;code&gt;Site administration&lt;/code&gt; (&lt;code&gt;mytoken&lt;/code&gt; in the following)
&lt;/li&gt;
&lt;li&gt;Register and start the runner&lt;pre&gt;&lt;code&gt;git clone https://codeberg.org/forgejo/runner
cd runner
git checkout v1.1.0
make build
./forgejo-runner register --name myrunner --no-interactive --instance http://172.17.0.2:3000 --token mytoken
./forgejo-runner daemon
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Add the &lt;code&gt;.forgejo/workflows/demo.yaml&lt;/code&gt; file above to the test repository, via the web interface&lt;/li&gt;
&lt;li&gt;Go to the &lt;code&gt;Actions&lt;/code&gt; tab of the project and watch it run to completion
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;How does it work?&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;forgejo-runner&lt;/code&gt; creates a docker container and runs the job inside it. It can be shell commands (e.g. &lt;code&gt;ls ${{ github.workspace }}&lt;/code&gt;) or &lt;code&gt;actions&lt;/code&gt; (e.g. &lt;code&gt;uses: actions/checkout@v3&lt;/code&gt;). The actions are references to repositories that are cloned and executed. For instance &lt;code&gt;actions/checkout&lt;/code&gt; will clone &lt;a href=&quot;https://codeberg.org/actions/checkout&quot;&gt;https://codeberg.org/actions/checkout&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The container image used to run the container is specified by &lt;code&gt;runs-on: ubuntu-latest&lt;/code&gt; but it may not contain all the tools required to complete the job. Reason why some actions are allowed to create a new container based on other images. In the end a single job may involve running multiple containers and they are all terminated when the job completes.&lt;/p&gt;
&lt;h3&gt;Limitations&lt;/h3&gt;
&lt;p&gt;The implementation is very new and has many limitations which makes it unfit for production.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There is no support to run services such as a Postgres database&lt;/li&gt;
&lt;li&gt;The container running the job is not systemd capable&lt;/li&gt;
&lt;li&gt;There is no guarantee of compatibility with GitHub Actions, although the syntax of the files and the terminology is similar&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Under the hood&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/runner&quot;&gt;Forgejo runner&lt;/a&gt; is a new addition to the Forgejo dependencies (git &amp;amp; ssh) and is not yet packaged, it must be built from sources as explained above. It is a thin layer on top of &lt;a href=&quot;https://github.com/nektos/act&quot;&gt;ACT&lt;/a&gt; which implements the core of the logic to interpret and run the jobs. A &lt;a href=&quot;https://codeberg.org/forgejo/act&quot;&gt;soft fork of ACT&lt;/a&gt; is used and contains commits that are not yet submitted or accepted upstream.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v1.19 release candidates</title><link>https://forgejo.org/2023-02-27-release-v1190-0-rc0/</link><guid isPermaLink="true">https://forgejo.org/2023-02-27-release-v1190-0-rc0/</guid><description>The first Forgejo v1.19 release candidate is ready for testing. Checkout the release notes for a preview of the new features.</description><pubDate>Mon, 27 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.19.0-0-rc0&quot;&gt;Forgejo
v1.19.0-0-rc0&lt;/a&gt;
was released. It is meant for testing only: do not upgrade a
production instance with it.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-19-0-0&quot;&gt;draft release notes&lt;/a&gt; contain a summary of the new features. The highlights are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/fc037b4b825f0501a1489e10d7c822435d825cb7&quot;&gt;Incoming emails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/6221a6fd5&quot;&gt;Scoped labels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Package registries now support for &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/df789d962&quot;&gt;Cargo&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/6ba9ff7b4&quot;&gt;Conda&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/d987ac6bf&quot;&gt;Chef&lt;/a&gt;. They also have new &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/32db62515&quot;&gt;cleanup rules&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/20674dd05&quot;&gt;quota limits&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Any webhook can now &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/commit/b6e81357bd6fb80f8ba94c513f89a210beb05313&quot;&gt;specify an &lt;code&gt;Authorization&lt;/code&gt; header&lt;/a&gt; to be sent along every request.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;/2023-02-27-forgejo-actions&quot;&gt;Actions experimental
CI/CD&lt;/a&gt;, although not
ready for real world usage, is also present and &lt;a href=&quot;/2023-02-27-forgejo-actions&quot;&gt;can be used to run a
demo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Make sure to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-19-0-0&quot;&gt;check the breaking
changes&lt;/a&gt;
and get your production instance ready for when the v1.19 release is
available.&lt;/p&gt;
&lt;h3&gt;Try it out&lt;/h3&gt;
&lt;p&gt;The release candidate is published in &lt;a href=&quot;https://codeberg.org/forgejo-experimental&quot;&gt;the dedicated &quot;experimental&quot;
Forgejo organization&lt;/a&gt; and
can be downloaded from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Containers at &lt;a href=&quot;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/1.19&quot;&gt;https://codeberg.org/forgejo-experimental/-/packages/container/forgejo/1.19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Binaries at &lt;a href=&quot;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.19.0-0-rc0&quot;&gt;https://codeberg.org/forgejo-experimental/forgejo/releases/tag/v1.19.0-0-rc0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They will be updated based on your feedback until they become robust enough to be released.&lt;/p&gt;
&lt;h3&gt;Help write good release notes&lt;/h3&gt;
&lt;p&gt;The best release notes are meant to articulate the needs and benefits
of new features and the actions recommended for breaking changes so
Forgejo admins quickly know if it is of interest to them.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#draft-1-19-0-0&quot;&gt;current draft release
notes&lt;/a&gt;
contain a complete inventory but the descriptions are still
incomplete. They will be finished by the time the release is published
and you can help make them better.&lt;/p&gt;
&lt;p&gt;Please submit your own descriptions and comments in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/new/choose?milestone=3489&quot;&gt;our issue tracker&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt;
for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.18.5-0</title><link>https://forgejo.org/2023-02-23-release-v1185-0/</link><guid isPermaLink="true">https://forgejo.org/2023-02-23-release-v1185-0/</guid><description>The Forgejo v1.18.5-0 release sets the resistance to brute force protection to match industry standards.</description><pubDate>Thu, 23 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.5-0&quot;&gt;Forgejo v1.18.5-0&lt;/a&gt; was released.&lt;/p&gt;
&lt;p&gt;This release contains an &lt;strong&gt;important security fix&lt;/strong&gt; for Forgejo to raise the protection against brute force attack on hashed passwords stored in the database to match industry standards, as described below.&lt;/p&gt;
&lt;p&gt;This release also contains bug fixes, as detailed &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-5-0&quot;&gt;in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;strong&gt;strongly recommend&lt;/strong&gt; that all Forgejo installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;PASSWORD_HASH_ALGO&lt;/code&gt; is explicitly set in app.in, comment it out so that the stronger algorithm is used instead.&lt;/p&gt;
&lt;p&gt;All password hashes stored with another algorithm will be updated to the new algorithm on the next usage of this password (e.g. a user provides the password to the Forgejo server when they login). It does not require manual intervention.&lt;/p&gt;
&lt;h3&gt;High CPU usage after the upgrade&lt;/h3&gt;
&lt;p&gt;The default password hashing in Forgejo now takes 32 times more CPU time.
If the CPU usage is too high after the upgrade, the easiest workaround is to revert to the previous hash algorithm by adding the following in &lt;code&gt;app.ini&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[security]
PASSWORD_HASH_ALGO = pbkdf2_v1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The real solution is to reduce the use of passwords in &lt;code&gt;git&lt;/code&gt; commands or API calls and switch back to the default hash algorithm for better protection.&lt;/p&gt;
&lt;h3&gt;Reducing the performance impact&lt;/h3&gt;
&lt;p&gt;Codeberg hosts ~60,000 projects for ~50,000 users and provided real world data to evaluate the performance impact of using a hash algorithm that requires 32 times more CPU than before.&lt;/p&gt;
&lt;p&gt;Password hashing happens when users login, sign up or reset their passwords. Even on a busy instance such as Codeberg it does not happen frequently enough to cause performance problems.&lt;/p&gt;
&lt;p&gt;It is also possible that passwords are used in other contexts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;git commands, e.g. &lt;code&gt;git clone https://user:password@forgejo.example.com/owner/repo/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;API calls, e.g. &lt;code&gt;curl https://user:password@forgejo.example.com/api/v1/version&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They can be replaced by alternative authentication methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;git commands can use SSH keys, e.g. &lt;code&gt;git clone git@forgejo.example.com:owner/repo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;API calls can use access tokens, e.g. &lt;code&gt;curl -H &apos;Authorization: token xyz&apos; https://forgejo.example.com/api/v1/version&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It will be faster for the user because the hashing adds a delay. And it will significantly reduce the CPU usage on the Forgejo server.&lt;/p&gt;
&lt;h3&gt;Understanding password hashes&lt;/h3&gt;
&lt;h4&gt;Brute force attacks&lt;/h4&gt;
&lt;p&gt;The user provided passwords are hashed before they are stored so they are not readable in case a copy of the database is leaked. The hash value stored in the database cannot be translated into the original password. But there exists large databases of common passwords and a program can patiently try to hash them one after the other, hoping to find a match. If the hash algorithm is fast, this brute force attack may succeed quickly. If the hash algorithm is expensive to run, it may take so long and use so much resources that it is not worth a try.&lt;/p&gt;
&lt;p&gt;In other words, if a malicious person gets a copy of a Forgejo database, the complexity of the hash algorithm is the only thing preventing them from brute forcing it.&lt;/p&gt;
&lt;h4&gt;Industry standards&lt;/h4&gt;
&lt;p&gt;The industry adapt the &lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html&quot;&gt;recommendations for the hash algorithms&lt;/a&gt; as new hardware provide more processing power and make it easier to brute force. The default algorithm for Forgejo is &lt;code&gt;PBKDF2-HMAC-SHA256&lt;/code&gt; and the &lt;a href=&quot;https://web.archive.org/web/20221223105926/https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html&quot;&gt;OWASP recommendations in December 2022&lt;/a&gt; were:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;use PBKDF2 with a work factor of 310,000 or more and set with an internal hash function of HMAC-SHA-256.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This security upgrade sets the iterations (work factor) to 320,000 and will be revised on a regular basis. Although the default for Forgejo is &lt;code&gt;PBKDF2&lt;/code&gt; and the upgrade consists of modifying its parameters, other algorithms such as &lt;code&gt;argon2id&lt;/code&gt; may be preferred in the future.&lt;/p&gt;
&lt;h4&gt;Access tokens&lt;/h4&gt;
&lt;p&gt;In order for a brute force attack on a password hash to succeed, there must be a match in a database of common passwords. Since the access tokens are randomly generated by the Forgejo server, they are highly unlikely to be in such databases. That makes them, by nature, very resistant to brute force attacks.&lt;/p&gt;
&lt;h3&gt;Responsible disclosure to Gitea&lt;/h3&gt;
&lt;p&gt;On 8 February 2023 the &lt;a href=&quot;https://forgejo.org/.well-known/security.txt&quot;&gt;Forgejo security team&lt;/a&gt; notified the Gitea security team that the default hash algorithm was significantly weaker than the industry standard, explained the associated risks and provided a patch to upgrade the hash algorithm to 320,000 iterations. An embargo was then negotiated until 16 February 2023, after which the v1.18 point release could be prepared.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt;
for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.18.3-2</title><link>https://forgejo.org/2023-02-17-release-v1-18-3-2/</link><guid isPermaLink="true">https://forgejo.org/2023-02-17-release-v1-18-3-2/</guid><description>Forgejo v1.18.3-2 stable release update fixes CVE-2023-22490 and CVE-2023-23946 and bug fixes</description><pubDate>Fri, 17 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.3-2&quot;&gt;Forgejo v1.18.3-2&lt;/a&gt; was released.&lt;/p&gt;
&lt;p&gt;This release contains a security fix for Forgejo container images, as described below. When Forgejo runs from a binary, recommendations to upgrade the &lt;code&gt;git&lt;/code&gt; version installed alongside it are also provided.&lt;/p&gt;
&lt;p&gt;This release also contains bug fixes as detailed &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-3-2&quot;&gt;in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We recommend that all installations running a version affected by the issues described below are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When using a Forgejo binary: upgrade the &lt;code&gt;git&lt;/code&gt; package to a version greater or equal to v2.39.2, v2.38.4, v2.37.6, v2.36.5, v2.35.7, v2.34.7, v2.33.7, v2.32.6, v2.31.7 or v2.30.8&lt;/li&gt;
&lt;li&gt;When using a Forgejo container image: &lt;code&gt;docker pull codeberg.org/forgejo/forgejo:1.18.3-2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Security issues in Git&lt;/h3&gt;
&lt;p&gt;Git &lt;a href=&quot;https://github.blog/2023-02-14-git-security-vulnerabilities-announced-3/&quot;&gt;recently announced&lt;/a&gt; new versions to address two CVEs (&lt;a href=&quot;https://cve.circl.lu/cve/CVE-2023-22490&quot;&gt;CVE-2023-22490&lt;/a&gt;, &lt;a href=&quot;https://cve.circl.lu/cve/CVE-2023-23946&quot;&gt;CVE-2023-23946&lt;/a&gt;). On 14 February 2023, Git published the maintenance release v2.39.2, together with releases for older maintenance tracks v2.38.4, v2.37.6, v2.36.5, v2.35.7, v2.34.7, v2.33.7, v2.32.6, v2.31.7, and v2.30.8.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;/.well-known/security.txt&quot;&gt;Forgejo security team&lt;/a&gt; analyzed both CVE and concluded that they &lt;strong&gt;cannot be exploited via Forgejo&lt;/strong&gt;. It is however recommended to upgrade &lt;code&gt;git&lt;/code&gt; as a precaution.&lt;/p&gt;
&lt;h3&gt;Fixing Git when using a Forgejo binary&lt;/h3&gt;
&lt;p&gt;When installed as a binary &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.3-2&quot;&gt;downloaded from the Forjego releases&lt;/a&gt; repository, it is the responsibility of the Forgejo admin to install &lt;code&gt;git&lt;/code&gt; independently. Upgrading to a patched &lt;code&gt;git&lt;/code&gt; package (with a version greater or equal to v2.39.2, v2.38.4, v2.37.6, v2.36.5, v2.35.7, v2.34.7, v2.33.7, v2.32.6, v2.31.7 or v2.30.8) is therefore enough to fix the problem, even if Forgejo is not upgraded.&lt;/p&gt;
&lt;h3&gt;Fixing Git when using a Forgejo container image&lt;/h3&gt;
&lt;p&gt;When installed as an image &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/versions&quot;&gt;downloaded from the Forgejo registry&lt;/a&gt;, the container includes both the Forgejo binary and the &lt;code&gt;git&lt;/code&gt; binary, as obtained from &lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=git&amp;amp;branch=v3.16&quot;&gt;Alpine 3.16&lt;/a&gt;. &lt;code&gt;Forgejo 1.18.3-1&lt;/code&gt; contains a vulnerable &lt;code&gt;git&lt;/code&gt; binary:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker run --rm codeberg.org/forgejo/forgejo:1.18.3-1 git --version
git version 2.36.4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/versions&quot;&gt;Forgejo 1.18.3-2 images&lt;/a&gt; were built shortly after the patched &lt;code&gt;git&lt;/code&gt; binary was upgraded in &lt;code&gt;Alpine 3.16&lt;/code&gt; and is not vulnerable:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker run --rm codeberg.org/forgejo/forgejo:1.18.3-2 git --version
git version 2.36.5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this case it is necessary to upgrade Forgejo to &lt;code&gt;1.18.3-2&lt;/code&gt; to get the fixed &lt;code&gt;git&lt;/code&gt; binary. The &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18-rootless&quot;&gt;rootless&lt;/a&gt; variant of Forgejo also includes the &lt;code&gt;git&lt;/code&gt; binary and can be upgraded in the same way.&lt;/p&gt;
&lt;h3&gt;Forgejo installation instructions&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download&quot;&gt;download page&lt;/a&gt;
for instructions for installation instructions. If you are upgrading from &lt;code&gt;Forgejo 1.18.3-1&lt;/code&gt; (or &lt;code&gt;Gitea 1.18&lt;/code&gt;) no manual action is required. If you&apos;re on &lt;code&gt;Gitea v1.17.x&lt;/code&gt; or older please read the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-0-1&quot;&gt;release notes&lt;/a&gt;
carefully, and in particular check out the &lt;a href=&quot;https://blog.gitea.io/2022/12/gitea-1.18.0-is-released/#breaking-changes&quot;&gt;breaking changes&lt;/a&gt; section of Gitea&apos;s blog post.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the Gitea binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.3-2&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18.3-2&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18&quot;&gt;&lt;code&gt;1.18&lt;/code&gt;&lt;/a&gt; tag
to stay up to date with the latest &lt;code&gt;1.18.x&lt;/code&gt; point release automatically.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt;
for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Source tree tags v1.18.1-0, v1.18.2-0, v1.18.2-1, v1.18.3-0 and v1.18.3-1 were fixed</title><link>https://forgejo.org/2023-02-12-tags/</link><guid isPermaLink="true">https://forgejo.org/2023-02-12-tags/</guid><description>A Forgejo binary built from sources by checking out one of the tags before 11 February 2023 will be running the development branch v1.19 instead of the expected v1.18 branch. Some packages, such as the official Arch Linux package, are also built from the tags and therefore contain Forgejo v1.19 instead of Forgejo v1.18.</description><pubDate>Mon, 13 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;TL;DR: Skip this blog if you run a Forgejo instance using the binaries or container images downloaded from &lt;a href=&quot;https://codeberg.org/forgejo&quot;&gt;https://codeberg.org/forgejo&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;The symptoms&lt;/h2&gt;
&lt;p&gt;A Forgejo instance is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;unexpectedly running v1.19 despite the version string indicating v1.18&lt;/li&gt;
&lt;li&gt;refusing to start after upgrading the package (Arch, etc.) to version &amp;gt;= v1.18.3-1&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The problem before 11 February 2023&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The v1.18.1-0, v1.18.2-0, v1.18.2-1, v1.18.3-0 and v1.18.3-1 &lt;strong&gt;binaries and container images are v1.18 as advertised&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The v1.18.1-0, v1.18.2-0, v1.18.2-1, v1.18.3-0 and v1.18.3-1 &lt;strong&gt;tags did not match and were actually set on the development branch&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because of a bug in the release process, the tag of each release was actually set to the tip of the Forgejo development branch at the time of the release. Because Forgejo is a soft-fork, it matched the latest Gitea development branch and had all the Forgejo improvements on top of it. But the Forgejo binaries and container images were created using the v1.18 stable branch.&lt;/p&gt;
&lt;h2&gt;The problem is fixed on 11 February 2023&lt;/h2&gt;
&lt;p&gt;The problem &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/344&quot;&gt;was fixed 11 February 2023 ~7am UTC&lt;/a&gt; by force pushing the v1.18.1-0, v1.18.2-0, v1.18.2-1, v1.18.3-0 and v1.18.3-1 tags and nothing else. The binaries and container images were good and remain the same.&lt;/p&gt;
&lt;h2&gt;The consequences&lt;/h2&gt;
&lt;p&gt;A Forgejo binary built from sources by checking out one of the tags before 11 February 2023 will be running the development branch v1.19 instead of the expected v1.18 branch. Some packages, such as the official Arch Linux package, are also built from the tags and therefore contain Forgejo v1.19 instead of Forgejo v1.18.&lt;/p&gt;
&lt;p&gt;The version displayed at the bottom left of the home page will incorrectly be &lt;code&gt;v1.18*&lt;/code&gt; instead of &lt;code&gt;v1.19*&lt;/code&gt; because it is created at build time using the name of the tag. But there is one difference in the home page that allows you to distinguish them, on the large logo in the center:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On &lt;code&gt;v1.19&lt;/code&gt; there is an &lt;code&gt;alt=&quot;logo&quot;&lt;/code&gt; attribute&lt;/li&gt;
&lt;li&gt;On &lt;code&gt;v1.18&lt;/code&gt; there is no such attribute&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A v1.19 Forgejo instance cannot be downgraded to v1.18. It will refuse to start because there is no safe downgrade path.&lt;/p&gt;
&lt;h2&gt;Recommended actions&lt;/h2&gt;
&lt;h3&gt;Forgejo admins: wait for v1.19&lt;/h3&gt;
&lt;p&gt;If your current instance unexpectedly runs v1.19, the recommendation is to not upgrade and wait.&lt;/p&gt;
&lt;p&gt;Forgejo v1.19 will be released in a few months and the easiest workaround for a Forgejo admin running an instance built from source or installed from a package built from source is to wait until then before upgrading.&lt;/p&gt;
&lt;h4&gt;Forgejo instances installed from Arch package &amp;lt; v1.18.3.1-1&lt;/h4&gt;
&lt;p&gt;For those running Arch Linux (or a derivative such as Manjaro or Arch Linux ARM), our current recommendation is to add &lt;code&gt;forgejo&lt;/code&gt; to the &lt;code&gt;IgnorePkg&lt;/code&gt; list in &lt;code&gt;/etc/pacman.conf&lt;/code&gt; until v1.19 is released.&lt;/p&gt;
&lt;p&gt;For those who have already upgraded, we recommended downgrading your package to &lt;code&gt;v1.18.3.0-1&lt;/code&gt; as this is the latest version that exhibited this issue. You may be able to find the package for this version in your &lt;a href=&quot;https://wiki.archlinux.org/title/downgrading_packages#Using_the_pacman_cache&quot;&gt;pacman cache&lt;/a&gt;. If the file is not in your pacman cache, it can be downloaded from the &lt;a href=&quot;https://archive.archlinux.org/packages/f/forgejo/&quot;&gt;Arch Linux archive&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Alternatively, the &lt;a href=&quot;https://aur.archlinux.org/packages/downgrade&quot;&gt;&lt;code&gt;downgrade&lt;/code&gt; utility from the AUR&lt;/a&gt; can help with installing an older version and adding Forgejo to &lt;code&gt;IgnorePkg&lt;/code&gt;. This tool automates the process above with one command.&lt;/p&gt;
&lt;p&gt;When Forgejo v1.19.0-0 is released, you should remove &lt;code&gt;forgejo&lt;/code&gt; from &lt;code&gt;IgnorePkg&lt;/code&gt; in &lt;code&gt;/etc/pacman.conf&lt;/code&gt; and take the upgrade.&lt;/p&gt;
&lt;p&gt;If you installed the package after &lt;code&gt;v1.18.3.1-1&lt;/code&gt; was released, your installation is not affected by this issue.&lt;/p&gt;
&lt;h3&gt;Package authors: (re)build v1.18.3-1&lt;/h3&gt;
&lt;p&gt;If a package was built using one of the tags above, build (or rebuild if the build happened before 11 February 2023) based on the current tag v1.18.3-1 with hash &lt;code&gt;4e5be58493&lt;/code&gt; so that future installations are not affected by the problem.&lt;/p&gt;
&lt;p&gt;It also means the existing installations will not be able to upgrade. Forgejo will refuse to start because they were really running v1.19 before upgrading. The package should be labeled as such with link to this blog post in the changelog to explain why it happens.&lt;/p&gt;
&lt;h2&gt;Get in touch, you will get help&lt;/h2&gt;
&lt;p&gt;If none of the recommended actions work for you, please get in touch at &lt;a href=&quot;mailto:contact@forgejo.org&quot;&gt;contact@forgejo.org&lt;/a&gt; or in the &lt;a href=&quot;https://matrix.to/#/#forgejo-development:matrix.org&quot;&gt;development chatrooom&lt;/a&gt; to get help. This was a bug and you deserve all the help you can get. Getting in touch will also help us improve this blog post if needed.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo monthly report - January 2023</title><link>https://forgejo.org/2023-01-31-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2023-01-31-monthly-update/</guid><description>The first Forgejo releases were published and proved to be secure and reliable for day to day operations. The Forgejo community blossomed and is working on defining its own governance. A wide range of skills contributed to the improvement of Forgejo itself but mostly to the larger Free Software ecosystem it depends on.</description><pubDate>Tue, 31 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-0-1&quot;&gt;Forgejo 1.18.0-1&lt;/a&gt;, the first release, was published 29 December 2022, followed by patch releases which included security fixes. There were no reports of failed installations or upgrades. The &lt;a href=&quot;/2022-12-15-hello-forgejo&quot;&gt;15 December 2022&lt;/a&gt; announcement made a promise and a lot of work went into fulfilling it. A release is more than uploading a file and hoping for the best, users deserve reliable distribution channels and it requires dedicated people and proper tooling. &lt;strong&gt;Forgejo proved to be a product that users can rely on for their day to day operations&lt;/strong&gt;, from large instances such as &lt;a href=&quot;https://codeberg.org&quot;&gt;Codeberg&lt;/a&gt; to personal ones running on low-end hardware.&lt;/p&gt;
&lt;p&gt;What goes into each Forgejo release is a snapshot taken from an constantly evolving patchwork of Free Software components carefully assembled together. It is based on &lt;code&gt;Gitea&lt;/code&gt;, which is itself built on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/go.mod&quot;&gt;one hundred packages&lt;/a&gt;, and when digging deeper it amounts to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/go.sum&quot;&gt;almost a thousand&lt;/a&gt;. But wait, there&apos;s more: container images include &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;ssh&lt;/code&gt; and rely on &lt;code&gt;Docker&lt;/code&gt;. The CI runs on Woodpecker with &lt;code&gt;LXC&lt;/code&gt; and Debian GNU/Linux. This is why adding a feature or fixing a bug in Forgejo often means contributing to one of its many dependencies. This is the healthy way to grow the global Free Software ecosystem. For instance, an &lt;code&gt;LXC&lt;/code&gt; backend was contributed to Woodpecker to improve the Forgejo release process. If a proprietary CI was used, such a contribution would not be possible and progress would be blocked. Another example is the accessibility improvements that were contributed to &lt;code&gt;Gitea&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The Forgejo community is made of people who are citizens of the larger Free Software ecosystem. They may identify themselves as members of the Forgejo community because they like that it furthers the interest of the general public. Or because they enjoy participating in a democratically led community. Or when they write a piece of code somewhere in the thousands of Forgejo dependencies. It is not an elite community, it is not an affinity group; it is an inclusive and fluid group of people who share values and visions. It is engaged in work to define its governance, make sensible decisions and preserve a safe space in accordance to its &lt;a href=&quot;https://codeberg.org/forgejo/code-of-conduct&quot;&gt;Code of Conduct&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Forgejo 1.18&lt;/h3&gt;
&lt;p&gt;From a technical point of view, Forgejo is a &lt;a href=&quot;/download&quot;&gt;drop-in replacement for &lt;code&gt;Gitea&lt;/code&gt;&lt;/a&gt;: it can be used without any modification by simply replacing the &lt;code&gt;Gitea&lt;/code&gt; binary (or container image). On 29 December 2022 Forgejo v1.18.0-0 was released and had just a little glitch: the version number started with a &lt;strong&gt;w&lt;/strong&gt; instead of a &lt;strong&gt;v&lt;/strong&gt;. The same day &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.0-1&quot;&gt;Forgejo v1.18.0-1&lt;/a&gt; was published to fix that mistake.&lt;/p&gt;
&lt;p&gt;This typo was the tip of the iceberg: the release process had to be redesigned. Back then, it took more than one hour for the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/RELEASE.md&quot;&gt;Forgejo release process&lt;/a&gt; to complete. Furthermore it could be interrupted when a release was partially published, throwing the rest away. Unfortunately, that happened while releasing v1.18.0-0 and a clever workaround to resume with a version starting with a &lt;strong&gt;w&lt;/strong&gt; created an artifact. That could have been problematic, or at the very least raise an eyebrow from Forgejo admins.&lt;/p&gt;
&lt;p&gt;In the following weeks, a two-phase process was created wherein the releases are first built in the &lt;a href=&quot;https://codeberg.org/forgejo-integration&quot;&gt;Forgejo integration organization&lt;/a&gt; and published there as drafts, to be thrown away if anything goes wrong. This is the most time-consuming step and also the one that is most likely to fail because something was overlooked by the Forgejo developers or because of an unexpected environmental failure. The second phase is copying the release to its final destination; although it is not atomic, the window of opportunity for a half published release is significantly smaller.&lt;/p&gt;
&lt;h3&gt;Security releases&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;/.well-known/security.txt&quot;&gt;security team&lt;/a&gt; was quickly put to the test and had to prepare two Forgejo releases (&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.1-0&quot;&gt;Forgejo v1.18.1-0, 18 January&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.2-1&quot;&gt;Forgejo v1.18.2-1, 22 January&lt;/a&gt;). The problems were explained in plain English for Forgejo admins to quickly understand their impact and assess the urgency of an upgrade. Handling security issues responsibly is a heavy burden and while the process in place proved to work effectively on those two occasions, it will require a continuous effort for as long as Forgejo exists.&lt;/p&gt;
&lt;p&gt;Although it did not put Forgejo users at risk, there were problems during the making of these security releases, as can be expected for any newly formed team. The expectations were not clearly laid out, the &lt;code&gt;security@forgejo.org&lt;/code&gt; mail was a redirection that revealed the recipients under some circumstances, unencrypted messages were exchanged, security issues were not always reported responsibly and embargo requests were overlooked. Although it worked out fine in the end and all these issues were properly addressed, it speaks to the challenges of bootstrapping a security team.&lt;/p&gt;
&lt;h3&gt;Accessibility&lt;/h3&gt;
&lt;p&gt;Accessibility in Forgejo needs a lot of work and it was difficult to figure out where to start. The &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/TEAMS.md#accessibility&quot;&gt;accessibility team&lt;/a&gt; works in multiple issue trackers (&lt;a href=&quot;https://codeberg.org/forgejo/meta/issues?labels=81029&quot;&gt;meta&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues?q=&amp;amp;type=all&amp;amp;state=open&amp;amp;labels=81214&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;forgejo&lt;/a&gt;, &lt;a href=&quot;https://codeberg.org/forgejo/user-research/pulls?q=&amp;amp;type=all&amp;amp;sort=&amp;amp;state=closed&amp;amp;labels=92050&amp;amp;milestone=0&amp;amp;assignee=0&amp;amp;poster=0&quot;&gt;user research&lt;/a&gt;, etc). The discussions started in a dedicated Matrix room, which turned out to not be very accessible, so &lt;a href=&quot;https://floss.social/tags/forgejoaccessibility&quot;&gt;a Fediverse hashtag &lt;code&gt;#ForgejoAccessibility&lt;/code&gt;&lt;/a&gt; was created as an alternative to experiment with.&lt;/p&gt;
&lt;p&gt;Despite the shortcomings of the current Forgejo UI framework, &lt;a href=&quot;https://github.com/go-gitea/gitea/pulls/fsologureng&quot;&gt;concrete&lt;/a&gt; &lt;a href=&quot;https://github.com/go-gitea/gitea/pulls/Menelion&quot;&gt;changes&lt;/a&gt; were made to the codebase to get things moving. The challenge is to guard them against regressions &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/284&quot;&gt;because there are no automated tests&lt;/a&gt;. Since the community impacted is small, the chance that accessibility improvements are broken is high.&lt;/p&gt;
&lt;h3&gt;Federation&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;/2023-01-10-answering-forgejo-federation-questions/&quot;&gt;Federation development&lt;/a&gt; has been progressing slowly. Most of the time was spent on refactoring &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo-federation&quot;&gt;the current code&lt;/a&gt;, working on the &lt;a href=&quot;https://forgefed.org&quot;&gt;ForgeFed&lt;/a&gt; vocabulary and the &lt;a href=&quot;https://forum.forgefriends.org/t/about-the-friendly-forge-format-f3/681&quot;&gt;F3&lt;/a&gt; schemas.&lt;/p&gt;
&lt;h3&gt;Forgejo CI&lt;/h3&gt;
&lt;p&gt;Since it started out on Woodpecker instances provided by individuals due to performance issues with the database integration tests on &lt;a href=&quot;https://ci.codeberg.org&quot;&gt;Codeberg-CI&lt;/a&gt;, the work on centralizing / unifying the CI has been ongoing. Codeberg solved part of the problem by &lt;a href=&quot;https://forgejo-ci.codeberg.org&quot;&gt;dedicating hardware resources to Forgejo&lt;/a&gt;: using a RAM disk to workaround the slow HDD performances, it runs fast without thrashing short-lived SSDs, reducing ecologically problematic ewaste. The Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/TEAMS.md#devops&quot;&gt;devOps team&lt;/a&gt; weren&apos;t used to working with LXC containers (which is what Codeberg is built upon), so there was (and still is) a learning curve to work on.&lt;/p&gt;
&lt;p&gt;To allow for better safeguarding of the CI against malicious PRs and to better protect the secrets (signing keys, upload credentials) used to actually release Forgejo, &lt;a href=&quot;https://forgejo-ci.codeberg.org&quot;&gt;forgejo-ci.codeberg.org&lt;/a&gt; has no secrets at all. This was also necessary due to some hardware limitations: there is not enough disk space to build a Forgejo release. Another Woodpecker CI instance is used instead and its access is restricted to better protect the release signing keys.&lt;/p&gt;
&lt;h3&gt;End-to-end testing&lt;/h3&gt;
&lt;p&gt;The key to a robust release process is the ability to run tests verifying that it works as expected. Not just unit tests that are routinely run by the Forgejo CI or integration tests included in the codebase. End-to-end tests deploy the release itself and are required to run scenarios that resemble what users would do. The alternative is to ask human beings to run these tests manually, but it is error prone and gets boring very quickly.&lt;/p&gt;
&lt;p&gt;The Forgejo release is published in the &lt;a href=&quot;https://codeberg.org/forgejo-experimental&quot;&gt;Forgejo experimental organization&lt;/a&gt; and then used to &lt;a href=&quot;https://codeberg.org/Codeberg-Infrastructure/scripted-configuration/src/branch/main/.woodpecker.yml&quot;&gt;run tests&lt;/a&gt; that do something along these lines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deploy Woodpecker&lt;/li&gt;
&lt;li&gt;Deploy Forgejo&lt;/li&gt;
&lt;li&gt;Create a user and repository in Forgejo&lt;/li&gt;
&lt;li&gt;Submit a job to Woodpecker by pushing to the repository&lt;/li&gt;
&lt;li&gt;Verify the outcome of the job is as expected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because Forgejo is small, it takes around two minutes for this test to complete. It is now run against every release, and while verification by human beings is still needed, they can focus on what matters instead of trivial mistakes.&lt;/p&gt;
&lt;h3&gt;Contributions to Woodpecker&lt;/h3&gt;
&lt;p&gt;Running end-to-end tests is technically challenging, there&apos;s a reason it is still not common practice. Although it would be possible to use Docker, it&apos;s a stretch (see &lt;a href=&quot;https://github.com/woodpecker-ci/woodpecker/pull/1543/files#diff-129523b702d10d3da7d9245312d535609bffee1458a3f3f82d82fb5d314c6df8&quot;&gt;this example&lt;/a&gt;). The ideal situation is when the test can begin on a freshly provisioned operating system that will be disposed of when the test completes, cleaning up all the left overs even in the event of a catastrophic failure.&lt;/p&gt;
&lt;p&gt;An &lt;a href=&quot;https://github.com/woodpecker-ci/woodpecker/pull/1565&quot;&gt;LXC backend&lt;/a&gt; was developed for Woodpecker to provide such an environment. Woodpecker container images are &lt;a href=&quot;https://codeberg.org/forgejo-contrib/-/packages/container/woodpecker-forgejo-server/versions&quot;&gt;published&lt;/a&gt; for internal use by Forgejo, but are not supported.&lt;/p&gt;
&lt;p&gt;It is common practice to use a patched version of some software while waiting for pull requests to be accepted. The risk is to forget to do the work to get the changes accepted upstream, accumulating the associated technical debt. The patched version of Woodpecker is published in a &lt;a href=&quot;https://codeberg.org/forgejo-contrib/woodpecker-forgejo/commits/branch/main&quot;&gt;dedicated repository&lt;/a&gt; as a reminder and each commit is labelled with the corresponding upstream pull request.&lt;/p&gt;
&lt;h3&gt;Forgejo contrib&lt;/h3&gt;
&lt;p&gt;Over the past few months, people who rely on Forgejo came to expect a certain quality of work as well as long term maintenance. When someone has a great idea and lots of energy, they may not be willing to match those expectations right away. Sharing a clever hack, bootstrapping documentation, creating a list of resources related to Forgejo and temporarily distributing Woodpecker container images are but a few examples.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo-contrib&quot;&gt;Forgejo contrib organization&lt;/a&gt; was created as a space where projects related to Forgejo can exist without being subject to high expectations. It is fine to create a repository that will be abandoned a few weeks later. It is fine to engage in a project that is not agreed upon by other Forgejo community members. The only requirement (and it&apos;s a serious one) is to behave in a way that does not go against the &lt;a href=&quot;https://codeberg.org/forgejo/code-of-conduct&quot;&gt;Code of Conduct&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codeberg.org/forgejo-contrib/delightful-forgejo&quot;&gt;A curated list of delightful Forgejo-related projects and resources&lt;/a&gt; was created there and quickly became a useful reference. If you&apos;re working on a Forgejo-related project, &lt;a href=&quot;https://codeberg.org/forgejo-contrib/delightful-forgejo/pulls&quot;&gt;feel free to submit it for inclusion on the list&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Well-Being &amp;amp; Code of Conduct&lt;/h3&gt;
&lt;p&gt;Forgejo created a &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/TEAMS.md#well-being&quot;&gt;Well-Being team&lt;/a&gt; and adopted a &lt;a href=&quot;https://codeberg.org/forgejo/code-of-conduct&quot;&gt;Code of Conduct&lt;/a&gt; from day one because tensions are bound to happen in such an inclusive environment. And with over three hundred people in the chat room, it happened a few times in the past weeks. When someone uses coarse language and engages in a heated discussion, it has a chilling effect and silently drives people away. To help prevent that, the &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/TEAMS.md#well-being&quot;&gt;Well-Being team&lt;/a&gt; does its best to intervene in a gentle way before it escalates to a point where the Code of Conduct would have to be enforced. There were only two instances where a reminder of the Code of Conduct had to be mentioned: there is zero tolerance for calling another community member names or making derogatory comments towards an ethnic community.&lt;/p&gt;
&lt;p&gt;Obviously it would be better if no such comments had been made at all, but it is hoped that the actions taken will alleviate any fears that any intolerance would be permitted. Hopefully any affected individuals will be encouraged to continue to participate in discussions as endeavors are made to ensure this is a safe space for all community members.&lt;/p&gt;
&lt;h3&gt;Governance&lt;/h3&gt;
&lt;h4&gt;Decision process&lt;/h4&gt;
&lt;p&gt;As expected, the process to &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/19&quot;&gt;define the governance&lt;/a&gt; is taking its time. The need for a decision-making progress emerged during the last two meetings on &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/2022-12-23-videoconference-governance.mp3&quot;&gt;23 December&lt;/a&gt; and 27 January (&lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/2023-01-27-videoconference-governance-part1.mp3&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/2023-01-27-videoconference-governance-part2.mp3&quot;&gt;part 2&lt;/a&gt;) and was partially &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/DECISION-MAKING.md&quot;&gt;formalized&lt;/a&gt;. The general idea is that a decision leads to an agreement that is documented so that Forgejo community members can conveniently refer to it when needed. The &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/AGREEMENTS.md&quot;&gt;list of agreements&lt;/a&gt; has just one item at the moment related to branding (name, logo, etc).&lt;/p&gt;
&lt;h4&gt;The first decisions&lt;/h4&gt;
&lt;p&gt;Meanwhile, this ongoing governance work inspired community members to move forward, and a few discussions that may lead to decisions are ongoing. Topics include very concrete aspects of development such as the &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/124&quot;&gt;criteria in order to define how a PR should be approved&lt;/a&gt; which was followed by a &lt;a href=&quot;https://codeberg.org/forgejo/meta/pulls/129/files&quot;&gt;pull request to document the agreement&lt;/a&gt;. Additionally, there are very high level and much longer discussions such as &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/86&quot;&gt;licensing Forgejo under copyleft&lt;/a&gt;. It&apos;s still blurry but something is emerging. It boils down to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Discussing&lt;/li&gt;
&lt;li&gt;Proposing an agreement&lt;/li&gt;
&lt;li&gt;Documenting the agreement&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Agreements for team members&lt;/h4&gt;
&lt;p&gt;As time passes, the need to replace the &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/TEAMS.md&quot;&gt;teams that have been in place&lt;/a&gt; since Forgejo started becomes more pressing. For instance, given how critical their work is, members of the security team must be agreed upon by the community. It was suggested during the last governance meeting that the procedure goes as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Discussion&lt;/strong&gt;: people willing to participate in the security team send a formal and public application (see &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/123&quot;&gt;this application for the release team for an example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proposing an agreement&lt;/strong&gt;: if the discussion about the applicant seems to meet the approval of the Forgejo community, a pull request to modify the &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/TEAMS.md#security&quot;&gt;security team&lt;/a&gt; is proposed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documenting the agreement&lt;/strong&gt;: if the pull request is approved, it is merged and the agreement is published in the &lt;a href=&quot;https://codeberg.org/forgejo/meta/&quot;&gt;meta repository&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;We Forge&lt;/h3&gt;
&lt;p&gt;Forgejo is a &lt;strong&gt;community of people&lt;/strong&gt; who contribute in an inclusive environment. We forge on an equal footing, by reporting a bug, voicing an idea in the chatroom or implementing a new feature. The following list of contributors is meant to reflect this diversity and acknowledge all contributions since the last monthly report was published. If you are missing, please &lt;a href=&quot;https://codeberg.org/forgejo/website/issues/new&quot;&gt;ask for an update&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Amolith&quot;&gt;https://codeberg.org/Amolith&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Andre601&quot;&gt;https://codeberg.org/Andre601&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/AnselmF&quot;&gt;https://codeberg.org/AnselmF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/aral&quot;&gt;https://codeberg.org/aral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/azmeuk&quot;&gt;https://codeberg.org/azmeuk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bartavi&quot;&gt;https://codeberg.org/bartavi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/bitbat&quot;&gt;https://codeberg.org/bitbat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/braydofficial&quot;&gt;https://codeberg.org/braydofficial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/caesar&quot;&gt;https://codeberg.org/caesar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/chizutan5&quot;&gt;https://codeberg.org/chizutan5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/circlebuilder&quot;&gt;https://codeberg.org/circlebuilder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/copyrights&quot;&gt;https://codeberg.org/copyrights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/crystal&quot;&gt;https://codeberg.org/crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dachary&quot;&gt;https://codeberg.org/dachary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Daeraxa&quot;&gt;https://codeberg.org/Daeraxa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/das-g&quot;&gt;https://codeberg.org/das-g&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/dataCobra&quot;&gt;https://codeberg.org/dataCobra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/DiamonC&quot;&gt;https://codeberg.org/DiamonC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/duxsco&quot;&gt;https://codeberg.org/duxsco&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earl-warren&quot;&gt;https://codeberg.org/earl-warren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/earthjasonlin&quot;&gt;https://codeberg.org/earthjasonlin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/erkinalp&quot;&gt;https://codeberg.org/erkinalp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/f0x&quot;&gt;https://codeberg.org/f0x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/faust&quot;&gt;https://codeberg.org/faust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fnetX&quot;&gt;https://codeberg.org/fnetX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fr33domlover&quot;&gt;https://codeberg.org/fr33domlover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/fsologureng&quot;&gt;https://codeberg.org/fsologureng&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/gapodo&quot;&gt;https://codeberg.org/gapodo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/h3xx&quot;&gt;https://codeberg.org/h3xx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Infinidoge&quot;&gt;https://codeberg.org/Infinidoge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/jamie&quot;&gt;https://codeberg.org/jamie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/johanneskastl&quot;&gt;https://codeberg.org/johanneskastl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/KaKi87&quot;&gt;https://codeberg.org/KaKi87&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/kytta&quot;&gt;https://codeberg.org/kytta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MagicLike&quot;&gt;https://codeberg.org/MagicLike&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/MB175&quot;&gt;https://codeberg.org/MB175&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mikaela&quot;&gt;https://codeberg.org/Mikaela&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Mylloon&quot;&gt;https://codeberg.org/Mylloon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/n0toose&quot;&gt;https://codeberg.org/n0toose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/ocdtrekkie&quot;&gt;https://codeberg.org/ocdtrekkie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/oliverpool&quot;&gt;https://codeberg.org/oliverpool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/om&quot;&gt;https://codeberg.org/om&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/polettix&quot;&gt;https://codeberg.org/polettix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/redwerkz&quot;&gt;https://codeberg.org/redwerkz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/rudolphfroger&quot;&gt;https://codeberg.org/rudolphfroger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/Ryuno-Ki&quot;&gt;https://codeberg.org/Ryuno-Ki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/SamWhited&quot;&gt;https://codeberg.org/SamWhited&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/steko&quot;&gt;https://codeberg.org/steko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tallship&quot;&gt;https://codeberg.org/tallship&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/thatonecalculator&quot;&gt;https://codeberg.org/thatonecalculator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/TheEvilSkeleton&quot;&gt;https://codeberg.org/TheEvilSkeleton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/till&quot;&gt;https://codeberg.org/till&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tuxracer&quot;&gt;https://codeberg.org/tuxracer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/tyman&quot;&gt;https://codeberg.org/tyman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/viceice&quot;&gt;https://codeberg.org/viceice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vwbusguy&quot;&gt;https://codeberg.org/vwbusguy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/xy&quot;&gt;https://codeberg.org/xy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/zander&quot;&gt;https://codeberg.org/zander&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A &lt;strong&gt;minority of Forgejo contributors earn a living&lt;/strong&gt; by implementing the roadmap co-created by the Forgejo community, see &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;the sustainability repository&lt;/a&gt; for the details.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Security Release 1.18.2-1</title><link>https://forgejo.org/2023-01-22-release-v1-18-2-1/</link><guid isPermaLink="true">https://forgejo.org/2023-01-22-release-v1-18-2-1/</guid><description>Forgejo v1.18.2-1 stable release update fixes a bug that made it possible to reveal hidden user email addresses.</description><pubDate>Mon, 23 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.2-1&quot;&gt;Forgejo v1.18.2-1&lt;/a&gt; was released.&lt;/p&gt;
&lt;p&gt;This stable release &lt;strong&gt;includes a security fix&lt;/strong&gt;. It was possible to reveal a user&apos;s email address, which is problematic because users can choose to hide their email address from everyone. This was possible because the notification email for a repository transfer request to an organization included every user&apos;s email address in the owner team. This has been fixed by sending individual emails instead and the code was refactored to prevent it from happening again.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;strong&gt;strongly recommend&lt;/strong&gt; that all installations are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;h3&gt;Forgejo installation instructions&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download&quot;&gt;download page&lt;/a&gt;
for instructions for installation instructions. If you are upgrading from &lt;code&gt;Forgejo 1.18.X-N&lt;/code&gt; (or &lt;code&gt;Gitea 1.18&lt;/code&gt;) no manual action is required. If you&apos;re on &lt;code&gt;Gitea v1.17.X&lt;/code&gt; or older please read the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-0-1&quot;&gt;release notes&lt;/a&gt;
carefully, and in particular check out the &lt;a href=&quot;https://blog.gitea.io/2022/12/gitea-1.18.0-is-released/#breaking-changes&quot;&gt;breaking changes&lt;/a&gt; section of Gitea&apos;s blog post.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the Gitea binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.2-1&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18.2-1&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18&quot;&gt;&lt;code&gt;1.18&lt;/code&gt;&lt;/a&gt; tag
to stay up to date with the latest &lt;code&gt;1.18.x&lt;/code&gt; point release automatically.&lt;/p&gt;
&lt;h3&gt;Codeberg is not vulnerable&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;/.well-known/security.txt&quot;&gt;Forgejo security team&lt;/a&gt; is a joint effort with &lt;a href=&quot;https://codeberg.org&quot;&gt;Codeberg&lt;/a&gt; which already runs a Forgejo version that includes the security fix.&lt;/p&gt;
&lt;h3&gt;Responsible disclosure to Gitea&lt;/h3&gt;
&lt;p&gt;On 21 January 2023, as soon as the &lt;a href=&quot;/.well-known/security.txt&quot;&gt;Forgejo security team&lt;/a&gt; confirmed the vulnerability, the detailed conclusions were communicated to the Gitea security team. The corresponding bug fix was published &lt;a href=&quot;https://github.com/go-gitea/gitea/pull/22569&quot;&gt;22 January 2023&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt;
for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Forgejo Critical Security Release 1.18.1-0</title><link>https://forgejo.org/2023-01-18-release-v1-18-1-0/</link><guid isPermaLink="true">https://forgejo.org/2023-01-18-release-v1-18-1-0/</guid><description>Forgejo v1.18.1-0 stable release update fixes CVE-2022-41903 and CVE-2022-23521, includes a robust release process and branding improvements.</description><pubDate>Wed, 18 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.1-0&quot;&gt;Forgejo v1.18.1-0&lt;/a&gt; was released.&lt;/p&gt;
&lt;p&gt;This release contains an &lt;strong&gt;important security fix&lt;/strong&gt; for Forgejo container images, as described below. When Forgejo runs from a binary, recommendations to upgrade the &lt;code&gt;git&lt;/code&gt; version installed alongside it are also provided.&lt;/p&gt;
&lt;p&gt;This release also contains branding improvements (webhooks, headers, etc.) and includes a more robust release process, as detailed &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-1-0&quot;&gt;in the release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Recommended Action&lt;/h3&gt;
&lt;p&gt;We &lt;strong&gt;strongly recommend&lt;/strong&gt; that all installations running a version affected by the issues described below are upgraded to the latest version as soon as possible.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When using a Forgejo binary: upgrade the &lt;code&gt;git&lt;/code&gt; package to a version greater or equal to v2.39.1, v2.38.3, v2.37.5, v2.36.4, v2.35.6, v2.34.6, v2.33.6, v2.32.5, v2.31.6, or v2.30.7&lt;/li&gt;
&lt;li&gt;When using a Forgejo container image: &lt;code&gt;docker pull codeberg.org/forgejo/forgejo:1.18.1-0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Critical security issues in Git&lt;/h3&gt;
&lt;p&gt;Git &lt;a href=&quot;https://github.blog/2023-01-17-git-security-vulnerabilities-announced-2/&quot;&gt;recently announced&lt;/a&gt; new versions to address two CVEs (&lt;a href=&quot;https://cve.circl.lu/cve/CVE-2022-23521&quot;&gt;CVE-2022-23521&lt;/a&gt;, &lt;a href=&quot;https://cve.circl.lu/cve/CVE-2022-41903&quot;&gt;CVE-2022-41903&lt;/a&gt;). On 17 January 2023, Git published the maintenance release v2.39.1, together with releases for older
maintenance tracks v2.38.3, v2.37.5, v2.36.4, v2.35.6, v2.34.6,
v2.33.6, v2.32.5, v2.31.6, and v2.30.7. All major GNU/Linux distributions also provide updated packages via their security update channels.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;/.well-known/security.txt&quot;&gt;Forgejo security team&lt;/a&gt; analyzed both CVE and confirmed that Forgejo can be used as an intermediary by an attacker to reach a vulnerable &lt;code&gt;git&lt;/code&gt; version. The Forgejo codebase itself is not at fault and has no way to mitigate the problem: the only solution is to upgrade the &lt;code&gt;git&lt;/code&gt; binary.&lt;/p&gt;
&lt;h3&gt;Fixing Git when using a Forgejo binary&lt;/h3&gt;
&lt;p&gt;When installed as a binary &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.1-0&quot;&gt;downloaded from the Forjego releases&lt;/a&gt; repository, it is the responsibility of the Forgejo admin to install &lt;code&gt;git&lt;/code&gt; independently. Upgrading to a patched &lt;code&gt;git&lt;/code&gt; package (with a version greater or equal to v2.39.1, v2.38.3, v2.37.5, v2.36.4, v2.35.6, v2.34.6, v2.33.6, v2.32.5, v2.31.6, and v2.30.7) is therefore enough to fix the problem, even if Forgejo is not upgraded. Note that some distributions (such as Ubuntu) may backport security fixes to older &lt;code&gt;git&lt;/code&gt; versions instead of upgrading, and it is worth looking at the changelog for confirmation. If a package is older than 17 January 2023, it will NOT contain the security fix because it was only made public on that date.&lt;/p&gt;
&lt;h3&gt;Fixing Git when using a Forgejo container image&lt;/h3&gt;
&lt;p&gt;When installed as an image &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/versions&quot;&gt;downloaded from the Forgejo registry&lt;/a&gt;, the container includes both the Forgejo binary and the &lt;code&gt;git&lt;/code&gt; binary, as obtained from &lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=git&amp;amp;branch=v3.16&quot;&gt;Alpine 3.16&lt;/a&gt;. &lt;code&gt;Forgejo 1.18.0-1&lt;/code&gt; contains a vulnerable &lt;code&gt;git&lt;/code&gt; binary:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker run --rm codeberg.org/forgejo/forgejo:1.18.0-1 git --version
git version 2.36.3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/versions&quot;&gt;Forgejo 1.18.1-0 images&lt;/a&gt; were built shortly after the patched &lt;code&gt;git&lt;/code&gt; binary was upgraded in &lt;code&gt;Alpine 3.16&lt;/code&gt; and is not vulnerable:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker run --rm codeberg.org/forgejo/forgejo:1.18.1-0 git --version
git version 2.36.4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this case it is necessary to upgrade Forgejo to &lt;code&gt;1.18.1-0&lt;/code&gt; to get the fixed &lt;code&gt;git&lt;/code&gt; binary. The &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18-rootless&quot;&gt;rootless&lt;/a&gt; variant of Forgejo also includes the &lt;code&gt;git&lt;/code&gt; binary and can be upgraded in the same way.&lt;/p&gt;
&lt;h3&gt;Forgejo installation instructions&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download&quot;&gt;download page&lt;/a&gt;
for instructions for installation instructions. If you are upgrading from &lt;code&gt;Forgejo 1.18.0-1&lt;/code&gt; (or &lt;code&gt;Gitea 1.18&lt;/code&gt;) no manual action is required. If you&apos;re on &lt;code&gt;Gitea v1.17.x&lt;/code&gt; or older please read the &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-0-1&quot;&gt;release notes&lt;/a&gt;
carefully, and in particular check out the &lt;a href=&quot;https://blog.gitea.io/2022/12/gitea-1.18.0-is-released/#breaking-changes&quot;&gt;breaking changes&lt;/a&gt; section of Gitea&apos;s blog post.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the Gitea binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.1-0&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18.1-0&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18&quot;&gt;&lt;code&gt;1.18&lt;/code&gt;&lt;/a&gt; tag
to stay up to date with the latest &lt;code&gt;1.18.x&lt;/code&gt; point release automatically.&lt;/p&gt;
&lt;h3&gt;Codeberg is not vulnerable&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;/.well-known/security.txt&quot;&gt;Forgejo security team&lt;/a&gt; is a joint effort with &lt;a href=&quot;https://codeberg.org&quot;&gt;Codeberg&lt;/a&gt; which already runs a &lt;code&gt;git&lt;/code&gt; version that is not vulnerable.&lt;/p&gt;
&lt;h3&gt;Responsible disclosure to Gitea&lt;/h3&gt;
&lt;p&gt;As soon as the &lt;a href=&quot;/.well-known/security.txt&quot;&gt;Forgejo security team&lt;/a&gt; confirmed the vulnerability, the conclusions were communicated to the Gitea security team. Forgejo recommended a rebuild of the Gitea container images for &lt;code&gt;1.18.1&lt;/code&gt;, that were created shortly before the proper Alpine package version was available.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt;
for feature requests or bug reports. You can also find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop by &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) to say hi!&lt;/p&gt;
</content:encoded></item><item><title>Answering Forgejo federation questions</title><link>https://forgejo.org/2023-01-10-answering-forgejo-federation-questions/</link><guid isPermaLink="true">https://forgejo.org/2023-01-10-answering-forgejo-federation-questions/</guid><description>This post answers some commonly asked questions about Forgejo federation.</description><pubDate>Tue, 10 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;What is federation?&lt;/h3&gt;
&lt;p&gt;Federation is about creating open protocols so that different servers can communicate with each other. Once Forgejo gains federation support via the &lt;a href=&quot;https://forgefed.org/&quot;&gt;ForgeFed&lt;/a&gt; protocol, you&apos;ll be able to do things like create issues for projects on other Forgejo instances without creating an account on that instance. But federation doesn&apos;t just solve the problem of having to create many Forgejo accounts. The power of federation comes from building an interoperable ecosystem, since any other code collaboration site or development tool can also add ForgeFed support. Just look at GitHub: it&apos;s the epicenter of a giant ecosystem of apps and integrations and tools that cements GitHub&apos;s position. It&apos;s a textbook example of a walled garden. We want to create something similar, but in an open ecosystem where everything speaks the ForgeFed protocol, so you&apos;re never locked-in by which forge or code collaboration software that you use.&lt;/p&gt;
&lt;h3&gt;Is Forgejo federation development being worked on right now?&lt;/h3&gt;
&lt;p&gt;Yes. You can find an up-to-date task list &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues/59&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;When will federation be released?&lt;/h3&gt;
&lt;p&gt;Forgejo federation will be merged into mainline Forgejo through two (or more) pull requests. The first pull request, which will be submitted later this month, includes backend support for some basic federation features like following remote users, opening issues on remote repositories, and blocking instances. A second pull request will include a UI for federation, more moderation features, and backend support for federating all of Forgejo&apos;s features, such as adding remote users as repository collaborators. Federation will most likely be included in Forgejo 1.19, which will be released in a few months.&lt;/p&gt;
&lt;h3&gt;Will Gitea also gain federation?&lt;/h3&gt;
&lt;p&gt;Most likely yes. We want as many forges as possible to be federated, so we will contribute the federation code upstream to Gitea.&lt;/p&gt;
&lt;h3&gt;What&apos;s F3 and how does it relate to federation?&lt;/h3&gt;
&lt;p&gt;A lot of difficult and seemingly unrelated problems like migrating projects, federated pull requests, and mirroring issues actually have the same solution. A project&apos;s code is stored using Git and can be easily migrated, but the issues, pull requests, and project metadata are stored in the database. If only we had a common format for representing all the various components of a project and code to serve and store project components using this format... then mirroring issues would be as easy as fetching remote issues in this format and storing them on our instance. I know, &lt;a href=&quot;https://xkcd.com/927/&quot;&gt;let&apos;s make our own format&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;And that&apos;s why &lt;a href=&quot;https://forum.forgefriends.org/t/about-the-friendly-forge-format-f3/681&quot;&gt;F3&lt;/a&gt; was created. It&apos;s a JSON format closely based on how projects are internally stored in Forgejo&apos;s database. Although it has a similar semantics, it is different from the &lt;a href=&quot;https://forgefed.org/vocabulary.html&quot;&gt;ForgeFed vocabulary&lt;/a&gt;. Since the rest of Forgejo federation uses ForgeFed, we&apos;re working on unifying F3 and the ForgeFed vocabulary so they can use the same codebase.&lt;/p&gt;
&lt;h3&gt;Further reading&lt;/h3&gt;
&lt;p&gt;If you think this post was helpful, you should read &lt;a href=&quot;https://a.exozy.me/posts/forge-federation-myths/&quot;&gt;Forge Federation Myths&lt;/a&gt;. Note that it predates Forgejo, so you might want to mentally substitute &lt;code&gt;s/Gitea/Forgejo/g&lt;/code&gt; while reading it.&lt;/p&gt;
</content:encoded></item><item><title>Forgejo v1.18 stable is released</title><link>https://forgejo.org/2022-12-29-release-v1-18-0/</link><guid isPermaLink="true">https://forgejo.org/2022-12-29-release-v1-18-0/</guid><description>The first stable release of Forgejo was published, based on Gitea v1.18.0.</description><pubDate>Thu, 29 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.0-1&quot;&gt;Forgejo v1.18.0-1&lt;/a&gt; was released.
This is the first stable release of Forgejo, and is based on
&lt;a href=&quot;https://blog.gitea.io/2022/12/gitea-1.18.0-is-released/&quot;&gt;Gitea v1.18.0&lt;/a&gt;
which was also released today.&lt;/p&gt;
&lt;h3&gt;Get Forgejo v1.18&lt;/h3&gt;
&lt;p&gt;See the &lt;a href=&quot;/download&quot;&gt;download page&lt;/a&gt;
for instructions on how to install Forgejo, and read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-0-1&quot;&gt;release notes&lt;/a&gt;
for more information on what&apos;s new.&lt;/p&gt;
&lt;h4&gt;Upgrading from Gitea&lt;/h4&gt;
&lt;p&gt;This is the moment you have been waiting for. This stable release offers an upgrade and a transition path from Gitea to Forgejo.
If you&apos;re on &lt;code&gt;v1.17.x&lt;/code&gt; or older please read the
&lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#1-18-0-1&quot;&gt;release notes&lt;/a&gt;
carefully, and in particular check out the
&lt;a href=&quot;https://blog.gitea.io/2022/12/gitea-1.18.0-is-released/#breaking-changes&quot;&gt;breaking changes&lt;/a&gt;
section of Gitea&apos;s blog post.&lt;/p&gt;
&lt;p&gt;The actual upgrade process is as simple as replacing the Gitea binary or container image
with the corresponding &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/releases/tag/v1.18.0-1&quot;&gt;Forgejo binary&lt;/a&gt;
or &lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18.0-1&quot;&gt;container image&lt;/a&gt;.
If you&apos;re using the container images, you can use the
&lt;a href=&quot;https://codeberg.org/forgejo/-/packages/container/forgejo/1.18&quot;&gt;&lt;code&gt;1.18&lt;/code&gt; tag&lt;/a&gt;
to stay up to date with the latest &lt;code&gt;1.18.x&lt;/code&gt; point release automatically.&lt;/p&gt;
&lt;h3&gt;Contribute to Forgejo&lt;/h3&gt;
&lt;p&gt;If you have any feedback or suggestions for Forgejo, we&apos;d love to hear from you!
Open an issue on &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues&quot;&gt;our issue tracker&lt;/a&gt;
for feature requests or bug reports, find us &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;on the Fediverse&lt;/a&gt;,
or drop into &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;our Matrix space&lt;/a&gt;
(&lt;a href=&quot;https://matrix.to/#/#forgejo-chat:matrix.org&quot;&gt;main chat room&lt;/a&gt;) and say hi!&lt;/p&gt;
</content:encoded></item><item><title>First forgejo monthly report - December 2022</title><link>https://forgejo.org/2022-12-26-monthly-update/</link><guid isPermaLink="true">https://forgejo.org/2022-12-26-monthly-update/</guid><description>Forgejo was announced 15 December 2022, here is how it happened.</description><pubDate>Mon, 26 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Forgejo was &lt;a href=&quot;/2022-12-15-hello-forgejo&quot;&gt;announced in December 2022&lt;/a&gt; and this report explains how it happened. It is the creation of a collective of people from diverse backgrounds united towards a common goal: enabling Free Software contributors with Free Software tools. The software forge it provides can be downloaded and used right away and it has a unique non-technical feature: the community that drives its roadmap can be trusted to put the interest of the general public first. Forging Free Software is not just about writing code, it is a &lt;a href=&quot;https://coding.social/&quot;&gt;social construct&lt;/a&gt; that involves everyone in a continuous loop.&lt;/p&gt;
&lt;p&gt;This first monthly report is meant to provide a high-level update of what happened in Forgejo, for people who want to follow its progress from a distance. Fact checking is made easy with links to the issue trackers or chat rooms where the action happened: everything in Forgejo since its inception has been 100% transparent. Video conferences are also &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/36&quot;&gt;organized monthly&lt;/a&gt; for Forgejo community members to ask questions.&lt;/p&gt;
&lt;h3&gt;Bootstrap&lt;/h3&gt;
&lt;p&gt;After &lt;a href=&quot;https://gitea-open-letter.coding.social/#gitea-ltd-confirms-its-takeover-of-the-gitea-project&quot;&gt;Gitea Ltd confirmed the takeover of the Gitea project&lt;/a&gt; on 30 October 2022, a group of people proposed that &lt;a href=&quot;https://docs.codeberg.org/getting-started/what-is-codeberg/#what-is-codeberg-e.v.%3F&quot;&gt;Codeberg e.V.&lt;/a&gt; should become the custodian of a fork of Gitea. The proposal was &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/3#issuecomment-688648&quot;&gt;accepted 16 November 2022&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Codeberg e.V. is in control of the domains and the trademarks (if any)&lt;/li&gt;
&lt;li&gt;Forgejo contributors are a self-governed group of people (a &quot;gremium&quot; in the Codeberg e.V. parlance)&lt;/li&gt;
&lt;li&gt;The Codeberg e.V. general assembly reviews if Forgejo is aligned with its mission on a yearly basis, based on the monthly reports Forgejo publishes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The essential conditions for a fork to succeed were met and Forgejo was able to be bootstrapped in a sustainable way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A well-known and trusted organization agreed to support and use Forgejo&lt;/li&gt;
&lt;li&gt;A group of people with the right skills and stamina committed to provide a long-term effort&lt;/li&gt;
&lt;li&gt;The strategy to create a soft fork was a good match for the Forgejo contributors workforce&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It took another month for the bootstrap to complete and Forgejo was &lt;a href=&quot;/2022-12-15-hello-forgejo&quot;&gt;announced 15 December 2022&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Development and Distribution&lt;/h3&gt;
&lt;p&gt;From a technical point of view, Forgejo is a &lt;a href=&quot;/download&quot;&gt;drop-in replacement for Gitea&lt;/a&gt;: it can be used without any modification by simply replacing the Gitea binary (or container image).&lt;/p&gt;
&lt;p&gt;The first technical work that was done was to replace the Drone (which is not Free Software) release pipeline used by Gitea with a pipeline based on &lt;a href=&quot;https://woodpecker-ci.org/&quot;&gt;Woodpecker CI&lt;/a&gt;. It produced a release candidate &lt;a href=&quot;/releases&quot;&gt;for Forgejo 1.18.0-rc1-1&lt;/a&gt; and is ready for the 1.18 release that will include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;binaries for GNU/Linux amd64, arm64 and armv6 (which can also be used on armv7)&lt;/li&gt;
&lt;li&gt;container images for amd64 and arm64, either running as root or rootless&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It will include some &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/WORKFLOW.md#branding&quot;&gt;Forgejo branding changes&lt;/a&gt; and default settings to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/WORKFLOW.md#privacy&quot;&gt;enhance privacy&lt;/a&gt;. And more importantly, it provides a non-technical feature: trust in a sustainable non-profit community to further the interest of the general public.&lt;/p&gt;
&lt;p&gt;The forge federation features is a focus of Forgejo. Although it is not ready to be released with version 1.18, active development started to &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/WORKFLOW.md#federation-https-codeberg-org-forgejo-forgejo-issues-labels-79349&quot;&gt;support ActivityPub and F3&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;User Centric Roadmap&lt;/h3&gt;
&lt;p&gt;Already within a few days &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/issues?labels=78139&quot;&gt;dozens of ideas for improving Forgejo&lt;/a&gt; were submitted. They express the needs and preferences of Free Software contributors with regards to how they forge their software. This raw material is input to the roadmap and will lead Forgejo on a path that is unique and different than what corporate forges like Github and Gitlab have to offer. Forgejo will place the community firmly in control of project direction.&lt;/p&gt;
&lt;p&gt;How can Forgejo go from an unsorted pile of ideas to an exciting roadmap? What innovations will inspire contributors? And how do these ideas transform into concrete features that will be implemented, instead of lingering as open issues on the backlog? To address people&apos;s needs and be most beneficial for the commons and public interest, Forgejo will follow a structured method of &lt;a href=&quot;https://jdittrich.github.io/userNeedResearchBook/&quot;&gt;User Research&lt;/a&gt;, align with &lt;a href=&quot;https://coding.social/&quot;&gt;Social Coding Movement&lt;/a&gt;, and contribute back insights about Free Software development to evolve the movement&apos;s best-practices.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://codeberg.org/forgejo/user-research&quot;&gt;repository was created&lt;/a&gt; to bootstrap that effort. It requires a kind of skill that is rare but Forgejo is in a lucky position and &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/20&quot;&gt;benefits from mentoring&lt;/a&gt; and &lt;a href=&quot;https://lab.forgefriends.org/fedeproxy/ux/-/wikis/2021-06-user-research-report&quot;&gt;past examples related to forge federation&lt;/a&gt;. Some Forgejo contributors also intend to participate in the &lt;a href=&quot;https://discourse.opensourcedesign.net/t/fosdem-2023/3093&quot;&gt;OSD devroom&lt;/a&gt; early 2023 during &lt;a href=&quot;https://fosdem.org/2023/&quot;&gt;FOSDEM&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/TEAMS.md#accessibility&quot;&gt;Forgejo accessibility team was created&lt;/a&gt; and just &lt;a href=&quot;https://codeberg.org/forgejo/user-research/src/branch/master/accessibility&quot;&gt;began User Research&lt;/a&gt; to figure out what matters most to people who struggle with Forgejo because of its accessibility shortcomings.&lt;/p&gt;
&lt;h3&gt;Governance&lt;/h3&gt;
&lt;p&gt;The Forgejo &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/41&quot;&gt;domains&lt;/a&gt; are owned by &lt;a href=&quot;https://codeberg.org/Codeberg/org/src/branch/main/en/bylaws.md&quot;&gt;Codeberg e.V.&lt;/a&gt;. Forgejo is therefore ultimately under the control of Codeberg e.V. and its governance. However, although Codeberg e.V. is committed to use and host Forgejo, it is expected that Forgejo defines its own governance.&lt;/p&gt;
&lt;p&gt;The process to &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/19&quot;&gt;define the governance&lt;/a&gt; is in progress and expected to take weeks if not months. The first two meetings happened (&lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/19#issuecomment-694460&quot;&gt;24 November&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/19#issuecomment-711201&quot;&gt;10 December&lt;/a&gt;). Discussions followed to &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/19#issuecomment-722095&quot;&gt;define how decisions are proposed and enacted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While the governance is being defined, there was a need to establish an interim Forgejo governance for safeguarding credentials, enforcing the Code of Conduct and ensuring security vulnerabilities are handled responsibly for the Forgejo releases. All people with a role in the interim Forgejo governance pledge to resign as soon as the Forgejo governance is in place. The people and teams that are part of the interim governance are &lt;a href=&quot;https://codeberg.org/forgejo/meta/src/branch/readme/TEAMS.md&quot;&gt;listed publicly&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Branding&lt;/h3&gt;
&lt;p&gt;The support for theming in Gitea is brittle and rebranding is a challenge.&lt;/p&gt;
&lt;p&gt;The easy part was the choice of the Forgejo name, which started &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/1&quot;&gt;6 November&lt;/a&gt; and took ten days, with multiple rounds of discussion. The forgejo.org domain was &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/35&quot;&gt;then acquired&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/41#issuecomment-726673&quot;&gt;Codeberg e.V. has control over the registrar account&lt;/a&gt;. A logo was then &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/23#issuecomment-693408&quot;&gt;created&lt;/a&gt; as well as &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/56&quot;&gt;a mascot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The more substantial work then started in &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/WORKFLOW.md#branding&quot;&gt;a dedicated branch&lt;/a&gt;. The rebranding touches many areas and needs to be done in such a way that it is transparent for people upgrading from Gitea. It involves filenames, environment variables, configuration settings, web templates, ... Not only is it tedious, it is also subject to conflicts when rebasing on top of Gitea.&lt;/p&gt;
&lt;h3&gt;Localization&lt;/h3&gt;
&lt;p&gt;The Gitea codebase is internationalized in a way that follows the expected standards. But the localization (i.e. the translations in various languages) relies on a proprietary service that has the translation community locked in. Since Forgejo is committed to exclusively use Free Software dependencies and services, it has to use an alternative.&lt;/p&gt;
&lt;p&gt;Fortunately, &lt;a href=&quot;https://weblate.org/&quot;&gt;Weblate&lt;/a&gt; is a quality self-hostable translation platform and an instance &lt;a href=&quot;https://translate.codeberg.org/&quot;&gt;is provided by Codeberg&lt;/a&gt;. Initial work started in a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/WORKFLOW.md#internationalization-https-codeberg-org-forgejo-forgejo-issues-labels-82637&quot;&gt;dedicated branch&lt;/a&gt;, for the technical part.&lt;/p&gt;
&lt;p&gt;The most difficult part will be to bootstrap a community of translator working on Weblate instead of the proprietary platform that Gitea depends on. Ideas on how to achieve that in an incremental way are &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/72&quot;&gt;most welcome&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Communication and Code of Conduct&lt;/h3&gt;
&lt;p&gt;As a new project Forgejo had to create new communication channels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a static website at &lt;a href=&quot;https://forgejo.org&quot;&gt;https://forgejo.org&lt;/a&gt; built by a CI pipeline from &lt;a href=&quot;https://codeberg.org/Forgejo/website&quot;&gt;a repository&lt;/a&gt; for collaborative editing.&lt;/li&gt;
&lt;li&gt;a social account at &lt;a href=&quot;https://floss.social/@forgejo&quot;&gt;https://floss.social/@forgejo&lt;/a&gt; where content is either published after a consensus is reached from the Forgejo community or signed by the author trusted with access to the account.&lt;/li&gt;
&lt;li&gt;a &lt;a href=&quot;https://matrix.to/#/#forgejo:matrix.org&quot;&gt;Matrix space&lt;/a&gt; where the main room welcomes Forgejo users to answer any question they may have and development rooms where technical discussions happen between people actively working.&lt;/li&gt;
&lt;li&gt;all other communications happen on the forge itself, in a spirit of dogfooding. For instance, although it may be more convenient to use a forum such as Discourse for informal discussions or a task manager to organize the work, the issue tracker is used instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All communication happens in public, transparently, so a newcomer can immediately get up to speed by reading the backlog. A &lt;a href=&quot;https://codeberg.org/forgejo/code-of-conduct&quot;&gt;Code of Conduct&lt;/a&gt; was adopted &lt;a href=&quot;https://codeberg.org/forgejo/meta/issues/13&quot;&gt;very early on&lt;/a&gt; and applies to all spaces under the responsibility of the Forgejo community. It is essential to create an inclusive environment where everyone can feel safe and a &lt;a href=&quot;https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/COC.md&quot;&gt;Well Being&lt;/a&gt; team is here to help if needed.&lt;/p&gt;
&lt;p&gt;A particular effort was made when drafting the &lt;a href=&quot;/2022-12-15-hello-forgejo&quot;&gt;Forgejo announcement&lt;/a&gt; and the &lt;a href=&quot;https://blog.codeberg.org/codeberg-launches-forgejo.html&quot;&gt;Codeberg blog post&lt;/a&gt; to explain that Forgejo is meant to reunite the community. It does not compete with Gitea, it builds upon it.&lt;/p&gt;
&lt;h3&gt;Sustainability&lt;/h3&gt;
&lt;p&gt;The ideal Free Software project is sustainable because it involves many independent individuals who have the means to work for the interest of the general public, in the long run. It is unhealthy when it relies heavily on overworked volunteers who eventually burn out. It is also unhealthy when it is exclusively under the control of a single for-profit organization that works for the benefit of its shareholders.&lt;/p&gt;
&lt;p&gt;Forgejo is set to create a healthy balance that involves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A majority of independent volunteers who are in control of Forgejo via a governance that empowers them. They are representatives of the general public and ultimately the only ones who legitimate to make decisions.&lt;/li&gt;
&lt;li&gt;A minority of people who earn a living by implementing a roadmap co-created by the Forgejo community.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As of today there are just a handful of &lt;a href=&quot;https://codeberg.org/forgejo/sustainability&quot;&gt;people paid for their work&lt;/a&gt; and an order of magnitude more who volunteer. A grant application was &lt;a href=&quot;https://codeberg.org/forgejo/sustainability/issues/1&quot;&gt;submitted December 1st&lt;/a&gt; while &lt;a href=&quot;https://forum.forgefriends.org/t/nlnet-grant-application-for-federation-in-gitea-deadline-august-1st-2022/823&quot;&gt;another is ongoing&lt;/a&gt; and already funds some of the work towards forge federation.&lt;/p&gt;
&lt;p&gt;It is unclear if Forgejo will manage to be sustainable while so many other Free Software projects struggle. But maybe it will because it does something unique: being transparent about its funding. Not translucent: transparent.&lt;/p&gt;
</content:encoded></item><item><title>Beyond coding. We forge.</title><link>https://forgejo.org/2022-12-15-hello-forgejo/</link><guid isPermaLink="true">https://forgejo.org/2022-12-15-hello-forgejo/</guid><description>After many days of hard work and preparation, we are proud to announce that the Forgejo project is now live.</description><pubDate>Thu, 15 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After many days of hard work and preparation by a team of former Gitea maintainers and enthusiasts from the FOSS community, we are proud to announce that the Forgejo project is now live.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forgejo&lt;/strong&gt; (&lt;a href=&quot;/static/forgejo.mp4&quot;&gt;/forˈd͡ʒe.jo/&lt;/a&gt; – inspired by &lt;i&gt;forĝejo&lt;/i&gt;, the Esperanto word for forge) is a community-driven Free Software project that develops a code forge platform similar to GitHub, and that is a drop-in replacement for Gitea. We started Forgejo in reaction to control of Gitea being taken away from the community by the newly-formed for-profit company Gitea Ltd without prior community consultation, and after an &lt;a href=&quot;https://gitea-open-letter.coding.social/&quot;&gt;Open Letter&lt;/a&gt; to the Gitea project owners remained unanswered.
The Forgejo project has two major objectives that drive our development and road map:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The community is in control, and ensures we develop to address community needs.&lt;/li&gt;
&lt;li&gt;We will help liberate software development from the shackles of proprietary tools.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;We are people in control of our future&lt;/h3&gt;
&lt;p&gt;The first objective relates to how we are organized as a project. It is crucial for Forgejo to guarantee that our product will remain Free Software forever, under the guidance of an open and inclusive community. Forgejo will provide a healthy project governance, so that it can truly focus on the needs of all those people that use our software on a daily basis.&lt;/p&gt;
&lt;p&gt;To this end we are very proud that Codeberg e.V. has decided to become our project’s custodian. Codeberg e.V. is a non-profit organization with a stellar reputation, that is dedicated to the success of the Free Software movement. They provide software development services to FOSS projects at Codeberg.org. They are rapidly growing and hosting more than 50,000 code repositories for about 40,000 people. Not only will Codeberg take care of the Forgejo domain names and trademarks, but the organization will use Forgejo as the basis for their own services, instead of Gitea.&lt;/p&gt;
&lt;p&gt;Forgejo&apos;s code base is of course hosted on Codeberg, and by using Woodpecker CI instead of Drone and Matrix instead of Discord, we exclusively rely on Free Software tools.&lt;/p&gt;
&lt;h3&gt;We will help liberate software development&lt;/h3&gt;
&lt;p&gt;Our second objective relates to the product that we deliver. Free Software projects are in general heavily focused on coding. But development of quality software also involves work in many other areas. For the long-term sustainability of any Free Software, project many aspects must be taken into account. Successful software products involve collaboration between many people with different skill sets.&lt;/p&gt;
&lt;p&gt;Forgejo&apos;s vision is to make software development accessible to everyone – bringing true inclusion and diversity to a field traditionally dominated by technical-skilled people, and where many of the tools used are proprietary services with companies dictating who has access, and who does not.&lt;/p&gt;
&lt;p&gt;Our vision offers our community a very exciting path forward. For our development road map we will consider the entirety of the Free Software Development Lifecycle (FSDL) and gradually unlock it to the world. We intend to be part of a growing ecosystem of collaborating Free Software projects that dedicate to this same vision. We see &lt;a href=&quot;https://forgefriends.org/blog/2022/06/30/2022-06-state-forge-federation/&quot;&gt;forge federation&lt;/a&gt; as a means to open up the development process, and it is here that we will innovate.&lt;/p&gt;
&lt;h3&gt;Join our adventure&lt;/h3&gt;
&lt;p&gt;Help make coding social. Join us in our quest, be part of our adventure. Forgejo is not just a code forge. We go beyond coding. &lt;strong&gt;Together we forge Free Software!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Stay tuned to our blog. The coming period we will provide you with many updates about our project organization.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item></channel></rss>