Convert pub.leaflet RTF-block documents (site.standard.document ATProto records) to Markdown — available as both a CLI tool and a TypeScript library.
Generic deterministic value-noise generation. Arbitrary dimensions, multi-octave FBM, multiple colour modes. Zero dependencies, works in browsers and Node.js.
Deterministic value-noise avatar generation from a string seed — thin wrapper around @ewanc26/noise, works in browsers and Node.js.
SvelteKit component library for displaying Ko-fi supporters and GitHub Sponsors, backed by an ATProto PDS.
Ewan's personal package monorepo — language-agnostic workspace with TypeScript, Rust, and Python packages.
Ewan's personal package monorepo — the canonical home for @ewanc26/tid, @ewanc26/atproto, @ewanc26/ui, and @ewanc26/utils.
Svelte UI component library extracted from ewancroft.uk — pluggable layout, card, SEO, and UI primitive components alongside Svelte stores and a multi-theme config system.
AT Protocol service layer extracted from ewancroft.uk — profile fetching, Standard.site documents, Bluesky posts, music/mood status, Tangled repos, and a built-in in-memory cache.
Shared utility functions extracted from ewancroft.uk — date formatting, number formatting, URL helpers, validators, RSS generation, and locale detection.
Zero-dependency, spec-compliant AT Protocol TID generation for Node.js and browsers.
SvelteKit library for reading and writing AT Protocol longform content via site.standard.* and pub.leaflet.* records — with a complete design system, federated comments, publishing tools, and content verification.
A kotlin multiplatform, reactive map-like abstract data type for fetching keyed data
A collection of modules to help bootstrap an Android App