sdxc
Take one, or take the set. There are 142 of them, built on fetch, Request,
Response and Web Crypto, so most run unchanged on Cloudflare Workers, Bun, Deno and Node.
import { Markdown } from "@sdxc/markdown"; import { badRequest, ok } from "@sdxc/response"; import { isFailure } from "@sdxc/result"; async function handle(request: Request) { let parsed = Markdown.parse(await request.text()); if (isFailure(parsed)) { let line = parsed.error.position?.start.line; return badRequest({ error: parsed.error.message, line }); } return ok({ frontmatter: parsed.data.frontmatter }); } export default { fetch: handle };
import { Markdown } from "@sdxc/markdown"; import { badRequest, ok } from "@sdxc/response"; import { isFailure } from "@sdxc/result"; async function handle(request: Request) { let parsed = Markdown.parse(await request.text()); if (isFailure(parsed)) { let line = parsed.error.position?.start.line; return badRequest({ error: parsed.error.message, line }); } return ok({ frontmatter: parsed.data.frontmatter }); } Bun.serve({ port: 3000, fetch: handle });
import { Markdown } from "@sdxc/markdown"; import { badRequest, ok } from "@sdxc/response"; import { isFailure } from "@sdxc/result"; async function handle(request: Request) { let parsed = Markdown.parse(await request.text()); if (isFailure(parsed)) { let line = parsed.error.position?.start.line; return badRequest({ error: parsed.error.message, line }); } return ok({ frontmatter: parsed.data.frontmatter }); } Deno.serve({ port: 3000 }, handle);
import { createRequestListener } from "@remix-run/node-fetch-server"; import { createServer } from "node:http"; import { Markdown } from "@sdxc/markdown"; import { badRequest, ok } from "@sdxc/response"; import { isFailure } from "@sdxc/result"; async function handle(request: Request) { let parsed = Markdown.parse(await request.text()); if (isFailure(parsed)) { let line = parsed.error.position?.start.line; return badRequest({ error: parsed.error.message, line }); } return ok({ frontmatter: parsed.data.frontmatter }); } createServer(createRequestListener(handle)).listen(3000);
Everything between the Request and the Response.
Validation, auth, caching, jobs, feeds and the UI on top: 142 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
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 50 packages pull in nothing from outside the collection at all.
Framework-free at the core
49 depend on no framework and run anywhere fetch does. The other
93 add Remix middleware and bindings on top, as exports you opt into.
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"
}
}People who fund this work
The collection is written and maintained in the open, funded through GitHub Sponsors by the people and teams below.
Take one, or take the set.
Start with the guides, or go straight to the package you came for.