Small TypeScript packages built on web standards.
Take one, or take the set. There are 60 of them, written for Remix on
Cloudflare Workers: Request and Response in, typed values out. 37 of
them need neither.
Failure is a value, not a control flow
A handler that composes three of them, and never throws.
import { Markdown } from "@sdxc/markdown";
import { badRequest, ok } from "@sdxc/response";
import { isFailure } from "@sdxc/result";
export async function handler(request: Request) {
let result = Markdown.parse(await request.text(), { frontmatter: Frontmatter });
if (isFailure(result)) return badRequest({ line: result.error.position?.start.line });
return ok(result.data.frontmatter);
}
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 31 packages pull in nothing from outside the collection at all.
Built for Remix, not bound to it
23 target Remix directly, because that is what they are written for. The other
37 depend on no framework and run anywhere fetch does.
The packages, by the problem they solve
HTTP & responses
@sdxc/httpResponse builders, content negotiation, and HTTP caching for the Fetch API
@sdxc/responseSemantic helpers that build Response objects for JSON APIs and redirects
@sdxc/api-clientBase class for clients of a remote HTTP API: one origin, path-relative verb methods, shared hooks
@sdxc/paginationOffset and keyset pagination with parameter parsing and Link headers
@sdxc/server-timingServer-Timing measurements collected per request and written to a response header
@sdxc/catch-response-middlewareRouter middleware that turns a thrown Response into the request's response
@sdxc/get-client-ipRead the client IP from a Cloudflare Workers request
@sdxc/user-agentRead a User-Agent string into its browser, engine, operating system and device
Identity & security
@sdxc/authOAuth 2.0 and OpenID Connect client for any runtime that speaks Request and Response
@sdxc/jwtJWT payload classes and the keys that sign them
@sdxc/passkeyPasskeys on both sides: a one-call WebAuthn browser API and a relying party that verifies the ceremonies
@sdxc/samlSAML 2.0 service provider: verify a signed assertion, build the requests and metadata around it
@sdxc/cryptoWeb Crypto primitives — hashing, HMAC, tokens, TOTP, AES-GCM — plus scrypt passwords
@sdxc/webhooksSign and verify Standard Webhooks deliveries, reporting every failure as a typed value
@sdxc/uuidValidate, assert and generate UUIDs behind a branded UUID type
@sdxc/typeidType-safe TypeID values: a UUID and the prefix that names what it identifies
Content & formats
@sdxc/markdownGitHub Flavored Markdown: parse to a typed AST, transform it, write it back
@sdxc/yamlYAML reading and writing over a documented subset, shaped after the built-in JSON object
@sdxc/xmlXML parser and serializer for RSS-style feeds
@sdxc/htmlRead a served page: fetch or parse HTML, then query it by role and accessible name
@sdxc/rssRSS 2.0 feed builder and parser
@sdxc/atomAtom 1.0 feed parser and builder
@sdxc/json-feedJSON Feed 1.1 builder and parser
@sdxc/feedOne feed API over RSS, Atom and JSON Feed, with conditional fetching and autodiscovery
@sdxc/opmlRead and write OPML subscription lists
@sdxc/sitemapRead and write the sitemap protocol: collect URLs, or fetch a published sitemap
@sdxc/distillDistill the article out of a web page: fetch under bounds, score the candidates, sanitize what is left
Data & storage
@sdxc/cacheCache contract with adapters for memory and Cloudflare KV
@sdxc/workers-cacheCache tags, purging and cache-status reads for Cloudflare Workers Cache
@sdxc/session-storage-kvA remix/session SessionStorage backed by a Cloudflare Workers KV store
@sdxc/data-table-d1A remix/data-table DatabaseDriver backed by Cloudflare D1
@sdxc/data-table-sqlstorageA remix/data-table database driver backed by a Cloudflare Durable Object's SQL storage
Interface
@sdxc/uiStyled, accessible remix/ui components rendered as server HTML
@sdxc/uUtility-first styling for remix/ui, composed from small, terse mixins
@sdxc/iconsLucide icons as remix/ui components, one tree-shakeable export per icon
@sdxc/i18nLanguage detection, i18next instances and translated-markup components
@sdxc/seoCanonical URLs, typed schema.org structured data and head metadata
@sdxc/highlightSyntax highlighting that returns tokens rather than markup, with a markdown walk visitor and a stylesheet keyed to the token types
@sdxc/lazy-routeMaps a route to a module imported on the first request that reaches it
Operations
@sdxc/jobsDeclared background jobs dispatched over a pluggable queue backend
@sdxc/cronCron schedules with zone-aware occurrences and descriptors
@sdxc/loggerOne wide event per Worker invocation, attached at the router and the job dispatcher
@sdxc/rate-limitAdapter-based rate limiting with standard response headers
@sdxc/flagsFeature flag evaluation implementing the OpenFeature specification
@sdxc/flags-engineFlag evaluation engine: typed targeting rules, percentage splits and pluggable stores
@sdxc/billingVendor-neutral billing: one provider contract every payment platform is reached through, plus a webhook endpoint that verifies and deduplicates deliveries
@sdxc/mailTransport-agnostic transactional email with pluggable transports and remix/ui rendering
@sdxc/hostnameCloudflare for SaaS custom-hostname client: register, poll and delete customer domains
@sdxc/mcpModel Context Protocol servers as remix/router actions, served over stateless Streamable HTTP
Language & values
@sdxc/resultResult type for error handling
@sdxc/typesShared TypeScript types
@sdxc/datesZone-aware date operations with Intl-only formatting
@sdxc/durationTyped duration strings converted to milliseconds or seconds
@sdxc/stringsEnglish inflection, Chicago title case, slugs and grapheme-safe text
@sdxc/semverSemVer 2.0.0 parsing, precedence ordering and range-free version comparisons
@sdxc/locationURL-like Location class for URL paths without an origin
@sdxc/validateStandard Schema validation utilities
Testing
@sdxc/specExecutable specification runner for .spec files
@sdxc/sampleSeeded generation of believable people, places, prose, numbers and identifiers
@sdxc/cloudflare-mocksIn-memory, behavior-accurate Cloudflare binding mocks for tests
Three worth the detour
Each of these does something you cannot get by reaching for another package.
Install and pin
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"
}
}
Where to go next
Learning
Start with the guides — what these are, how to install them, and your first handler.
Browsing
Every package, filterable by name and by what it does.
Watching
What shipped, and when, one entry per release date, with the commits that went into it.
MIT licensed, and written by Sergio Xalambrí.