docs(blog): announce the Go rewrite of the Appwrite CLI - #3155
Draft
ChiragAgg5k wants to merge 1 commit into
Draft
docs(blog): announce the Go rewrite of the Appwrite CLI#3155ChiragAgg5k wants to merge 1 commit into
ChiragAgg5k wants to merge 1 commit into
Conversation
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 WebsiteProject ID: Website (appwrite/website)Project ID: Tip Messaging handles push notifications, emails, and SMS through one unified API |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Draft announcement post for the Appwrite CLI Go rewrite, to publish alongside the 26.0.0 stable release. Marked
draft: truein 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.0andappwrite-cli@26.0.0-rc.1binaries 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
hyperfineso the tool states the conclusion itself rather than leaving the reader to compare twotimeoutputs:Install footprint, using
--prefixso both runs share one prompt and the version strings identify which CLI is which:The grouped help screen, full output:
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:Open before this can publish
2026-08-11. Needs to match the actual 26.0.0 release.vcs,migrationsandnotificationsship 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.pushmemory 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.Notes
"contain"title (src/markdoc/nodes/Image.svelte:17) to opt out of the default 16:9object-covercrop, which otherwise slices non-16:9 assets.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.