Skip to content

docs(blog): announce the Go rewrite of the Appwrite CLI - #3155

Draft
ChiragAgg5k wants to merge 1 commit into
mainfrom
blog/appwrite-cli-go-rewrite
Draft

docs(blog): announce the Go rewrite of the Appwrite CLI#3155
ChiragAgg5k wants to merge 1 commit into
mainfrom
blog/appwrite-cli-go-rewrite

Conversation

@ChiragAgg5k

Copy link
Copy Markdown
Member

Draft announcement post for the Appwrite CLI Go rewrite, to publish alongside the 26.0.0 stable release. Marked draft: true in the frontmatter, so it does not appear on the blog until that flag is flipped.

Preview locally at /blog/post/rewriting-the-appwrite-cli-in-go.

What the post covers

Structured after Bun's "Bun in Rust" post, which works because it is candid rather than celebratory. The sections are: why the rewrite happened, why Go and not Rust, what measurably improved, what we deliberately refused to change, and the phased process behind it.

Three choices worth calling out for review:

It says plainly what the rewrite did not fix. The cost breakdown names three buckets and concedes that only two were worth touching — everything else is network- or human-bound, and the post says so rather than implying a blanket speedup.

It reports the target we missed. Root help renders in 10.3 ms against a "under 10 ms" goal. The post states that rather than rounding down, and explains that most of the macOS gap sits below our code.

It names three defects that would have shipped. Unsigned darwin/amd64, the no-op version ldflag and its follow-up bug, and the e2e loop that had been silently reporting nothing. All were found by inspecting artifacts and cutting a real release, not by reading code, which is the more useful lesson.

Assets

Every terminal capture is a real recording against the shipped appwrite-cli@25.1.0 and appwrite-cli@26.0.0-rc.1 binaries on the same machine — no mockups, no hand-edited numbers. Recorded with VHS at 1800px so they stay sharp on HiDPI displays, and the prose quotes whatever the final recording produced.

Startup, measured with hyperfine so the tool states the conclusion itself rather than leaving the reader to compare two time outputs:

startup

Install footprint, using --prefix so both runs share one prompt and the version strings identify which CLI is which:

install

footprint

The grouped help screen, full output:

help

Cover, generated with cover.appwrite.network using the Dual Icon Tilted Dark template. The Go mark is the repo's own static/images/platforms/dark/go.svg, recoloured to Go's brand blue:

cover

Open before this can publish

  • Publish date. Currently 2026-08-11. Needs to match the actual 26.0.0 release.
  • Removed services. vcs, migrations and notifications ship in the TypeScript CLI and are intentionally absent from the Go one. Anyone with those in a pipeline breaks on upgrade, and the post currently says flags and aliases held across the whole surface, which overstates it slightly. Either the migration note names the three with their replacement paths, or we handle it in the changelog and soften that sentence — needs a decision plus the replacement path for each.
  • push memory footage. The 283.5 MB to 28.0 MB claim is the one carried by a table rather than a recording, because the staging account has no project to push to. Happy to record it against a real project.
  • Go trademark. The cover uses the Go logo. Ordinary nominative use for a post about rewriting in Go, but flagging in case brand review wants a say.

Notes

  • Images use the "contain" title (src/markdoc/nodes/Image.svelte:17) to opt out of the default 16:9 object-cover crop, which otherwise slices non-16:9 assets.
  • Benchmark figures in the tables are the team's controlled measurements from docs/go-cli/BENCHMARKS.md; the GIFs are live runs on a working machine and drift a few percent between takes. They are presented as illustration, not as the authoritative number.

Draft announcement for the 26.0.0 stable release, covering why the rewrite happened, what it measurably changed, the invariants we held, and the phased process behind it.

Terminal assets are real captures against the shipped 25.1.0 and 26.0.0-rc.1 binaries rather than mockups, recorded at 1800px so they stay sharp on HiDPI displays.
@appwrite

appwrite Bot commented Aug 7, 2026

Copy link
Copy Markdown

Appwrite Website

Project ID: 69d7efb00023389e8d27

Sites (1)
Site Status Logs Preview QR
 website
69d7f2670014e24571ca
Ready Ready View Logs Preview URL QR Code

Website (appwrite/website)

Project ID: 684969cb000a2f6c0a02

Sites (1)
Site Status Logs Preview QR
 website
68496a17000f03d62013
Building Building View Logs Preview URL QR Code


Tip

Messaging handles push notifications, emails, and SMS through one unified API

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant