Kafejo: a soft fork of Forgejo
  • Go 81.2%
  • go-html-template 10.3%
  • TypeScript 2.9%
  • CSS 2%
  • JavaScript 1.9%
  • Other 1.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Lumi 994dd37dea
All checks were successful
requirements / merge-conditions (pull_request) Has been skipped
testing / backend-checks (pull_request) Has been skipped
testing / frontend-checks (pull_request) Has been skipped
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / semgrep/ci (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / coverage (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
issue-labels / release-notes (pull_request_target) Has been skipped
issue-labels / backporting (pull_request_target) Has been skipped
issue-labels / cascade (pull_request_target) Has been skipped
kafejo-pr-ci / build (pull_request) Successful in 5m20s
milestone / set (pull_request_target) Has been skipped
kafejo-pr-checklist / checklist (pull_request_target) Successful in 3s
kafejo-backport / backport (pull_request_target) Successful in 37s
kafejo-image / image (push) Successful in 3m56s
Add the asset version to the logo and favicon URLs
/assets/img is served with a cache time of 6 hours (STATIC_CACHE_TIME),
and the URLs of the logo and the favicon had no version. So after an
upgrade, or after a switch from Forgejo to Kafejo, browsers kept showing
the old logo until the cache expired or the user forced a reload. The CSS
and the JavaScript already have ?v={{AssetVersion}}; the logo and the
favicon now have it too:

- the navbar, the home page, the OpenID sign-in page and the 500 page,
- the favicon links in base/head.tmpl and the 500 page,
- the icons of the PWA manifest.

The og:image link keeps the plain URL, so link previews and upstream's
opengraph test stay the same.

test_asset_version.py fails when a template references the logo or the
favicon without the version, for example after an upstream merge.
pwa_test.go checks the manifest icons. The e2e homepage test now
accepts the versioned logo URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:44:37 -07:00
.agents/skills/kafejo-api-route Add a kafejo-api-route skill for REST API work (#8) 2026-10-25 22:11:05 -07:00
.claude Add a kafejo-api-route skill for REST API work (#8) 2026-10-25 22:11:05 -07:00
.devcontainer Update golang packages to v1.27 (forgejo) (#14457) 2026-09-27 19:10:21 +02:00
.forgejo Run Kafejo's workflows on the kafejo-trusted and kafejo-pr runner labels 2026-10-27 10:25:17 -07:00
.semgrep fix(ci): semgrep duplicate id (#14085) 2026-08-26 02:20:15 +02:00
assets Rebrand to Kafejo; contribution policy, README and AGENTS.md (#1) 2026-10-24 22:27:22 -07:00
build feat: improve space-efficiency of emoji data (#14413) 2026-09-19 09:54:48 +02:00
cmd Revert "Update module github.com/urfave/cli/v3 to v3.12.0 (forgejo) (#13949)" (#15004) 2026-10-24 23:49:14 +02:00
contrib Add the asset version to the logo and favicon URLs 2026-10-27 14:44:37 -07:00
custom/conf chore: fix app.example.ini from https://codeberg.org/forgejo/forgejo/issues/14791 change (#14942) 2026-10-20 21:19:16 +02:00
docker Rebrand to Kafejo; contribution policy, README and AGENTS.md (#1) 2026-10-24 22:27:22 -07:00
models Add EPHEMERAL_ONLY to the cleanup_offline_runners cron job 2026-10-26 18:34:11 -07:00
modules Add the asset version to the logo and favicon URLs 2026-10-27 14:44:37 -07:00
options Point the home page's install and source links at Kafejo 2026-10-26 16:20:27 -07:00
public Rebrand to Kafejo; contribution policy, README and AGENTS.md (#1) 2026-10-24 22:27:22 -07:00
release-notes fix: server-side if evaluation should use typed interpretation of workflow inputs (#15047) 2026-10-27 01:09:06 +01:00
release-notes-published chore(release-notes): Forgejo v17.0.1 (#15044) 2026-10-26 19:21:58 +01:00
releases/images fix: optimize PNG images losslessly (#14270) 2026-09-13 03:01:06 +02:00
routers Check cross-origin requests on the signed-out routes too 2026-10-26 15:52:49 -07:00
services Merge upstream Forgejo forgejo fb9d2c7c33 into kafejo 2026-10-27 15:01:38 +00:00
templates Add the asset version to the logo and favicon URLs 2026-10-27 14:44:37 -07:00
tests Add the asset version to the logo and favicon URLs 2026-10-27 14:44:37 -07:00
tools chore: migrate svg component to Typescript (#14666) 2026-10-05 16:27:52 +02:00
web_src Retint the last Forgejo neutrals in the Kafejo themes 2026-10-27 12:58:32 -07:00
.air.toml chore: rename 'migrations' to 'gitea_migrations' 2025-10-14 14:40:49 -06:00
.deadcode-out testing: Add volatileConfigProvider to mock config saving (#14403) 2026-10-09 04:24:23 +02:00
.dockerignore fix(dev): update gitignore e2e for new branding (#14251) 2026-09-05 22:22:24 +02:00
.editorconfig i18n(next): convert indention style to tabs: en, editorconfig (#10661) 2026-01-02 05:56:48 +01:00
.envrc.example docs: added a shebang to the example envrc (#14041) 2026-08-23 18:25:56 +02:00
.gitattributes refactor: migrate lazy webcomponents to Typescript (#14720) 2026-10-17 23:09:06 +02:00
.gitignore fix(dev): update gitignore e2e for new branding (#14251) 2026-09-05 22:22:24 +02:00
.gitmodules cleanup(tests): remove manual testing submodule 2024-04-21 10:13:51 +02:00
.gitpod.yml Remove sqlite-viewer and using database client (#31223) 2024-06-09 11:13:39 +02:00
.golangci.yml Update module github.com/golangci/golangci-lint/v2/cmd/golangci-lint to v2.13.2 (forgejo) (#14155) 2026-09-25 21:45:49 +02:00
.ignore Add /options/license and /options/gitignore to .ignore (#30219) 2024-04-07 15:40:31 +02:00
.mailmap Add .mailmap with aliases for Unknwon (github.com/Unknwon) 2024-08-14 08:26:16 -04:00
.markdownlint.yaml Update JS dependencies (#28537) 2023-12-30 05:29:03 +00:00
.mockery.yml feat: add support in Forgejo's update checker for LTS and multiple releases (#14278) 2026-09-16 02:09:58 +02:00
.node-version [skip ci] Update Node.js to v24.21.0 (forgejo) (#14453) 2026-09-19 22:13:56 +02:00
.npmrc Upgrade to npm lockfile v3 and explicitely set it (#23561) 2023-03-18 19:38:10 +01:00
.release-notes-assistant.yaml chore(release): v11 is EoL (on 2026-07-16) [skip ci] (#13195) 2026-07-15 21:00:04 +02:00
.spectral.yaml Add spectral linter for Swagger (#20321) 2022-07-11 18:07:16 -05:00
.yamllint.yaml fully replace drone with actions (#27556) 2023-10-11 06:39:32 +00:00
AGENTS.md Remove the preview manager from the repository 2026-10-27 11:57:33 -07:00
BSDmakefile feat: Makefile & BSDmakefile changes (#7455) 2025-04-27 10:04:32 +00:00
CODE_OF_CONDUCT.md Rebrand to Kafejo; contribution policy, README and AGENTS.md (#1) 2026-10-24 22:27:22 -07:00
CODEOWNERS chore: update codeowners (#12844) 2026-05-31 14:42:17 +02:00
CONTRIBUTING.md Allow compatible changes to upstream files 2026-10-26 16:41:40 -07:00
DCO Remove address from DCO (#22595) 2023-01-24 18:52:38 +00:00
Dockerfile build: cache Go modules, npm packages and the Go build across commits 2026-10-24 17:26:07 -07:00
Dockerfile.rootless feat: always use UNIX sockets for internal communication (#14148) 2026-10-02 22:42:18 +02:00
eslint.config.ts chore: mark window config properties readonly (#14976) 2026-10-24 12:06:38 +02:00
flake.lock chore: update flake.lock; add gnupg as dependency (#12497) 2026-05-09 23:53:35 +02:00
flake.nix chore: change formatter nixfmt-rfc-style -> nixfmt (#14040) 2026-08-23 15:20:05 +02:00
go.mod Update module github.com/42wim/httpsig to v1.3.0 (forgejo) (#14932) 2026-10-24 23:54:18 +02:00
go.sum Update module github.com/42wim/httpsig to v1.3.0 (forgejo) (#14932) 2026-10-24 23:54:18 +02:00
LICENSE Forgejo v9.0 is GPLv3+ 2024-08-22 09:09:29 +02:00
main.go fix: do not mix urfave v2 with urfave v3 (#8168) 2025-06-12 15:38:03 +02:00
Makefile Merge upstream Forgejo forgejo 55849de717 into kafejo 2026-10-25 15:00:46 +00:00
manifest.scm chore: add delve Go debugger to Guix manifest (#12662) 2026-05-22 11:09:11 +02:00
package-lock.json Update dependency webpack to v5.112.2 (forgejo) (#15011) 2026-10-25 01:34:43 +02:00
package.json Update dependency webpack to v5.112.2 (forgejo) (#15011) 2026-10-25 01:34:43 +02:00
playwright.config.ts refactor: migrate JS configs to Typescript (#14564) 2026-10-05 03:02:47 +02:00
README.md Move the demo instances to kafejo.dev, and add PR previews 2026-10-26 15:43:37 -07:00
release-notes-assistant.sh fix(rna): prioritize breaking changes without a feature or bug label over non-breaking changes (#12124) 2026-04-17 15:24:58 +02:00
RELEASE-NOTES.md chore(release-notes): fix release notes of chroma update in v8.0.0 2025-10-05 17:10:38 +05:00
shell.nix chore: update flake.lock; add gnupg as dependency (#12497) 2026-05-09 23:53:35 +02:00
stylelint.config.ts refactor: migrate JS configs to Typescript (#14564) 2026-10-05 03:02:47 +02:00
tailwind.config.ts chore: migrate toast module to Typescript (#14890) 2026-10-18 20:14:06 +02:00
tsconfig.json chore: migrate emoji component to Typescript (#14538) 2026-10-04 22:39:43 +02:00
vitest.config.ts refactor: migrate relative-time component to Typescript (#14508) 2026-09-27 05:53:42 +02:00
webpack.config.ts chore: migrate toast module to Typescript (#14890) 2026-10-18 20:14:06 +02:00

Kafejo

A forge, brewed in the open.

Kafejo (/ka'fe.jo/, Esperanto for café) is a self-hosted software forge. It gives you Git hosting, issues, pull requests, packages and CI on your own hardware. Kafejo is a soft fork of Forgejo. It stays close to upstream and adds small features. It accepts contributions that people make with AI tools, when a person is accountable for each change.

The public instance is https://kafejo.org. It runs the newest stable release of Kafejo. CI builds and deploys it from this repository.

Try Kafejo

Demo instances and pull request previews let you try Kafejo without an installation. They are on kafejo.dev, a different domain from kafejo.org. Anyone can register. The user demo with the password demo is an administrator. There is no SSH, CI or mail, and an instance has no network access. The data is deleted each day, and can be deleted at any time. Do not keep work there. Never enter a kafejo.org password there.

Instance Runs Updates
https://dev.next.kafejo.dev the development branch kafejo a few minutes after each merge
vX.next.kafejo.dev, for example https://v17.next.kafejo.dev the newest stable branch vX.Y/kafejo, the same version as kafejo.org a few minutes after each merge
pr-N.next.kafejo.dev the open pull request N a few minutes after each push to the PR

When a new stable series starts, the vX name moves up by one. The data of the demo instances is deleted each day at 04:00 UTC.

A preview starts when somebody opens it, and stops after 60 minutes without requests. It gets new data at each start. To start a preview again with new data, write the comment /reset-demo on the PR. The PR author, the requested reviewers and the maintainers can do this.

Thank you, Forgejo and Codeberg

Kafejo exists because of Forgejo and the people who make it. These are its contributors, translators and maintainers, and Codeberg e.V., the non-profit organization that is responsible for it. Forgejo comes from Gitea and Gogs. Almost all of the code here is their work.

We made the fork for one reason. The contribution policy of Forgejo does not accept work from AI tools, and we want to use these tools. We respect the decision of Forgejo. Kafejo is an alternative, not a competitor. We merge upstream changes each day. If you can contribute to Forgejo under its rules, do that. Changes in Forgejo also come into Kafejo.

Kafejo is not affiliated with Forgejo or Codeberg e.V., and they do not endorse it. The Forgejo name and logo belong to Codeberg e.V. For this reason, Kafejo has its own name and logo. The name "Forgejo" stays in the text where we refer to upstream.

Differences from Forgejo

  • Name and appearance. The interface, the logos and the documentation use the name Kafejo. The internal identifiers do not change. These are the forgejo.org Go module, FORGEJO__* environment variables, app.ini keys, the forgejo command, the API and the database schema. The API reports the exact upstream version. Clients that use the version to find features continue to work.
  • Kafejo themes. Kafejo light and Kafejo dark are the default themes. They have their own colours and typefaces (Bricolage Grotesque, Hanken Grotesk and IBM Plex Mono). Pages change with a short transition, and the browser loads a page when the pointer is on its link. With "reduce motion" set in the system, nothing moves. The Forgejo themes are also available.
  • You can go back to Forgejo. Kafejo does not change the database schema or the migrations of Forgejo. An instance can go back to the Forgejo release that its Kafejo version comes from. Read What belongs in Kafejo.
  • Contributions with AI tools are accepted, under a policy of accountability. Read the contribution policy.

Branches and releases

Branch Follows Image Deployed
kafejo (default, development) upstream forgejo kafejo.org/kafejo/kafejo:kafejo no
vX.Y/kafejo (stable) upstream vX.Y/forgejo kafejo.org/kafejo/kafejo:vX.Y the newest one, as :stable, to kafejo.org

Each day, a workflow merges upstream into each branch. Kafejo changes go into kafejo first. Then they go to the newest stable branch as a backport. Read Branches and backports.

Run Kafejo

Kafejo runs the same as Forgejo. The Forgejo documentation applies without changes. The container image replaces the Forgejo root image directly:

docker pull kafejo.org/kafejo/kafejo:stable

To move from Forgejo, use the Kafejo stable release of the same version or a newer version. To go back, use the Forgejo release that the Kafejo version comes from.

Contribute

Read CONTRIBUTING.md first. The Kafejo Code of Conduct applies to all Kafejo spaces. Coding agents must also read AGENTS.md. The translations come from the Forgejo Weblate project. contrib/kafejo/rebrand.py applies the Kafejo wording to them.

License

Kafejo has the same license as Forgejo: the GPL version 3.0 or any later version.