Compare changes
Choose two branches to see what changed or to start a new pull request.
8 files changed+30−16
Files (8)
modifiedREADME.md+1−1View file
| @@ -222,7 +222,7 @@ | ||
| 222 | 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). |
| 223 | 223 | |
| 224 | 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. | |
| 225 | +Not directly. diffinery.com is the project's home and the instance Diffinery is developed on, and accounts there are by invitation. To try Diffinery there before deploying your own, [request early access](https://diffinery.com/early-access). It isn't a hosted service for teams: to use Diffinery for your work, deploy your own instance. | |
| 226 | 226 | |
| 227 | 227 | **Is Diffinery the only Git platform on Cloudflare?** |
| 228 | 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). |
modifiedapps/diffinery/docs/accounts/early-access.md+2−0View file
| @@ -5,6 +5,8 @@ | ||
| 5 | 5 | |
| 6 | 6 | While a Diffinery instance is invite-only (the default), people without an invitation can ask for one at `/early-access` on that instance. The sign-in page and the sign-up address lead there. A request never grants access by itself: a site administrator reads it and decides whether to send an [invitation](/docs/accounts/invitations). |
| 7 | 7 | |
| 8 | +On diffinery.com, the project's own instance, this is how to try Diffinery before you deploy your own: [request early access there](https://diffinery.com/early-access). | |
| 9 | + | |
| 8 | 10 | The form is only there while sign-up is closed. On an instance with [open sign-up](/docs/accounts/passkeys-and-sign-in#open-sign-up) (`SIGNUP=open`), `/early-access` leads to the sign-up page instead. |
| 9 | 11 | |
| 10 | 12 | ## Request early access |
modifiedapps/diffinery/docs/self-hosting.md+2−0View file
| @@ -6,6 +6,8 @@ | ||
| 6 | 6 | |
| 7 | 7 | Diffinery is open-source software under the Apache License 2.0, and the way to use it is to run your own instance on your own Cloudflare account and domain. There's no hosted service to sign up for: diffinery.com is the project's own instance. This page is the overview; [Deploy your own Diffinery](/docs/self-hosting/deploy) is the step-by-step guide. |
| 8 | 8 | |
| 9 | +> **Want to try it before you deploy?** [Request early access](https://diffinery.com/early-access) to diffinery.com, the project's own instance. Its administrators review requests and email invitations; see [Early access](/docs/accounts/early-access). | |
| 10 | + | |
| 9 | 11 | ## Get the source |
| 10 | 12 | |
| 11 | 13 | The repository is [diffinery.com/codician/diffinery](https://diffinery.com/codician/diffinery), mirrored to [github.com/codician-team/diffinery](https://github.com/codician-team/diffinery). Clone either one; both carry the same `main` branch, with the `LICENSE` and `NOTICE` files at the top. |
modifiedapps/diffinery/site/about.md+1−1View file
| @@ -22,7 +22,7 @@ | ||
| 22 | 22 | Diffinery is free, open-source software under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). There are no plans, prices or sales, and no hosted service for other teams: everyone runs their own instance on their own Cloudflare account and domain, and pays Cloudflare only for what it uses. See [Open source](/open-source) and [Deploy your own Diffinery](/docs/self-hosting/deploy). |
| 23 | 23 | |
| 24 | 24 | - **Source code:** [diffinery.com/codician/diffinery](https://diffinery.com/codician/diffinery), where Diffinery is developed, mirrored to [github.com/codician-team/diffinery](https://github.com/codician-team/diffinery). |
| 25 | -- **diffinery.com** is the project's home: this site, the documentation, and the instance Diffinery itself is built on. Accounts there are by invitation, for the people working on Diffinery. | |
| 25 | +- **diffinery.com** is the project's home: this site, the documentation, and the instance Diffinery itself is built on. Accounts there are by invitation, for the people working on Diffinery and for people trying it through [early access](https://diffinery.com/early-access). | |
| 26 | 26 | |
| 27 | 27 | ## How we check what we publish |
| 28 | 28 |
modifiedapps/diffinery/site/faq.md+1−1View file
| @@ -19,7 +19,7 @@ | ||
| 19 | 19 | |
| 20 | 20 | ### How do I start using Diffinery? |
| 21 | 21 | |
| 22 | -Deploy your own instance to your Cloudflare account and domain: one command from a clone, `scripts/setup.sh`, creates everything it needs, and you sign in as its first administrator. Then invite your team, or open sign-up. See [Deploy your own Diffinery](/docs/self-hosting/deploy). Diffinery doesn't offer a hosted service for other teams; diffinery.com is the project's own instance. | |
| 22 | +Deploy your own instance to your Cloudflare account and domain: one command from a clone, `scripts/setup.sh`, creates everything it needs, and you sign in as its first administrator. Then invite your team, or open sign-up. See [Deploy your own Diffinery](/docs/self-hosting/deploy). Diffinery doesn't offer a hosted service for teams; to try it before you deploy, [request early access](https://diffinery.com/early-access) to diffinery.com, the project's own instance. | |
| 23 | 23 | |
| 24 | 24 | ### Is Diffinery a GitHub alternative? |
| 25 | 25 |
modifiedapps/diffinery/site/open-source.md+2−2View file
| @@ -51,7 +51,7 @@ | ||
| 51 | 51 | |
| 52 | 52 | ## What diffinery.com is |
| 53 | 53 | |
| 54 | -diffinery.com is the project's home: this site, the [documentation](/docs), and the Diffinery instance that Diffinery itself is developed on, with its CI, deploys and agents. Accounts there are by invitation, for the people working on Diffinery. It isn't a hosted service for other teams; to use Diffinery, run your own instance. | |
| 54 | +diffinery.com is the project's home: this site, the [documentation](/docs), and the Diffinery instance that Diffinery itself is developed on, with its CI, deploys and agents. Accounts there are by invitation. If you'd like to try Diffinery before running your own, [request early access](https://diffinery.com/early-access): its administrators review requests and email invitations. It isn't a hosted service for teams; to use Diffinery for your work, run your own instance. | |
| 55 | 55 | |
| 56 | 56 | ## Contribute |
| 57 | 57 | |
| @@ -71,7 +71,7 @@ | ||
| 71 | 71 | |
| 72 | 72 | ### Is there a hosted version I can sign up for? |
| 73 | 73 | |
| 74 | -No. diffinery.com is the project's own instance, by invitation for the people working on Diffinery. You deploy your own instance to your Cloudflare account; see [Deploy your own Diffinery](/docs/self-hosting/deploy). | |
| 74 | +Not one to sign up for. To try Diffinery, [request early access](https://diffinery.com/early-access) to diffinery.com, the project's own instance, where accounts are by invitation. To use Diffinery for your team, deploy your own instance to your Cloudflare account; see [Deploy your own Diffinery](/docs/self-hosting/deploy). | |
| 75 | 75 | |
| 76 | 76 | ### What does running Diffinery cost? |
| 77 | 77 |
modifiedapps/diffinery/src/web/site.tsx+16−9View file
| @@ -158,8 +158,12 @@ | ||
| 158 | 158 | a: "Yes, under the Apache License 2.0, with no paid edition and nothing sold. The source code is at [diffinery.com/codician/diffinery](https://diffinery.com/codician/diffinery) and mirrored to [github.com/codician-team/diffinery](https://github.com/codician-team/diffinery). See [Open source](/open-source).", |
| 159 | 159 | }, |
| 160 | 160 | { |
| 161 | + q: "Can I try Diffinery without deploying it?", | |
| 162 | + a: "Yes. [Request early access](https://diffinery.com/early-access) to diffinery.com, the project's own instance: its administrators review requests and email invitations, and you try Diffinery there. To run Diffinery for your team, deploy your own instance. See [Early access](/docs/accounts/early-access).", | |
| 163 | + }, | |
| 164 | + { | |
| 161 | 165 | q: "How do I start using Diffinery, and what does it cost?", |
| 162 | - a: "Deploy your own instance to your Cloudflare account and domain with one command, `scripts/setup.sh`, then sign in as its first administrator and invite your team. See [Deploy your own Diffinery](/docs/self-hosting/deploy). Diffinery is free; you pay Cloudflare for what your instance uses, on the Workers Paid plan (a minimum of $5 USD per month per account, plus usage; [Cloudflare's pricing](https://developers.cloudflare.com/workers/platform/pricing/), checked October 25, 2026). There's no hosted service to sign up for: diffinery.com is the project's own instance.", | |
| 166 | + a: "Deploy your own instance to your Cloudflare account and domain with one command, `scripts/setup.sh`, then sign in as its first administrator and invite your team. See [Deploy your own Diffinery](/docs/self-hosting/deploy). Diffinery is free; you pay Cloudflare for what your instance uses, on the Workers Paid plan (a minimum of $5 USD per month per account, plus usage; [Cloudflare's pricing](https://developers.cloudflare.com/workers/platform/pricing/), checked October 25, 2026). There's no hosted service to sign up for; to try Diffinery first, [request early access](https://diffinery.com/early-access) to diffinery.com, the project's own instance.", | |
| 163 | 167 | }, |
| 164 | 168 | ], |
| 165 | 169 | }; |
| @@ -199,7 +203,7 @@ | ||
| 199 | 203 | "", |
| 200 | 204 | "## Open source, on your own Cloudflare account", |
| 201 | 205 | "", |
| 202 | - `Diffinery is open source under the Apache License 2.0: [source code](${SOURCE.repo}), [mirror on GitHub](${SOURCE.github}). Deploy it with [Deploy your own Diffinery](/docs/self-hosting/deploy); you pay Cloudflare only for what your instance uses. See [Open source](/open-source).`, | |
| 206 | + `Diffinery is open source under the Apache License 2.0: [source code](${SOURCE.repo}), [mirror on GitHub](${SOURCE.github}). Deploy it with [Deploy your own Diffinery](/docs/self-hosting/deploy); you pay Cloudflare only for what your instance uses. To try it first, [request early access](${EARLY_ACCESS}) to diffinery.com. See [Open source](/open-source).`, | |
| 203 | 207 | "", |
| 204 | 208 | "## Frequently asked questions", |
| 205 | 209 | "", |
| @@ -228,6 +232,9 @@ | ||
| 228 | 232 | spdx: "Apache-2.0", |
| 229 | 233 | }; |
| 230 | 234 | |
| 235 | +/** Where to ask to try Diffinery on the project's own instance, whatever instance serves this page (web/early-access.tsx). */ | |
| 236 | +export const EARLY_ACCESS = "https://diffinery.com/early-access"; | |
| 237 | + | |
| 231 | 238 | /** schema.org ids for the site's entities, shared by every page's graph. */ |
| 232 | 239 | const ids = (o: string) => ({ org: `${o}/#organization`, site: `${o}/#website`, app: `${o}/#software`, source: `${o}/#source` }); |
| 233 | 240 | |
| @@ -316,12 +323,12 @@ | ||
| 316 | 323 | <a class="btn primary" href="/docs/self-hosting"> |
| 317 | 324 | Deploy your own |
| 318 | 325 | </a> |
| 326 | + <a class="btn" href={EARLY_ACCESS} title="Try Diffinery on diffinery.com before you deploy your own"> | |
| 327 | + Request early access | |
| 328 | + </a> | |
| 319 | 329 | <a class="btn" href={SOURCE.repo}> |
| 320 | 330 | View the source |
| 321 | 331 | </a> |
| 322 | - <a class="btn" href="/docs"> | |
| 323 | - Read the docs | |
| 324 | - </a> | |
| 325 | 332 | </> |
| 326 | 333 | ); |
| 327 | 334 | |
| @@ -342,7 +349,7 @@ | ||
| 342 | 349 | <Cta /> |
| 343 | 350 | </p> |
| 344 | 351 | <p class="muted small"> |
| 345 | - Free, with nothing to buy: you run Diffinery on your own Cloudflare account. Source on <a href={SOURCE.repo}>Diffinery</a> and <a href={SOURCE.github}>GitHub</a>. | |
| 352 | + Free, with nothing to buy: you run Diffinery on your own Cloudflare account. Want to try it first? <a href={EARLY_ACCESS}>Request early access</a> to diffinery.com. Source on <a href={SOURCE.repo}>Diffinery</a> and <a href={SOURCE.github}>GitHub</a>. | |
| 346 | 353 | </p> |
| 347 | 354 | </section> |
| 348 | 355 | <ul class="mk-stats" aria-label="Diffinery in numbers"> |
| @@ -443,7 +450,7 @@ | ||
| 443 | 450 | </section> |
| 444 | 451 | <section class="mk-band"> |
| 445 | 452 | <h2>Run Diffinery on your own Cloudflare account</h2> |
| 446 | - <p class="muted">Open source under Apache-2.0. Your workflows, your editor and gh keep working, your agents get guardrails, and you pay Cloudflare only for what you use.</p> | |
| 453 | + <p class="muted">Open source under Apache-2.0. Your workflows, your editor and gh keep working, your agents get guardrails, and you pay Cloudflare only for what you use. Not ready to deploy? Request early access and try it on diffinery.com first.</p> | |
| 447 | 454 | <p class="row" style="justify-content:center"> |
| 448 | 455 | <Cta /> |
| 449 | 456 | </p> |
| @@ -564,7 +571,7 @@ | ||
| 564 | 571 | <div class="markdown mk-body">{raw(html)}</div> |
| 565 | 572 | <aside class="mk-band"> |
| 566 | 573 | <h2>Run Diffinery yourself</h2> |
| 567 | - <p class="muted">Open source under Apache-2.0, deployed to your own Cloudflare account.</p> | |
| 574 | + <p class="muted">Open source under Apache-2.0, deployed to your own Cloudflare account. Or request early access and try it on diffinery.com first.</p> | |
| 568 | 575 | <p class="row" style="justify-content:center"> |
| 569 | 576 | <Cta /> |
| 570 | 577 | </p> |
| @@ -598,7 +605,7 @@ | ||
| 598 | 605 | "", |
| 599 | 606 | `- [Home page](${o}/index.md): ${HOME.description}`, |
| 600 | 607 | `- Open source under the Apache License 2.0 (SPDX: ${SOURCE.spdx}). Source code: ${SOURCE.repo}, mirrored to ${SOURCE.github}. Free, with no paid edition and nothing sold.`, |
| 601 | - `- How to use it: deploy your own instance to your own Cloudflare account and domain (Workers Paid plan); you pay Cloudflare for what it uses. Guide: ${o}/docs/self-hosting/deploy.md. Overview: ${o}/docs/self-hosting.md. There's no hosted service for other teams: diffinery.com is the project's home and its own instance, with accounts by invitation for the people working on Diffinery.`, | |
| 608 | + `- How to use it: deploy your own instance to your own Cloudflare account and domain (Workers Paid plan); you pay Cloudflare for what it uses. Guide: ${o}/docs/self-hosting/deploy.md. Overview: ${o}/docs/self-hosting.md. There's no hosted service for teams to sign up for: diffinery.com is the project's home and its own instance, with accounts by invitation. To try Diffinery before deploying your own, request early access at ${EARLY_ACCESS} (how it works: ${o}/docs/accounts/early-access.md).`, | |
| 602 | 609 | `- Runs entirely on Cloudflare (Workers, Durable Objects, R2, D1, Queues, Workflows, Containers): code, pull requests, CI runners and the agent features alike. It is ${CLOUDFLARE_CLAIM} See ${o}/built-on-cloudflare.md, which compares the other Git and CI projects on Cloudflare.`, |
| 603 | 610 | "- Hosted CI runners: Ubuntu 24.04 x64 containers, 4 vCPU and 12 GiB of memory by default, with smaller sizes chosen per job from its measured runs. No hosted macOS, Windows or Arm runners; self-hosted runners cover them.", |
| 604 | 611 | "- Runs GitHub Actions workflow files from `.github/workflows/` as they are; differences are listed at " + `${o}/docs/actions/compatibility.md`, |
modifiedapps/diffinery/test/unit/site.test.ts+5−2View file
| @@ -158,11 +158,13 @@ | ||
| 158 | 158 | expect(html).toContain("Code hosting and CI for the agentic era</h1>"); |
| 159 | 159 | const g = graph(html); |
| 160 | 160 | expect(types(g)).toEqual(expect.arrayContaining(["Organization", "WebSite", "SoftwareApplication", "SoftwareSourceCode", "WebPage", "FAQPage"])); |
| 161 | - // Open source: the license and the repositories, and no early access or pricing. | |
| 161 | + // Open source: the license and the repositories, no pricing, and early access to try it on diffinery.com. | |
| 162 | 162 | const source = g.find((n) => n["@type"] === "SoftwareSourceCode")!; |
| 163 | 163 | 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 | 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" }); |
| 165 | - expect(html).not.toContain('href="/early-access"'); | |
| 165 | + expect(html).toContain('href="https://diffinery.com/early-access"'); | |
| 166 | + const faq = g.find((n) => n["@type"] === "FAQPage") as { mainEntity: Array<{ name: string; acceptedAnswer: { text: string } }> }; | |
| 167 | + expect(faq.mainEntity.find((q) => q.name === "Can I try Diffinery without deploying it?")?.acceptedAnswer.text).toContain("Request early access to diffinery.com"); | |
| 166 | 168 | expect(html).not.toMatch(/not been announced|hasn't been announced|invite-only while/i); |
| 167 | 169 | 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}"`); |
| 168 | 170 | }); |
| @@ -199,6 +201,7 @@ | ||
| 199 | 201 | expect(txt).toContain(`(${ORIGIN}/index.md)`); |
| 200 | 202 | for (const p of pages) expect(txt).toContain(`(${ORIGIN}${p.path}.md)`); |
| 201 | 203 | expect(txt.indexOf(`${ORIGIN}/compare/github.md`)).toBeLessThan(txt.indexOf(`${ORIGIN}/docs/quickstart.md`)); |
| 204 | + expect(txt).toContain("request early access at https://diffinery.com/early-access"); | |
| 202 | 205 | }); |
| 203 | 206 | |
| 204 | 207 | it("states the Cloudflare claim the same way everywhere, backed by the sourced list of other projects", async () => { |