- Go 81.2%
- go-html-template 10.3%
- TypeScript 2.9%
- CSS 2%
- JavaScript 1.9%
- Other 1.6%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
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
/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>
|
||
| .agents/skills/kafejo-api-route | ||
| .claude | ||
| .devcontainer | ||
| .forgejo | ||
| .semgrep | ||
| assets | ||
| build | ||
| cmd | ||
| contrib | ||
| custom/conf | ||
| docker | ||
| models | ||
| modules | ||
| options | ||
| public | ||
| release-notes | ||
| release-notes-published | ||
| releases/images | ||
| routers | ||
| services | ||
| templates | ||
| tests | ||
| tools | ||
| web_src | ||
| .air.toml | ||
| .deadcode-out | ||
| .dockerignore | ||
| .editorconfig | ||
| .envrc.example | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| .gitpod.yml | ||
| .golangci.yml | ||
| .ignore | ||
| .mailmap | ||
| .markdownlint.yaml | ||
| .mockery.yml | ||
| .node-version | ||
| .npmrc | ||
| .release-notes-assistant.yaml | ||
| .spectral.yaml | ||
| .yamllint.yaml | ||
| AGENTS.md | ||
| BSDmakefile | ||
| CODE_OF_CONDUCT.md | ||
| CODEOWNERS | ||
| CONTRIBUTING.md | ||
| DCO | ||
| Dockerfile | ||
| Dockerfile.rootless | ||
| eslint.config.ts | ||
| flake.lock | ||
| flake.nix | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| Makefile | ||
| manifest.scm | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| README.md | ||
| release-notes-assistant.sh | ||
| RELEASE-NOTES.md | ||
| shell.nix | ||
| stylelint.config.ts | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
| vitest.config.ts | ||
| webpack.config.ts | ||
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.orgGo module,FORGEJO__*environment variables,app.inikeys, theforgejocommand, 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.