sdxc
Take one, or take the set. There are 121 of them, written for Remix on
Cloudflare Workers: Request and Response in, typed values out.
sdxc create blog
cd blog && bun install
sdxc make controller posts/show
sdxc make job digests/send --cron "0 8 * * *"
sdxc ui add dialog
sdxc run about
Everything between the Request and the Response.
Validation, auth, caching, jobs, feeds and the UI on top: 121 packages that already agree on how to fail, so the tenth one you install reads like the first.
Packages that agree with each other
Every package answers the same way, so the second one you pick up already reads like the first. Each example here composes a few of them and never throws.
RequestandResponsein and out, never a framework's own objectsEvery fallible entry point answers with a
ResultStandard Schema at every boundary that reads untrusted input
Subpath exports, so what you skip stays out of the bundle
[ Principles ]
What holds the set together
Web standards first
Request, Response, Web Crypto, Intl and Standard Schema — the platform, not a shim over it.
Errors are values
Every fallible entry point answers with a Result, so nothing throws past you and the
failure carries where it happened.
Nothing you didn't ask for
Subpath exports keep what you skip out of your bundle, and 53 packages pull in nothing from outside the collection at all.
Built for Remix, not bound to it
64 target Remix directly, because that is what they are written for. The other
57 depend on no framework and run anywhere fetch does.
[ Packages ]
The packages, by the problem they solve
Three worth the detour
Each of these does something you cannot get by reaching for another package: specs you can run, components that work before any JavaScript loads, and a markdown parser this very page is rendered through.
@sdxc/specruns specifications under permissions you grant by name@sdxc/uibuilds on<dialog>, the Popover API and Invoker Commands@sdxc/markdowngives you a typed tree to walk, transform and write back
Versions are dates
A release published on the 21st of September 2026 is 2026.9.21. There is at most one a day,
and a later date means a later release and nothing more: it promises no compatibility with the
one before it.
So pin exactly, and move when you are ready to read what changed.
{
"dependencies": {
"@sdxc/result": "2026.9.21"
}
}
Take one, or take the set.
Start with the guides, or go straight to the package you came for.