Repository navigation
Releases: colinhacks/motherload
Releases · colinhacks/motherload
Release list
v0.2.0
Docs: https://motherload.dev
Packages
@motherload/core@0.2.0@motherload/csv@0.2.0@motherload/env@0.2.0@motherload/json5@0.2.0@motherload/jsonc@0.2.0@motherload/md@0.2.0@motherload/toml@0.2.0@motherload/txt@0.2.0@motherload/yaml@0.2.0motherload@0.2.0
Commits since v0.1.0
- f9e9fab Every package is at 0.2.0, for the release of motherload/webpack, motherload/turbopack, motherload/vite and motherload/jest and each format package's own (nub run bump 0.2.0). Verified: CI run 39669622440 green at 1dadaab, the commit before this one.
- 01a0a11 docs-kit synced to 0b58abc, from 8b2e2d3: a code-tab strip can hold the page's choice at its right end, marked aside, which Reylo's examples now use (main.ts | users_by_ids.sql on the left, Postgres | MySQL | SQLite on the right), and a with no variant for the page's choice shows its first. Nothing on this site uses either, so the page is unchanged. Verified: nub run build in site/.
- 1dadaab The lab/jest tests and nub run check-dist match Jest's and Vitest's summaries without colour codes: CI run 39668941713 failed bee4872 on the Vitest test, whose output on GitHub's runner read
Tests 1 passed (1)with colour codes around each part, where the same command in a terminal here wrote none, and Jest colours its own summary under FORCE_COLOR. Verified: FORCE_COLOR=1 with TERM set, the three lab/jest tests pass, and the Jest two failed before; nub run typecheck; nub run test, 75 of 75. - bee4872 Motherload's webpack loader is motherload/webpack, and the same function is motherload/turbopack, in every format package as well, the maintainer's answer of 2026-10-21 for Motherload and Reylo alike: "Rename to Webpack in both, but let's also include /turbopack. Unless there's a reason not to? Should be easy to share the code." Neither name had been published. Motherload also has a plugin for Vite, Vitest, Rollup and Rolldown, motherload/vite, and a Jest transformer, motherload/jest, each in every format package too, the maintainer's "Build both now." The plugin is one Rollup-shaped load hook,
enforce: "pre"because Vite's asset handling otherwise makes.txta data: URL, returningmoduleType: "js"because Rolldown 1.2.14 otherwise exported a.txtmodule's code as a string, and leaving a file another Motherload plugin claims more strongly to it, found in Vite's resolved plugins or Rollup's and Rolldown's input options. A preload does not reach Jest's test code, which jest-runtime compiles itself, so the transformer gives Jest the module as ESM when Jest asks for it and otherwise as CommonJS, rewritten line by line, stepping over strings, with the module itself as the cache key. The .env module now reads the file with util.parseEnv and sets each variable the environment does not, which is what process.loadEnvFile does, because Jest gives each test file a copy of process.env that process.loadEnvFile never writes to; measured equal to process.loadEnvFile on eleven keys. Jest, like Turbopack, runs only the first transform pattern that matches, so the longer suffix goes first. lab/bundlers also bundles lab/basic's files with Vite, Rollup and Rolldown, lab/jest (Jest 30.5.2, Vitest 5.0.5, its own dependencies, installed in CI) imports them in a CommonJS test, an ES module test and Vitest, nub run check-dist installs the tarballs into copies of five labs and fails on any warning, and tests/host-types.ts type-checks the plugin in each host's config type. The docs page's Plugins has Vite and Jest panels, Loaders à la carte has Vite and webpack tabs beside Next.js's, and the agent prompt names every entry. Verified: nub run typecheck; nub run test, 75 of 75, among them all five bundlers printing lab/basic's output, deference to a stand-in for dotschema's loader in both orders in webpack, Rspack, Rollup, Rolldown and Vite, lab/nextjs built with Turbopack and with webpack, and lab/jest under Jest's CommonJS and ESM and Vitest; nub run build and nub run check-dist, every lab clean; nub run build in site/, the Vite and Jest panels opened in Puppeteer's headless shell. - 62d5a90 microsoft/TypeScript#64912, the maintainer's, filed on 2026-10-21, asks TypeScript to pass an import's query or its import attributes to a content mapper, so that
./app.yaml?widenedcould be typed widened beside theas constdefault; PLAN.md's Open section records it. A level per extension, atypesmap in a tsconfig entry's options, was prototyped and works, and the maintainer turned it down: "It kind of sucks. I think we should just request the ability to read query parameters." DESIGN.md's How an import chooses records it with the cost it would answer: 500,358 types and 326 MB for a YAML list of 50,000 five-field rows typedas const, 346 types and 29 MB widened. PLAN.md's content mapper facts gain two rows: each contentMappers entry is its own project, whose projectHandle each transform carries (measured on 20261002.1 with three entries of one probe package), and an import attribute on a mapped file is accepted and not forwarded (measured on 7.1.0-beta under bundler, nodenext and preserve), while at run time Node keys modules by URL, so two attribute variants of one file are one module and two queries are two, and esbuild keeps both apart. Verified: nub run typecheck; nub run test, 63 of 63. - 953627c Motherload has a webpack loader, motherload/webpack-loader and each format package's own, for webpack, Rspack and Next.js with Turbopack and with webpack, the maintainer's instruction of 2026-10-21 after a fresh agent, given only the docs' agent prompt, set Motherload up in a Next.js app and had to write a Turbopack loader of its own over the esbuild plugin: "That includes adding a dedicated Webpack/Turbopack loader. I'm kind of surprised we don't have that." Core's toWebpackLoader passes through a file another Motherload loader on the resource claims more strongly, found through this.loaders by Symbol.for("motherload.plugin"), and a file with a query. The .env module ends in
export {}, without which Rspack 2.2.9 wrotevar = __webpack_require__(…)for it, and tries the file at import.meta.url before the one from the working directory, since webpack and Rspack write the source file's URL there. lab/bundlers bundles lab/basic's files with webpack and Rspack, and lab/nextjs (Next.js 16.4.2, its own dependencies, installed in CI) imports them in a server and a client component. The docs page's Plugins has Next.js and webpack and Rspack panels and Loaders à la carte their tabs; the Next.js setup turns next build's own type check off and runs the typecheck script first, after next typegen, because Next.js runs tsc with fixed arguments and TypeScript takes runExternalCode from the command line only (TS18068), until the maintainer's vercel/next.js#99544 lands (PLAN.md, Open). The agent prompt points at /llms.txt and lab/nextjs, says which dependency field each kind of app uses, names every plugin, tells an agent not to write a loader for a host with none, and defaults the editor to VS Code. DESIGN.md's new section records the measurements, among them that Turbopack runs only the first rule that matches a file. Verified: nub run typecheck; nub run test, 63 of 63, among them webpack and Rspack bundles that print lab/basic's output, both orders of rules deferring to a stand-in for dotschema's loader in webpack and Rspack (both builds fail without the mark), the .env fallback, and lab/nextjs type-checked and built with Turbopack and with webpack, the data in the prerendered page and in the client component's chunk; nub run build, and nub run check-dist installing the tarballs into copies of all four labs, Next.js building with no warning; nub run build in site/, the new panels opened in Puppeteer's headless shell. - d867681 The docs page renders every closed accordion's and every tab's content into its HTML, and answers a request that asks for Markdown with the page as Markdown (docs-kit 8b2e2d3, synced), the maintainer's two requests of 2026-10-21 after a fresh agent set Motherload up from the agent prompt and found the Editors, Nub and esbuild panels empty when it fetched the page: "We definitely should be servicing the HTML for closed accordions. That's a huge problem", and "we should be actually returning Markdown or MDX or whatever if an agent accesses the page ... We should be doing that in both Reylo and Motherload, and DocsKit in general." docs-kit's own Accordion keeps each item's content in the page, closed items hidden until found, so find-in-page and a link into one open it, and every tab panel is rendered; a request whose Accept names text/markdown ahead of any text/html (Claude Code, Cursor, OpenCode and Copilot send it) gets /llms.txt for / through a routes entry in site/vercel.json, with Vary: Accept on both answers, and llms.ts builds the Markdown with docs-kit's pageMarkdown. Verified: nub run build in site/, the built page holding native-preview, useTsgo, typescript-ls, nub.jsonc and buildSync, which the live page lacks, and no empty tab panel; llms.txt byte-identical; under the dev server in Puppeteer's headless shell every accordion closed with hidden=until-found after hydration and opening with its animation; the same routes entry answers Markdown on reylo.dev (reylosql/reylo-dev 6ce0a1c).
- 0a3316d DESIGN.md and AGENTS.md describ...
v0.1.0
Docs: https://motherload.dev
Packages
@motherload/core@0.1.0@motherload/csv@0.1.0@motherload/env@0.1.0@motherload/json5@0.1.0@motherload/jsonc@0.1.0@motherload/md@0.1.0@motherload/toml@0.1.0@motherload/txt@0.1.0@motherload/yaml@0.1.0motherload@0.1.0
Commits since v0.0.1
- 1e3fad2 Every package is at 0.1.0, the maintainer's instruction of 2026-10-21: "lets cut 0.1" (nub run bump 0.1.0). Ten packages now that JSON Schema left for dotschema: motherload, @motherload/core and the eight format packages. Verified at 0.1.0: nub run typecheck; nub run test, 53 of 53; nub run build and nub run check-dist.
- 71e3a5a The hero imports a JSONC file,
strings.jsonc, in place ofstrings.json5, by the maintainer's rule of 2026-10-21: "Be sure to always lead with JSONC. It's way more important than JSON5." The hero showed JSON5 and no JSONC at all; its file keeps its comment and trailing comma, with its keys and strings in double quotes. The share card (its third tab and import line, the same width), its alt text and /showcase follow. Verified: the card rendered by the dev server, the hero's import typed; nub run build in site/. - c1bb5fc Setup opens with the install, the JSON Schema section is a callout under JSONC and JSON5, JSONC comes before JSON5 everywhere, and the wordmark is bigger, the maintainer's requests of 2026-10-21. Setup starts with "Install Motherload and TypeScript 7.1:" and
npm install -D motherload typescript@betain place oftypescript@next("Pretty sure you need to install TypeScript@beta?": the beta tag is 7.1.0-beta, published 2026-10-20, and its darwin-arm64 tsc carries runExternalCode and contentMappers), a callout that content mappers are new in TypeScript 7.1 and that 7.1 is in beta, Node 24, then the agent prompt; the Install heading is gone, its anchor with it, and neither the install text nor the prompt's first step points at "Loaders à la carte" ("I don't think we need to be talking about loaders à la carte in the install section"). That section opens with the maintainer's words: "Themotherloadpackage provides one unified content mapper for all data formats. You can also consume them à la carte." The agent card loses its Copy instructions button and shows six lines of the prompt (docs-kit 0a12e56, synced). The.schema.jsoncheading is gone from the Loaders section and its sidebar ("I'm still seeing the JSON schema stuff in the sidebar. I think we should just remove it entirely ... It should be a callout underneath the JSONC and JSON5 section"): a callout under.json5points at dotschema, and the README does the same. JSONC leads JSON5 ("Be sure to always lead with JSONC. It's way more important than JSON5") in the Loaders sections, the opening sentence and the page's description, Setup's extension list, table and agent prompt, /formats, the README, the root package's description, lab/basic's tsconfig, AGENTS.md and PLAN.md; AGENTS.md's writing conventions carry the rule. The wordmark is 18px beside a 24px icon, from 16px and 22px. Verified under the dev server in Puppeteer's headless shell (the prompt box 160.6px tall over 580px, no Copy button, no #install or #schemajsonc, the callouts, the wordmark); nub run typecheck; nub run test, 53 of 53; nub run build in site/. - a1da052 The format packages' README links Setup's "Loaders à la carte" by its anchor,
#loaders-a-la-carte:scripts/build.tsstill wrote#one-format-at-a-time, the anchor before the section's rename in d21b5ac, so every format package would have shipped a dead link. Verified: the built docs page has the idloaders-a-la-carteand noone-format-at-a-time. - 232668f JSON Schema leaves Motherload for its own package, dotschema, the maintainer's decision of 2026-10-21: "I think it's cleaner to extract it personally. It's not really the same as the data loading that we do in the other stuff. Let's go ahead and do it", and "We could always add support into Motherload later and give Motherload a dependency on dotschema, but not right now." So
packages/schema/is gone, with its four test files (schema, schema-types, json-schema, verdicts), its fixtures (tests/fixtures/json-schema,tests/fixtures/declaration, the error fixture's schema files) and the root's@motherload/schemalink, ajv and ajv-formats;src/plugin.tscombines eight loaders, andmotherloadhas no.export, sincesrc/index.tsonly re-exported the schema types and no data module imports a type. A.schema.jsoncor.schema.json5file is now JSONC or JSON5 data unless another loader claims the longer suffix, and theSymbol.for("motherload.registered")andSymbol.for("motherload.plugin")keys stay as they were, for dotschema to join:tests/packages.test.tschecks the JSONC and JSON5 loaders yield both schema suffixes to a stand-in loader written with nothing from@motherload/core, in both orders under Node's hooks, Bun and esbuild, andtests/adapters.test.tschecks esbuild'swatchFileswith a stand-in too.lab/basicloses its schema files and their checks,lab/packagesis@motherload/tomland@motherload/jsoncalone, andscripts/check-dist.tsdrops the schema expectations and the project hoisted beside ajv 6. The docs page's hero,/formats,/showcaseand the link preview dropuser.schema.jsonc(six imports); the Loaders section's.schema.jsoncis one sentence pointing at dotschema on npm, beside.sql's pointer at Reylo, as in the README; Setup's extension lists, agent prompt and "Loaders à la carte" table drop the schema. DESIGN.md's five schema sections and the schema rows and notes of Packaging go to dotschema's DESIGN.md, replaced by "JSON Schema left for dotschema", which supersedes that morning's "Keep it inmotherload"; PLAN.md records the decision and drops the schema decisions and Open items, with one new Open item on the published@motherload/schema@0.0.1; AGENTS.md's layout follows. No version is bumped. Verified: nub run typecheck; nub run test, 53 of 53; nub run build then nub run check-dist (basic and packages); the site's nub run build, whose page shows six imports in the hero and renders the dotschema section. - 61c1c55 Motherload 0.0.1 is published, every package by release.yml: run 39560615518 staged all eleven with provenance through their stage-only trusted publishers, the maintainer approved them with stager, and the run created the GitHub release v0.0.1 at 6837089 once npm served every version. DESIGN.md's Releasing section records the run, the trusted publishers the fixed scripts/npm-first-publish.sh configured (each
npm trust githubanswered 201), and the approval that took two sittings: stager listedmotherloadapart from the other ten, because it read the repository from the package's latest version, the 0.0.0 of 2026-10-03, which names none, so the notification's Approve tookmotherload@0.0.1alone, and from 15:53 to 16:03 UTCnpm install motherload@0.0.1failed with ETARGET for @motherload/core@0.0.1. PLAN.md's step 7 has the first release, and AGENTS.md's release steps end on checking that nothing of the release is left staged. Verified:motherload@0.0.1installed from npm into a copy of lab/basic outside the repository type-checks, runs under the preload and bundles with esbuild; nub run typecheck; nub run test, 125 of 125. - b0dd8d1 Each format's examples carry one fact apiece, the maintainer's instruction of 2026-10-21: "For things like YAML, the first sentence of the section should not be talking about the several documents stuff. That should be a second example. Every example needs to be a very clean little chunk containing just new information ... It's just one piece of information at a time, always." On the docs page:
.tomlloads a plain file, then shows its dates (an offset date-time aDate, a local one its ISO text);.yamlloads a plain file, then a file of several documents;.jsonc,.json5,.txtand.tsvlead into their one example;.csvdrops its paragraph of quoting, blank-line and row-count rules;.mdloads a post, then imports its frontmatter alone;.envsets and types its variables, then the editor's completion, then a misspelled name as an error, each its own block. A bigint,inf, CSV quoting and a file without frontmatter stay in DESIGN.md. The README does the same for.yaml,.envand.md, and AGENTS.md's writing rule now asks for one fact to each example. Verified under the dev server in Puppeteer's headless shell (every hover, the completion and the error); nub run typecheck; nub run test, 125 of 125. - 1b84682 The README's logo loads from GitHub, and its tagline is the site's, the maintainer's report of 2026-10-21: "Logo is not loading above the H1 on the README. It's also weird that the little tagline underneath the H1 is not the same as the one that we use on the website." GitHub shows a README's image from another host through its proxy, camo, which timed out on motherload.dev/motherload.svg (a 504 after 4 seconds on one try in two, while the file answers at once from here), so the logo is now site/public/motherload.svg from raw.githubusercontent.com, which GitHub shows directly (its markdown API leaves that src as written) and serves as image/svg+xml. The tagline is "Import data files into TypeScript, fully typed", the site's title and share card's, in place of "Import a data file and get a ty...
v0.0.1
Docs: https://motherload.dev
Packages
@motherload/core@0.0.1@motherload/csv@0.0.1@motherload/env@0.0.1@motherload/json5@0.0.1@motherload/jsonc@0.0.1@motherload/md@0.0.1@motherload/schema@0.0.1@motherload/toml@0.0.1@motherload/txt@0.0.1@motherload/yaml@0.0.1motherload@0.0.1
The first release of Motherload.