Series

Feopack

Notes from learning Rspack by building a small Rust bundler.

  1. 1

    Feopack: From a JavaScript API to a Rust Compiler

    2026-05-03

    Why Feopack began at the JavaScript boundary, how NAPI connected it to Rust, and what had to exist before the bundler could build its first module graph.

  2. 2

    Feopack: From Source Files to a Working Bundle

    2026-05-04

    How Feopack grew from an empty Compilation into a module graph, one deliberately simple chunk, and a tiny runtime that could preserve basic ESM behavior.

  3. 3

    Feopack: From Text Files to Virtual Modules

    2026-09-02

    How Feopack's first text transform grew into a loader pipeline with rules, chained transforms, resource queries, virtual modules, and inline requests.

  4. 4

    Feopack: Loader Pitch Across Rust and JavaScript

    2026-09-02

    How Feopack added pitch, replaced noisy inline recipes with Meow v3, crossed the Rust/JavaScript boundary, and preserved one loader chain across two runtimes.

  5. 5

    Feopack: Turning the Compiler Lifecycle into a Plugin System

    2026-09-05

    How Feopack exposed its compiler lifecycle to Rust and JavaScript plugins, then removed an abstraction that confused phases with hooks.

  6. 6

    Feopack: Turning One Build into a Watch Loop

    2026-09-06

    Why watch mode became a scheduling problem involving discovered dependencies, aggregated changes, stale builds, and a compiler that still rebuilt everything.

  7. 7

    Feopack: What Actually Became Invalid?

    2026-09-10

    How Feopack turned changed file paths into a conservative invalidation model, reused an old module graph inside a fresh Compilation, and deliberately kept Seal non-incremental.