Package structure

Package structure

npm install @muze-nl/metro
import metro from '@muze-nl/metro'

const client = metro.client('/api/')
  .with(metro.mw.timeout(5000), metro.mw.retry(), metro.mw.json())

@muze-nl/metro is the beginner-friendly package. It re-exports the core, middleware, API helpers, tracing, hash parameter helpers, and formdata helper, and its browser bundle sets globalThis.metro.

Use smaller packages when you know the boundary you want:

npm install @muze-nl/metro-core @muze-nl/metro-middleware
import { client } from '@muze-nl/metro-core'
import { json, retry } from '@muze-nl/metro-middleware'

const api = client('https://jsonplaceholder.typicode.com/')
  .with(retry({ attempts: 3 }), json())
PackageMain exportsDocumentation
@muze-nl/metrodefault metro, core exports, mw, trace, hashParams, formdata, api, jsonApicombined package
@muze-nl/metro-coreclient, Client, request, response, url, metroError, deepClonecore
@muze-nl/metro-apiAPI, JsonAPI, api, jsonApiAPI helpers
@muze-nl/metro-middlewarejson, thrower, getdata, retry, timeout, abort, backoff, echoMock, errorMockmiddleware
@muze-nl/metro-traceadd, delete, clear, group, graph, localConsole, GraphTracertrace
@muze-nl/metro-hashparamsparse, append, clearhash params
@muze-nl/metro-formdataformdataformdata
@muze-nl/metro-oauth2oauth2mw, OAuth helpers, dpopmw, stores, popup helpersOAuth2
@muze-nl/metro-oidcoidcmw, discover, register, idToken, idTokenClaimsOIDC
@muze-nl/metro-oldmdefault oldmmwOLDM

Rule of thumb

Start with @muze-nl/metro. Move to package-specific imports when you have a reason: smaller browser bundles, isolated tests, clearer package ownership, or code that should not depend on beginner convenience exports.