June 13, 2026 at 12:00:00 AM UTC

ListenBrainz support and OG image caching in pkgs

pkgsmalachiteog-imagesinfrastructure

listenbrainz integration

Malachite gained a new import source: ListenBrainz. Contributed by shahoob, this adds support for importing listening history from the open-source music tracking platform.

The integration includes:

  • A ListenBrainz record interface mapping to malachite's internal play record format
  • MBID (MusicBrainz Identifier) handling for rich metadata linking
  • A dedicated record converter that normalises ListenBrainz JSON exports into the standard malachite ingestion pipeline
  • Updated Teal lexicons to accommodate the new source's data shape

This expands malachite's scope beyond commercial platforms (Last.fm, Spotify, Apple Music, YouTube Music) into the open-source music ecosystem. The architecture keeps the conversion logic isolated — each service gets its own converter module that implements a shared interface, so adding a new source is a matter of writing one new file and registering it in the barrel export.

The contribution was made as a feature branch merge into the monorepo, preserving full commit history and proper co-author attribution.

og image caching with vercel blob

The shared OG image infrastructure across all pkgs tools got two improvements:

Vercel Blob caching. Dynamic OG images are now cached in Vercel Blob storage. On the first request, the image is generated and stored; subsequent requests serve the cached version. This reduces cold-start latency (no need to re-render the SvelteKit function and load fonts on every request) and cuts Vercel function execution costs.

Documentation OG template. A new documentationTemplate was added to the built-in OG template library, joining the existing blog, project, and generic templates. This gives docsite and similar documentation pages proper social preview images with a document-specific layout.

noise memoization

The noise texture generator got memoization for its background patterns. Previously, every OG image generation call created new noise textures from scratch — now they reuse cached textures when the parameters match, saving several hundred milliseconds per render.


all entries