Diffinery

codician/diffinerypublic

Open-source, agent-first GitHub and GitHub Actions alternative that runs on your own Cloudflare account: git hosting, pull requests, code review and drop-in GitHub Actions YAML on Workers, Durable Objects, R2 and Containers.

Discoverability on GitHub and in AI answers: README, screenshots, CITATION, AGENTS.md, roadmap

The README now leads with the searches people make (GitHub Actions alternative,
self-hosted GitHub alternative, Gitea/Forgejo alternative, faster runners, a forge
for AI agents), shows real screenshots from a local instance, compares Diffinery
with GitHub, GitLab, Gitea/Forgejo and runner services from the sourced comparison
pages, and answers more questions the way people ask assistants. It uses Markdown
only, because Diffinery's renderer escapes raw HTML and the same file serves both.

Adds CITATION.cff (GitHub's "Cite this repository"), AGENTS.md (with CLAUDE.md
importing it) for coding agents, ROADMAP.md, CHANGELOG.md for 0.1.0, SUPPORT.md, a
docs/ index of the documentation, context7.json for Context7's docs index, package
metadata, and a questions link in the issue chooser. The site's SoftwareApplication
gets installUrl and downloadUrl.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DEMmdE1rsAXNH7jayozJuY
Claude authored signed1 parent 5c7ccdecommit 55cc7e89036acebcf430f5f235a9049690b12b5bBrowse files
18 files changed+423−17
Files (18)
modified.github/ISSUE_TEMPLATE/config.yml+3−0View file
@@ -6,3 +6,6 @@
66 - name: Documentation
77 url: https://diffinery.com/docs
88 about: Guides for every feature, the REST API, CLI and MCP references, and self-hosting.
9+ - name: Questions and help
10+ url: https://diffinery.com/faq
11+ about: Answers to common questions, with links to the guides. See SUPPORT.md for where to ask the rest.
modified.gitignore+0−2View file
@@ -7,5 +7,3 @@
77 coverage/
88 .DS_Store
99 wrangler.deploy.jsonc
10-# Written by turbo for AI agents; opted out in turbo.json (agentGuidance)
11-/AGENTS.md
addedAGENTS.md+78−0View file
@@ -1,0 +1,78 @@
1+# AGENTS.md
2+
3+Guidance for AI coding agents (Claude Code, Codex, Cursor and others) working on this
4+repository. People should read [CONTRIBUTING.md](CONTRIBUTING.md); everything here agrees
5+with it.
6+
7+## What this repository is
8+
9+Diffinery: an open-source git forge with GitHub Actions–compatible CI that runs entirely on
10+Cloudflare. One Cloudflare Worker serves the web UI, git over HTTPS, a GitHub-compatible
11+REST and GraphQL API and an MCP server; each repository is a Durable Object with its own
12+SQLite database; CI jobs run in Cloudflare Containers. Development happens at
13+https://diffinery.com/codician/diffinery; https://github.com/codician-team/diffinery is a
14+mirror.
15+
16+## Layout
17+
18+```
19+apps/diffinery the Worker: src/ (web UI, git, REST/GraphQL, MCP, Actions), migrations/ (D1),
20+ docs/ (served at diffinery.com/docs), site/ (marketing pages), test/ (unit and e2e)
21+apps/cli the `diffinery` command-line client
22+apps/vscode the VS Code, Cursor and Windsurf extension
23+apps/jetbrains the JetBrains IDE plugin
24+plugins the Claude Code and Codex plugins
25+containers/runner the runner agent, sandbox server and container image
26+packages/git-core git objects, packfiles, deltas, diff and merge, in pure TypeScript
27+packages/workflow-yaml the GitHub Actions workflow parser, expressions, matrices and cron
28+packages/shared types shared by the Worker and the runner
29+scripts setup and deploy scripts for Cloudflare
30+```
31+
32+## Commands
33+
34+Node.js 22 and pnpm 10 (`corepack enable`). No Cloudflare account is needed to develop.
35+
36+```sh
37+pnpm install
38+pnpm -r build # runner agent, web islands and docs
39+pnpm -r typecheck
40+pnpm -r test # unit tests (Vitest)
41+pnpm --filter @diffinery/app db:migrate:local # local D1
42+pnpm dev # http://localhost:8787, signed in as dev@diffinery.local
43+cd apps/diffinery && node --test --test-timeout=600000 test/e2e/<file>.test.mjs # one e2e file
44+```
45+
46+Run repository tools with `pnpm exec`, never bare `npx`. Run the typecheck and the unit
47+tests before you ask for review, and the end-to-end file closest to your change. Tests must
48+not depend on the speed of the machine they run on.
49+
50+## Rules
51+
52+- **Docs ship with the feature.** Any user- or admin-visible change updates the Markdown in
53+ `apps/diffinery/docs` (and `apps/diffinery/site` for product pages). Write for people and
54+ agents: short sentences, exact names of buttons, settings, endpoints and flags.
55+- **Follow GitHub where GitHub has an API, event or workflow feature**, so git, `gh`,
56+ Octokit and actions keep working. Document any difference in
57+ `apps/diffinery/docs/actions/compatibility.md` or the relevant page.
58+- **D1 migrations** live in `apps/diffinery/migrations`. Use the next free number and never
59+ edit a migration that has shipped.
60+- **Security:** guardrails for agents are enforced on the server for git, REST, MCP and the
61+ web UI alike. Never add a bypass, never log secrets or tokens, and never weaken push
62+ protection, branch protection or the runner sandbox to make something pass.
63+- **UI:** passkeys first, no passwords; Kumo components through `KSelect`, `KCheckbox` and
64+ `KRadio`, never a native `<select>`, checkbox or radio. See
65+ [docs/PREFERENCES.md](docs/PREFERENCES.md).
66+- **Code style:** strict TypeScript, few dependencies, comments that say why, matching the
67+ density and style of the code around your change.
68+- **Pull requests:** one change each, a title that says what it does, an `intent` that says
69+ what it is for, and the person you work for in the description. Changes under
70+ `.github/workflows` need a maintainer to merge them. Never skip or disable a test to get
71+ green.
72+
73+## Reading the docs as an agent
74+
75+Every docs page is Markdown at `https://diffinery.com/docs/<page>.md`, the whole set is in
76+https://diffinery.com/llms.txt and https://diffinery.com/llms-full.txt, and the MCP server
77+at `https://diffinery.com/mcp` has `search_docs` and `read_docs`. See
78+[Docs for AI agents](https://diffinery.com/docs/agents/docs-for-agents).
addedCHANGELOG.md+55−0View file
@@ -1,0 +1,55 @@
1+# Changelog
2+
3+Notable changes to Diffinery. Diffinery is deployed continuously from `main`; versions mark
4+points worth naming. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5+
6+## [0.1.0] - 2026-10-25
7+
8+The first open-source release, under the Apache License 2.0.
9+
10+### Git hosting and collaboration
11+
12+- Git over HTTPS with tokens or browser sign-in, shallow clones, Git LFS and
13+ `refs/pull/<n>/head` and `/merge`; each repository is a Durable Object with its own SQLite
14+ database, and large pushes are unpacked from R2 in pieces.
15+- Pull requests with an `intent` field, drafts, reviews with line comments, required
16+ approvals and checks, merge, squash and rebase, auto-merge, merge on green and a merge
17+ queue with `merge_group` runs.
18+- Issues, labels, milestones, reactions and mentions; releases with assets and generated
19+ notes; checks and commit statuses.
20+- Branch protection, push protection that blocks leaked credentials on every push, an
21+ append-only audit log, moderation, quotas and kill switches.
22+- A container registry for OCI images.
23+
24+### Actions (CI/CD)
25+
26+- Runs GitHub Actions workflows from `.github/workflows/` (and `.diffinery/workflows/`):
27+ triggers, expressions, matrices, `needs`, outputs, reusable workflows, environments,
28+ secrets, variables, OIDC, service containers, Docker, concurrency groups and schedules.
29+- JavaScript, composite and Docker actions from GitHub, with `checkout`, `setup-node`,
30+ `setup-python`, `setup-go`, `cache` and the artifact actions built into the runner.
31+- Hosted runners in Cloudflare Containers: a fresh Ubuntu 24.04 container per job, 4 vCPU and
32+ 12 GiB by default, smaller sizes chosen per job from its own measured runs, jobs starting in
33+ about 3 to 5 seconds. Self-hosted runners with `diffinery runner`.
34+
35+### AI agents
36+
37+- Agent accounts owned by a person or an organization, with server-enforced guardrails: no
38+ pushes or merges to protected branches unless a rule allows it, a person's approval on
39+ agent pull requests, and no secrets for runs of agent-written code.
40+- A built-in MCP server at `/mcp` with browser sign-in, sandboxes, agent tasks that run
41+ Claude Code, Codex or your own command and open a pull request, agent code review,
42+ projects with shared memory and a Today page of what needs you.
43+- Plugins for Claude Code and Codex, the `diffinery` CLI, `gh` support, and extensions for
44+ VS Code, Cursor, Windsurf and JetBrains IDEs.
45+
46+### Moving and running
47+
48+- A GitHub importer for a repository or a whole organization, with history, issues, pull
49+ requests, reviews and releases.
50+- GitHub-compatible REST (`/api/v3`) and GraphQL (`/api/graphql`) APIs and webhooks.
51+- `scripts/setup.sh`, which deploys an instance to your own Cloudflare account and domain.
52+- Documentation at https://diffinery.com/docs, also as Markdown, `llms.txt` and
53+ `llms-full.txt`.
54+
55+[0.1.0]: https://diffinery.com/codician/diffinery/releases/tag/v0.1.0
addedCITATION.cff+34−0View file
@@ -1,0 +1,34 @@
1+cff-version: 1.2.0
2+message: "If you use or refer to Diffinery, please cite it as below."
3+type: software
4+title: "Diffinery"
5+abstract: >-
6+ Diffinery is an open-source git forge with GitHub Actions-compatible CI that runs
7+ entirely on Cloudflare (Workers, Durable Objects, D1, R2, Queues, Workflows and
8+ Containers). It hosts Git repositories, pull requests with reviews and a merge queue,
9+ issues, releases and a container registry, runs existing .github/workflows files on
10+ per-job containers, and gives AI coding agents accounts of their own with
11+ server-enforced guardrails and a built-in MCP server.
12+authors:
13+ - name: "The Diffinery Authors"
14+version: "0.1.0"
15+date-released: "2026-10-25"
16+license: Apache-2.0
17+url: "https://diffinery.com"
18+repository-code: "https://github.com/codician-team/diffinery"
19+repository: "https://diffinery.com/codician/diffinery"
20+keywords:
21+ - git
22+ - git-forge
23+ - github-alternative
24+ - github-actions
25+ - continuous-integration
26+ - ci-cd
27+ - cloudflare-workers
28+ - durable-objects
29+ - cloudflare-containers
30+ - self-hosted
31+ - serverless
32+ - code-review
33+ - ai-agents
34+ - mcp
addedCLAUDE.md+1−0View file
@@ -1,0 +1,1 @@
1+@AGENTS.md
modifiedREADME.md+98−14View file
@@ -1,21 +1,32 @@
11 # Diffinery
22
3-**An open-source, self-hostable git forge with GitHub Actions–compatible CI, built for teams of people and AI agents, running entirely on Cloudflare.**
3+**The open-source GitHub and GitHub Actions alternative that runs entirely on Cloudflare.** Git hosting, pull requests, code review and drop-in GitHub Actions CI, built for teams of people and AI agents. Deploy it to your own Cloudflare account: no servers, no runner machines, nothing to patch.
44
55 [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
6-[![Docs](https://img.shields.io/badge/docs-diffinery.com%2Fdocs-f38020.svg)](https://diffinery.com/docs)
7-[![Runs on Cloudflare](https://img.shields.io/badge/runs%20on-Cloudflare%20Workers-f38020.svg)](https://diffinery.com/built-on-cloudflare)
6+[![GitHub Actions compatible](https://img.shields.io/badge/GitHub%20Actions-compatible-2088ff.svg)](https://diffinery.com/docs/actions/compatibility)
7+[![Runs on Cloudflare Workers](https://img.shields.io/badge/runs%20on-Cloudflare%20Workers-f38020.svg)](https://diffinery.com/built-on-cloudflare)
8+[![Built-in MCP server](https://img.shields.io/badge/MCP-server%20built%20in-8a2be2.svg)](https://diffinery.com/docs/agents/mcp)
9+[![Documentation](https://img.shields.io/badge/docs-diffinery.com%2Fdocs-f38020.svg)](https://diffinery.com/docs)
10+[![Pull requests welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
811
9-Diffinery hosts Git repositories, pull requests with reviews and a merge queue, issues, releases and a container registry, and runs your existing `.github/workflows/*.yml` files as they are. AI agents get accounts of their own, with guardrails the server enforces, and work through MCP, the REST API, git or the CLI. Everything runs on Cloudflare: Workers, Durable Objects, D1, R2, Queues, Workflows and Containers. There are no servers to run, and you can deploy your own instance to your own Cloudflare account.
12+[Website](https://diffinery.com) · [Docs](https://diffinery.com/docs) · [Deploy your own](https://diffinery.com/docs/self-hosting/deploy) · [Compare](https://diffinery.com/compare) · [Performance](https://diffinery.com/performance) · [Roadmap](ROADMAP.md) · [llms.txt](https://diffinery.com/llms.txt)
1013
11-- **Website and public instance:** [diffinery.com](https://diffinery.com)
12-- **Documentation:** [diffinery.com/docs](https://diffinery.com/docs) ([llms.txt](https://diffinery.com/llms.txt) for AI assistants)
13-- **Source:** [diffinery.com/codician/diffinery](https://diffinery.com/codician/diffinery), where development happens. [github.com/codician-team/diffinery](https://github.com/codician-team/diffinery) is a mirror of it.
14+[![A pull request on Diffinery opened by an AI agent, with its intent, a person's approval and four passing GitHub Actions–compatible checks](docs/images/pull-request.png)](docs/images/pull-request.png)
1415
16+Diffinery hosts Git repositories, pull requests with reviews and a merge queue, issues, releases and a container registry, and runs your existing `.github/workflows/*.yml` files as they are, marketplace actions included. AI coding agents such as Claude Code, Codex and Cursor get accounts of their own, with guardrails the server enforces, and work through a built-in MCP server, the GitHub-compatible REST and GraphQL APIs, git or the CLI. Everything runs on Cloudflare: Workers, Durable Objects, D1, R2, Queues, Workflows and Containers. It is free, open-source software under the Apache License 2.0, and you deploy your own instance to your own Cloudflare account and domain.
17+
18+- **Source:** [diffinery.com/codician/diffinery](https://diffinery.com/codician/diffinery), where development, CI and deploys happen, mirrored to [github.com/codician-team/diffinery](https://github.com/codician-team/diffinery).
19+- **Documentation:** [diffinery.com/docs](https://diffinery.com/docs), also as Markdown and in [llms.txt](https://diffinery.com/llms.txt) and [llms-full.txt](https://diffinery.com/llms-full.txt) for AI assistants.
20+
21+If Diffinery is useful to you, a star on GitHub helps other people find it.
22+
1523 ## Contents
1624
25+- [Who Diffinery is for](#who-diffinery-is-for)
1726 - [Why Diffinery](#why-diffinery)
27+- [Screenshots](#screenshots)
1828 - [Features](#features)
29+- [How it compares](#how-it-compares)
1930 - [Self-host on your own Cloudflare account](#self-host-on-your-own-cloudflare-account)
2031 - [How it runs on Cloudflare](#how-it-runs-on-cloudflare)
2132 - [Develop locally](#develop-locally)
@@ -24,6 +35,14 @@
2435 - [FAQ](#faq)
2536 - [Contributing, security and license](#contributing-security-and-license)
2637
38+## Who Diffinery is for
39+
40+- **Teams looking for a GitHub Actions alternative** that keeps their workflow YAML: Diffinery reads `.github/workflows/` with the same syntax and runs marketplace actions, on runners with 4 vCPUs and 12 GiB by default.
41+- **Teams that want a self-hosted GitHub alternative without running servers.** Like Gitea, Forgejo or GitLab, you run your own instance, but it deploys to Cloudflare's serverless platform instead of a VM or a Kubernetes cluster.
42+- **Teams that want faster CI runners** than GitHub's standard 2-vCPU runner for private repositories, without paying a separate runner service such as Blacksmith or Depot.
43+- **Teams working with AI coding agents** (Claude Code, Codex, Cursor and others) that should open pull requests a person approves, rather than push to `main`.
44+- **Cloudflare developers** looking for a large, real-world application built on Durable Objects with SQLite, Containers, Workflows, Queues and R2.
45+
2746 ## Why Diffinery
2847
2948 - **Git hosting, pull requests and CI in one serverless app.** One Cloudflare Worker serves the web UI, git over HTTPS, a GitHub-compatible REST and GraphQL API, and an MCP server. Each repository is its own Durable Object with its own SQLite database, so repositories scale out instead of sharing one database server.
@@ -33,6 +52,14 @@
3352 - **Secure by default.** Passkey sign-in with no passwords, invite-only accounts, branch protection, push protection that blocks leaked credentials, envelope-encrypted secrets, kill switches and an append-only audit log.
3453 - **Moving from GitHub is one step.** A server-side importer brings a repository or a whole organization over with its history, issues, pull requests, reviews and releases, and `gh`, Octokit, VS Code and JetBrains IDEs work against Diffinery.
3554
55+## Screenshots
56+
57+| A repository, with the clone URL and one-click open in VS Code, Cursor, Windsurf and IntelliJ IDEA | A workflow run from `.github/workflows/ci.yml`, with a matrix and `needs` |
58+| --- | --- |
59+| [![A repository's code page on Diffinery](docs/images/repository.png)](docs/images/repository.png) | [![A GitHub Actions–compatible workflow run on Diffinery](docs/images/actions-run.png)](docs/images/actions-run.png) |
60+
61+[![A job's live log on Diffinery, in dark mode](docs/images/job-logs-dark.png)](docs/images/job-logs-dark.png)
62+
3663 ## Features
3764
3865 | Area | What you get | Docs |
@@ -47,6 +74,24 @@
4774 | Security | Passkeys (WebAuthn), branch protection, push protection, encrypted secrets, audit log, moderation, rate limits, quotas and kill switches | [Security overview](https://diffinery.com/docs/security/overview) |
4875 | Migration | Import from GitHub with history, issues, pull requests, reviews and releases, from the web, CLI, API or MCP | [Migrate from GitHub](https://diffinery.com/docs/migrate-from-github) |
4976
77+## How it compares
78+
79+Diffinery is a forge: it hosts your code and runs your CI. Here is how it sits next to the tools people usually compare it with. Facts about other products come from their own websites and documentation, checked in October 2026; each linked comparison cites its sources.
80+
81+| | Diffinery | GitHub + GitHub Actions | GitLab | Gitea / Forgejo | Runner services (Blacksmith, Depot) |
82+| --- | --- | --- | --- | --- | --- |
83+| What it is | Open-source forge with built-in CI | Hosted forge with built-in CI | Forge with built-in CI | Open-source self-hosted forges with built-in CI | Faster runners for GitHub Actions; your code stays on GitHub |
84+| Who runs it | You, on your own Cloudflare account | GitHub (Enterprise Server: your servers) | GitLab, or you (self-managed) | You, on your own servers (or Gitea Cloud, Codeberg) | The vendor |
85+| Servers to operate | None | None (hosted) | None (hosted) or your own | Your servers and your runner machines | None |
86+| CI workflow format | GitHub Actions YAML in `.github/workflows/` | GitHub Actions YAML | `.gitlab-ci.yml` | GitHub Actions–style YAML, "mostly compatible" (Gitea) or "not designed to be compatible" (Forgejo) | GitHub Actions YAML, with a new `runs-on` label |
87+| Default hosted Linux runner | 4 vCPU, 12 GiB, started per job in Cloudflare Containers | 2 vCPU, 8 GB for private repositories | 2 vCPU, 8 GB | Runners you install | Several sizes, priced per minute |
88+| Hosted macOS and Windows | No (self-hosted runners) | Yes | Beta | Runners you install | Yes |
89+| Guardrails for AI agents | Built in for every agent account | Rulesets and token permissions you configure | Approval rules and service accounts you configure | Not covered | Not applicable |
90+| Built-in MCP server | Yes, at `/mcp` | Yes | Yes | Gitea: a separate MCP server | Not applicable |
91+| License | Apache-2.0 | Proprietary | Open core | MIT (Gitea), GPL v3+ (Forgejo) | Proprietary |
92+
93+Read the details: [Diffinery vs GitHub](https://diffinery.com/compare/github) · [vs GitLab](https://diffinery.com/compare/gitlab) · [vs Gitea and Forgejo](https://diffinery.com/compare/gitea) · [vs Blacksmith](https://diffinery.com/compare/blacksmith) · [vs Depot](https://diffinery.com/compare/depot) · [vs CircleCI](https://diffinery.com/compare/circleci) · [vs Buildkite](https://diffinery.com/compare/buildkite) · [vs Bitbucket](https://diffinery.com/compare/bitbucket) · [all GitHub Actions alternatives](https://diffinery.com/compare) · [other Git and CI projects on Cloudflare](https://diffinery.com/built-on-cloudflare#other-git-and-ci-projects-on-cloudflare)
94+
5095 ## Self-host on your own Cloudflare account
5196
5297 Diffinery is designed to be deployed by anyone to their own Cloudflare account and domain. Nobody who uses your instance needs a Cloudflare account; only the deployment does.
@@ -123,33 +168,72 @@
123168
124169 ## What Diffinery doesn't do (yet)
125170
126-Diffinery is honest about its gaps. Today it has no hosted macOS, Windows or Arm runners (use self-hosted runners), no forks, no app marketplace, and nothing like Codespaces, Pages or Discussions. Some GitHub events, such as `issues` and `issue_comment`, are accepted in workflows but never start a run. The full list is in [Compatibility with GitHub Actions](https://diffinery.com/docs/actions/compatibility) and [Diffinery vs GitHub](https://diffinery.com/compare/github).
171+Diffinery is young, and we'd rather you know its limits before you move:
127172
173+- **Hosted runners are Linux x64 only.** macOS, Windows and Arm jobs need [self-hosted runners](https://diffinery.com/docs/actions/runners#self-hosted-runners).
174+- **HTTPS only for Git.** There's no SSH access.
175+- **No forks.** Pull requests are between branches of the same repository.
176+- **No wikis, discussions, Pages-style sites, Codespaces-style cloud editors or app marketplace.**
177+- **Reviews are simpler than GitHub's.** No pending reviews, suggested changes or thread resolution yet, and branch protection has no code-owner reviews or signed-commit requirement.
178+- **Some GitHub events**, such as `issues` and `issue_comment`, are accepted in workflows but never start a run.
179+- **No hosted service.** Nobody runs Diffinery for you: you deploy your own instance.
180+
181+The full lists are in [Compatibility with GitHub Actions](https://diffinery.com/docs/actions/compatibility) and [Diffinery vs GitHub](https://diffinery.com/compare/github), and where we'd like to go next is in the [roadmap](ROADMAP.md).
182+
128183 ## FAQ
129184
130185 **What is Diffinery?**
131-An open-source git forge and CI platform that runs entirely on Cloudflare. It replaces GitHub's code hosting, pull requests and GitHub Actions in one app that you can self-host on your own Cloudflare account.
186+An open-source git forge and CI platform that runs entirely on Cloudflare. It replaces GitHub's code hosting, pull requests and GitHub Actions in one app that you deploy to your own Cloudflare account.
132187
188+**Is Diffinery an open-source GitHub Actions alternative?**
189+Yes. Diffinery runs GitHub Actions workflow files from `.github/workflows/` with the same triggers, expressions, matrices, `needs`, reusable workflows, environments, secrets, OIDC, service containers and Docker, and downloads and runs marketplace actions (`uses: owner/repo@ref`). Every known difference is listed in [Compatibility with GitHub Actions](https://diffinery.com/docs/actions/compatibility).
190+
133191 **Is Diffinery a self-hosted GitHub alternative?**
134-Yes. Like Gitea, Forgejo or GitLab, you can run it yourself, but instead of a server or a Kubernetes cluster it deploys to Cloudflare's serverless platform, and its CI runs GitHub Actions workflow files instead of a format of its own.
192+Yes. Like Gitea, Forgejo or GitLab, you run it yourself, but instead of a server or a Kubernetes cluster it deploys to Cloudflare's serverless platform, and its CI runs GitHub Actions workflow files instead of a format of its own.
135193
194+**How is Diffinery different from Gitea and Forgejo?**
195+All three are open-source forges you run yourself. Gitea and Forgejo run on your own servers, with runner machines you install for CI. Diffinery runs only on Cloudflare: there are no servers or runner machines to look after, and each CI job gets a fresh container, but your code lives on Cloudflare's infrastructure. Gitea and Forgejo have wikis and a package registry, which Diffinery doesn't. See [Diffinery vs Gitea and Forgejo](https://diffinery.com/compare/gitea).
196+
197+**Is Diffinery an alternative to Blacksmith or Depot?**
198+For a different kind of team. Blacksmith and Depot keep your code and pull requests on GitHub and run your jobs on faster machines, for a per-minute price. Diffinery replaces GitHub as well: your repositories move to your own instance, and your jobs run on 4-vCPU runners that your Cloudflare account pays for by the 10 ms. If you want to stay on GitHub and run nothing yourself, a runner service is the simpler choice. See [Diffinery vs Blacksmith](https://diffinery.com/compare/blacksmith) and [vs Depot](https://diffinery.com/compare/depot).
199+
136200 **Do my GitHub Actions workflows run without changes?**
137201 Most do. Diffinery reads `.github/workflows/*.yml` with the same syntax and runs marketplace actions. Jobs that need hosted macOS, Windows or Arm runners need a self-hosted runner. See [Compatibility with GitHub Actions](https://diffinery.com/docs/actions/compatibility).
138202
203+**Is Diffinery faster than GitHub Actions?**
204+We don't run jobs on GitHub to benchmark it, so we don't claim a speed-up figure. Diffinery's default runner has 4 vCPUs and 12 GiB, while GitHub's standard Linux runner for private repositories has 2 vCPUs and 8 GB, so jobs that use several cores get twice as many. On Diffinery, jobs start about 3 to 5 seconds after they're queued. See the [measured performance](https://diffinery.com/performance).
205+
206+**Can I run Diffinery CI while my code stays on GitHub?**
207+Yes. A small GitHub workflow mirrors every push to your Diffinery instance, which then runs the same `.github/workflows/` files, and can fail the GitHub job when the runs on Diffinery fail. See [Run Diffinery CI while your code stays on GitHub](https://diffinery.com/docs/guides/mirror-from-github).
208+
139209 **What does it cost to run?**
140-Diffinery is free and open source under the Apache License 2.0. Running it costs whatever your own Cloudflare account bills: the Workers Paid plan plus usage. Hosted runners are Cloudflare Containers, which bill only while a job runs.
210+Diffinery is free and open source under the Apache License 2.0, with no paid edition. Running it costs whatever your own Cloudflare account bills: the Workers Paid plan plus usage. Hosted runners are Cloudflare Containers, which bill only while a job runs.
141211
212+**Does it run on Cloudflare's free plan?**
213+No. Containers, Durable Objects with SQLite, Workflows and Queues need the Workers Paid plan. See [Deploy your own Diffinery](https://diffinery.com/docs/self-hosting/deploy).
214+
142215 **Does it work with AI coding agents?**
143216 Yes. Agents connect over MCP (`https://<your host>/mcp`), the REST API, git or the GitHub CLI. There are guides for Claude, Claude Code, Codex, Cursor and VS Code, and a plugin for Claude Code and Codex, installable with `claude plugin marketplace add https://diffinery.com/codician/diffinery.git` (sources in [`plugins/`](plugins)). See [Connect AI apps](https://diffinery.com/docs/connect).
144217
218+**Can an AI agent merge its own pull request?**
219+Not by default. Unless a branch protection rule allows it, agents can't push to or merge into protected branches, their pull requests need a person's approval, their check results never satisfy required checks, and runs of code they pushed get no secrets. See [Guardrails](https://diffinery.com/docs/agents/overview#guardrails).
220+
145221 **Can I move my repositories from GitHub?**
146-Yes. The importer brings a repository or a whole organization with history, issues, pull requests, reviews and releases. Secret names come over with a field to enter each value. See [Migrate from GitHub](https://diffinery.com/docs/migrate-from-github).
222+Yes. The importer brings a repository or a whole organization with history, issues, pull requests, reviews and releases. Secret names come over with a field to enter each value. `gh`, Octokit, VS Code and JetBrains IDEs work against Diffinery. See [Migrate from GitHub](https://diffinery.com/docs/migrate-from-github).
147223
224+**Can I sign up on diffinery.com?**
225+diffinery.com is the project's home and the instance Diffinery is developed on; accounts there are by invitation for the people working on it. It isn't a hosted service. To use Diffinery, deploy your own instance.
226+
227+**Is Diffinery the only Git platform on Cloudflare?**
228+No. Other open-source projects run Git or CI on Cloudflare too, and [Built on Cloudflare](https://diffinery.com/built-on-cloudflare#other-git-and-ci-projects-on-cloudflare) lists how they differ. As far as we know, Diffinery is the one where Git hosting, pull requests with reviews in a web UI and GitHub Actions–compatible CI with marketplace actions all run on Cloudflare (checked October 25, 2026).
229+
148230 **Where is development happening?**
149-On Diffinery itself, at [diffinery.com/codician/diffinery](https://diffinery.com/codician/diffinery). Diffinery's own CI, deploys and pull requests run there. The GitHub repository is a mirror.
231+On Diffinery itself, at [diffinery.com/codician/diffinery](https://diffinery.com/codician/diffinery). Diffinery's own CI, deploys and pull requests run there. The GitHub repository is a mirror, and issues and pull requests are welcome in either place; see [CONTRIBUTING.md](CONTRIBUTING.md).
150232
151233 ## Contributing, security and license
152234
153-- **Contributing:** see [CONTRIBUTING.md](CONTRIBUTING.md). Please follow the [Code of Conduct](CODE_OF_CONDUCT.md).
235+- **Contributing:** see [CONTRIBUTING.md](CONTRIBUTING.md), and [AGENTS.md](AGENTS.md) if you're an AI coding agent. Please follow the [Code of Conduct](CODE_OF_CONDUCT.md). Questions go to [SUPPORT.md](SUPPORT.md).
236+- **Roadmap and changes:** [ROADMAP.md](ROADMAP.md) and [CHANGELOG.md](CHANGELOG.md).
154237 - **Security:** please don't open public issues for vulnerabilities. Report them privately as described in [SECURITY.md](SECURITY.md).
238+- **Citing Diffinery:** use GitHub's "Cite this repository" button, or [CITATION.cff](CITATION.cff).
155239 - **License:** [Apache License 2.0](LICENSE). See [NOTICE](NOTICE).
addedROADMAP.md+41−0View file
@@ -1,0 +1,41 @@
1+# Roadmap
2+
3+Diffinery is young. This page lists what it can't do yet and the directions we'd like to
4+take, so you can judge whether it fits you today and where help is most welcome. Nothing
5+here has a date. If something matters to you, open an issue or a pull request.
6+
7+## Works today
8+
9+Git hosting over HTTPS, pull requests with reviews, auto-merge and a merge queue, issues,
10+releases, a container registry, GitHub Actions–compatible CI on per-job Cloudflare
11+Containers with automatic runner sizing, self-hosted runners, a GitHub importer, the
12+GitHub-compatible REST and GraphQL APIs, an MCP server, agent accounts with guardrails,
13+sandboxes, agent tasks and agent review, the CLI, editor plugins and one-command
14+deployment to your own Cloudflare account. See [Features](https://diffinery.com/features).
15+
16+## Known gaps
17+
18+These are the main differences from GitHub that people ask about:
19+
20+- **Hosted macOS, Windows and Arm runners.** Hosted runners are Linux x64; other platforms
21+ use [self-hosted runners](https://diffinery.com/docs/actions/runners#self-hosted-runners).
22+- **Git over SSH.** Git works over HTTPS only.
23+- **Forks**, and pull requests between repositories.
24+- **Richer reviews:** pending reviews, suggested changes and resolving threads; code-owner
25+ reviews and signed-commit requirements in branch protection.
26+- **Workflow events** that are accepted but don't start runs yet, such as `issues` and
27+ `issue_comment`. See [Compatibility](https://diffinery.com/docs/actions/compatibility).
28+- **Importing from Gitea, Forgejo and GitLab.** The importer reads from GitHub; other forges
29+ move with [plain Git](https://diffinery.com/docs/migrate-from-github#move-with-plain-git).
30+- **Wikis, discussions and Pages-style static sites.**
31+
32+## Good places to start contributing
33+
34+- Compatibility gaps listed in
35+ [Compatibility with GitHub Actions](https://diffinery.com/docs/actions/compatibility):
36+ each one comes with the GitHub behaviour to match.
37+- Documentation: corrections, missing examples and guides for moving from other CI systems.
38+- Issues labelled `good first issue` and `help wanted`.
39+
40+See [CONTRIBUTING.md](CONTRIBUTING.md) for how to build, test and send changes, and
41+[CHANGELOG.md](CHANGELOG.md) for what has shipped.
addedSUPPORT.md+18−0View file
@@ -1,0 +1,18 @@
1+# Getting help with Diffinery
2+
3+- **How do I…?** Start with the [documentation](https://diffinery.com/docs) and the
4+ [FAQ](https://diffinery.com/faq). Every page is also Markdown, and
5+ [llms.txt](https://diffinery.com/llms.txt) lets an AI assistant read all of it.
6+- **Deploying your own instance:** [Deploy your own Diffinery](https://diffinery.com/docs/self-hosting/deploy),
7+ [Configuration](https://diffinery.com/docs/self-hosting/configuration) and the
8+ troubleshooting section of the deploy guide.
9+- **A workflow behaves differently from GitHub Actions:** check
10+ [Compatibility with GitHub Actions](https://diffinery.com/docs/actions/compatibility) first,
11+ then open an issue with the "Actions compatibility" template.
12+- **Bugs and feature requests:** open an issue on the
13+ [GitHub mirror](https://github.com/codician-team/diffinery/issues) or, if you have an
14+ account there, on [Diffinery](https://diffinery.com/codician/diffinery/issues).
15+- **Security problems:** never in a public issue. See [SECURITY.md](SECURITY.md).
16+
17+Diffinery is a volunteer-run open-source project with no paid support. There is no hosted
18+service: diffinery.com is the instance the project itself is developed on.
modifiedapps/diffinery/src/web/site.tsx+2−0View file
@@ -250,6 +250,8 @@
250250 isAccessibleForFree: true,
251251 offers: { "@type": "Offer", price: "0", priceCurrency: "USD", description: "Free, open-source software. Your instance's Cloudflare usage is billed by Cloudflare." },
252252 softwareHelp: { "@type": "CreativeWork", url: `${o}/docs/self-hosting/deploy` },
253+ installUrl: `${o}/docs/self-hosting/deploy`,
254+ downloadUrl: `${SOURCE.repo}/releases`,
253255 publisher: { "@id": id.org },
254256 sameAs: [`${o}/docs`, SOURCE.repo, SOURCE.github],
255257 },
modifiedapps/diffinery/test/unit/site.test.ts+1−1View file
@@ -161,7 +161,7 @@
161161 // Open source: the license and the repositories, and no early access or pricing.
162162 const source = g.find((n) => n["@type"] === "SoftwareSourceCode")!;
163163 expect(source).toMatchObject({ codeRepository: "https://diffinery.com/codician/diffinery", license: "https://www.apache.org/licenses/LICENSE-2.0", sameAs: ["https://github.com/codician-team/diffinery"] });
164- expect(g.find((n) => n["@type"] === "SoftwareApplication")).toMatchObject({ license: "https://www.apache.org/licenses/LICENSE-2.0", isAccessibleForFree: true });
164+ expect(g.find((n) => n["@type"] === "SoftwareApplication")).toMatchObject({ license: "https://www.apache.org/licenses/LICENSE-2.0", isAccessibleForFree: true, installUrl: `${ORIGIN}/docs/self-hosting/deploy`, downloadUrl: "https://diffinery.com/codician/diffinery/releases" });
165165 expect(html).not.toContain('href="/early-access"');
166166 expect(html).not.toMatch(/not been announced|hasn't been announced|invite-only while/i);
167167 for (const href of ["/compare/github", "/compare/blacksmith", "/performance", "/agents", "/about", "/llms.txt", "/open-source", "/docs/self-hosting", "https://diffinery.com/codician/diffinery", "https://github.com/codician-team/diffinery"]) expect(html, href).toContain(`href="${href}"`);
addedcontext7.json+15−0View file
@@ -1,0 +1,15 @@
1+{
2+ "$schema": "https://context7.com/schema/context7.json",
3+ "projectTitle": "Diffinery",
4+ "description": "Open-source git forge with GitHub Actions-compatible CI, pull requests, an MCP server and AI agent guardrails, running entirely on Cloudflare Workers, Durable Objects, R2 and Containers.",
5+ "folders": ["apps/diffinery/docs", "apps/diffinery/site"],
6+ "excludeFolders": ["apps/diffinery/docs/images", "apps/diffinery/site/blog"],
7+ "rules": [
8+ "Diffinery runs GitHub Actions workflow files from .github/workflows/ (or .diffinery/workflows/); check docs/actions/compatibility.md for every known difference before assuming GitHub behaviour.",
9+ "Hosted runners are Linux x64 Ubuntu 24.04 containers with 4 vCPU and 12 GiB by default; macOS, Windows and Arm jobs need self-hosted runners started with `diffinery runner`.",
10+ "Git works over HTTPS only, with a Diffinery token as the password; there is no SSH.",
11+ "The REST API is GitHub-compatible at https://<host>/api/v3 and GraphQL at https://<host>/api/graphql, so gh and Octokit work with the instance as a GitHub Enterprise host.",
12+ "AI agents should use their own agent account and token; they cannot push or merge to protected branches unless a branch rule allows it, and their pull requests need a person's approval.",
13+ "Diffinery is self-hosted on your own Cloudflare account (Workers Paid plan); deploy with scripts/setup.sh as described in docs/self-hosting/deploy.md."
14+ ]
15+}
addeddocs/README.md+50−0View file
@@ -1,0 +1,50 @@
1+# Diffinery documentation
2+
3+The documentation is published at **[diffinery.com/docs](https://diffinery.com/docs)**. Its
4+source is Markdown in this repository, under
5+[`apps/diffinery/docs/`](../apps/diffinery/docs), and every page is also available as
6+Markdown at `https://diffinery.com/docs/<page>.md` and in
7+[llms.txt](https://diffinery.com/llms.txt) and [llms-full.txt](https://diffinery.com/llms-full.txt)
8+for AI assistants.
9+
10+## Start here
11+
12+| Page | Source |
13+| --- | --- |
14+| [Quickstart](https://diffinery.com/docs/quickstart) | [quickstart.md](../apps/diffinery/docs/quickstart.md) |
15+| [Concepts](https://diffinery.com/docs/concepts) | [concepts.md](../apps/diffinery/docs/concepts.md) |
16+| [Deploy your own Diffinery](https://diffinery.com/docs/self-hosting/deploy) | [self-hosting/](../apps/diffinery/docs/self-hosting) |
17+| [Migrate from GitHub](https://diffinery.com/docs/migrate-from-github) | [migrate-from-github.md](../apps/diffinery/docs/migrate-from-github.md) |
18+| [Connect AI apps (Claude, Claude Code, Codex, Cursor)](https://diffinery.com/docs/connect) | [connect/](../apps/diffinery/docs/connect) |
19+
20+## By topic
21+
22+| Topic | What it covers | Source |
23+| --- | --- | --- |
24+| [Actions](https://diffinery.com/docs/actions/overview) | GitHub Actions–compatible CI: workflow syntax, events, runners, caching, artifacts, secrets, environments, OIDC, Docker, and the [compatibility list](https://diffinery.com/docs/actions/compatibility) | [actions/](../apps/diffinery/docs/actions) |
25+| [Repositories](https://diffinery.com/docs/repositories/git) | Git over HTTPS, browsing code, branch protection, push protection, cloning in editors | [repositories/](../apps/diffinery/docs/repositories) |
26+| [Collaboration](https://diffinery.com/docs/collaboration/pull-requests) | Pull requests, reviews, merge on green, merge queue, issues, releases, checks | [collaboration/](../apps/diffinery/docs/collaboration) |
27+| [Agents](https://diffinery.com/docs/agents/overview) | Agent accounts and guardrails, the MCP server, sandboxes, tasks, review, projects, Today | [agents/](../apps/diffinery/docs/agents) |
28+| [Packages](https://diffinery.com/docs/packages/container-registry) | The container registry | [packages/](../apps/diffinery/docs/packages) |
29+| [Accounts](https://diffinery.com/docs/accounts/passkeys-and-sign-in) | Passkeys, tokens, organizations, permissions, invitations | [accounts/](../apps/diffinery/docs/accounts) |
30+| [Security](https://diffinery.com/docs/security/overview) | Security model, push protection, audit log, vulnerability disclosure | [security/](../apps/diffinery/docs/security) |
31+| [Self-hosting](https://diffinery.com/docs/self-hosting) | Deploy, configure and operate your own instance on Cloudflare; architecture | [self-hosting/](../apps/diffinery/docs/self-hosting) |
32+| [Reference](https://diffinery.com/docs/reference/rest-api) | REST and GraphQL APIs, webhook events, limits | [reference/](../apps/diffinery/docs/reference) |
33+| [Guides](https://diffinery.com/docs/guides) | Faster CI, moving GitHub Actions workflows, running CI while code stays on GitHub, an AI agent with guardrails | [guides/](../apps/diffinery/docs/guides) |
34+
35+## Comparisons
36+
37+[Diffinery vs GitHub](https://diffinery.com/compare/github),
38+[GitLab](https://diffinery.com/compare/gitlab),
39+[Gitea and Forgejo](https://diffinery.com/compare/gitea),
40+[Bitbucket](https://diffinery.com/compare/bitbucket),
41+[CircleCI](https://diffinery.com/compare/circleci),
42+[Buildkite](https://diffinery.com/compare/buildkite),
43+[Blacksmith](https://diffinery.com/compare/blacksmith) and
44+[Depot](https://diffinery.com/compare/depot), with sources, in
45+[`apps/diffinery/site/compare/`](../apps/diffinery/site/compare).
46+
47+## Also in this folder
48+
49+- [PREFERENCES.md](PREFERENCES.md): product and design conventions for contributors.
50+- [images/](images): screenshots used in the README.
addeddocs/images/actions-run.png+0−0View file
Binary file not shown.
addeddocs/images/job-logs-dark.png+0−0View file
Binary file not shown.
addeddocs/images/pull-request.png+0−0View file
Binary file not shown.
addeddocs/images/repository.png+0−0View file
Binary file not shown.
modifiedpackage.json+27−0View file
@@ -1,6 +1,33 @@
11 {
22 "name": "diffinery",
33 "private": true,
4+ "description": "Open-source GitHub and GitHub Actions alternative that runs entirely on Cloudflare: git hosting, pull requests, code review, drop-in GitHub Actions CI and AI agent guardrails.",
5+ "homepage": "https://diffinery.com",
6+ "repository": {
7+ "type": "git",
8+ "url": "https://github.com/codician-team/diffinery.git"
9+ },
10+ "bugs": {
11+ "url": "https://github.com/codician-team/diffinery/issues"
12+ },
13+ "keywords": [
14+ "git",
15+ "git-server",
16+ "forge",
17+ "github-alternative",
18+ "github-actions",
19+ "ci-cd",
20+ "continuous-integration",
21+ "cloudflare",
22+ "cloudflare-workers",
23+ "durable-objects",
24+ "cloudflare-containers",
25+ "self-hosted",
26+ "serverless",
27+ "code-review",
28+ "ai-agents",
29+ "mcp"
30+ ],
431 "license": "Apache-2.0",
532 "packageManager": "pnpm@10.28.0",
633 "scripts": {