Skip to main content

Footprints

Scope

This page carries the sizes. Every number states how it was obtained, because the three sources disagree in ways that matter: a registry figure is the unpacked tarball, a disk figure is what an install occupies on disk, and a modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.'-card figure is what the trainingtrainingThe process of adjusting a model's parameters so its predictions match labeled examples, by repeatedly measuring error and nudging the weights to reduce it. Distinct from inference, when the trained model is run on new input. pipelinestaged pipelineMailwoman's runtime architecture: a sequence of pure-function stages (normalize → query-shape → locale-gate → kind-classifier → phrase-grouper → classifier → decoder) connected by typed handoffs. Each stage is published as its own npm package. recorded. A number without its basis is not checkable.

Measured on 2026-08-03 against release 8.6.0, the release npm serves. The commands that produced each table are given, so you can re-run them rather than trust this page.

Runtime memory and build-time disk are not re-measured here. They were measured by the tutorials that run those workloads, and this page links them.

Installing

The number that surprises people first: a full install of the entry package is 707 MB, and 523 MB of that is the ONNX runtimeONNX (Open Neural Network Exchange). An open format for machine learning models that enables interoperability between training frameworks and inference runtimes. Mailwoman ships its trained model as an ONNX file so it can run in Node.js and the browser via onnxruntime.. A different host gets different numbers for the same install — Deployment options measures 746/500/303 on a serverless host and reconciles the gap against these two figures.

npm init -y && npm install --omit=dev mailwoman @mailwoman/neural-weights-en-us
du -sb node_modules
WhatOn diskBasis
mailwoman plus the en-us weightsparameterA single learned number inside a model — one weight or bias. Mailwoman's encoder has roughly 30 million of them; training is the search for good values., every dependency707 MBdu -sb on a clean install
@mailwoman/neural plus the same weightsparameterA single learned number inside a model — one weight or bias. Mailwoman's encoder has roughly 30 million of them; training is the search for good values.626 MBdu -sb on a clean install
Everything under @mailwoman/95 MBdu -sb on a clean install
onnxruntime-node523 MBdu -sb on a clean install

onnxruntime-node publishes prebuilt binaries for three platforms in one tarball: 311 MB of Linux, 134 MB of Windows, 78 MB of macOS. Two of the three are dead weightparameterA single learned number inside a model — one weight or bias. Mailwoman's encoder has roughly 30 million of them; training is the search for good values. on any given machine. In a container image, deleting the platform directories you do not run reclaims most of that — the paths are under node_modules/onnxruntime-node/bin/napi-v6/. See Deploy with Docker.

This shape changes at the next release, and only for one of the two rows above. At 8.6.0 both ONNX runtimesONNX (Open Neural Network Exchange). An open format for machine learning models that enables interoperability between training frameworks and inference runtimes. Mailwoman ships its trained model as an ONNX file so it can run in Node.js and the browser via onnxruntime. are ordinary dependencies of @mailwoman/neural, which is why installing it drags 523 MB behind it. On the unreleased line they become optional peer dependencies, so a @mailwoman/neural-only install stops pulling a runtime at all and you choose one — onnxruntime-node on a server, onnxruntime-web in a browser build. The mailwoman row does not move: the CLI is an application and declares onnxruntime-node outright. Re-measure after the release rather than subtracting from these figures.

Nothing else is close. The next largest dependency after the ONNX runtimeONNX (Open Neural Network Exchange). An open format for machine learning models that enables interoperability between training frameworks and inference runtimes. Mailwoman ships its trained model as an ONNX file so it can run in Node.js and the browser via onnxruntime. is 7.7 MB.

Published packages

Unpacked tarball sizes from the registry. Reproduce any row with npm view <package> dist.unpackedSize.

PackageUnpackedFiles
@mailwoman/neural-weights-en-us73.8 MB16
@mailwoman/neural-weights-fr-fr23.3 MB
@mailwoman/neural-weights-en-gb12.4 MB
@mailwoman/core8.55 MB1778
@mailwoman/neural-weights-en-nz7.79 MB
mailwoman4.99 MB1136
@mailwoman/neural-weights-de-de2.17 MB
@mailwoman/registry1.59 MB
@mailwoman/neural1.25 MB
@mailwoman/resolver-wof-sqlite1.23 MB
@mailwoman/codex1.07 MB
@mailwoman/spatial381 kB
@mailwoman/resolver320 kB
@mailwoman/nominatim172 kB
@mailwoman/match171 kB
@mailwoman/neural-web (deprecated)144 kB
@mailwoman/photon144 kB
@mailwoman/mcp115 kB
@mailwoman/api111 kB
@mailwoman/neural-weights-it-it110 kB
@mailwoman/neural-weights-es-es107 kB
@mailwoman/resolver-wof-wasm93 kB
@mailwoman/libpostal77 kB
@mailwoman/record72 kB
@mailwoman/formatter63 kB
@mailwoman/annotations39 kB
@mailwoman/timezone-lookup30 kB
@mailwoman/address-id23 kB
@mailwoman/neural-weights-en-in8.9 kB

@mailwoman/core carries 1778 files because it ships reference data: libpostallibpostalAn open-source C address parser used by Pelias. Mailwoman's rule-based v0 and neural classifier supersede it. dictionaries, Who's On First metadata, and Unicode localelocaleThe combination of language and country an address comes from. en-US and fr-FR are the locales Mailwoman ships weights for. tables. mailwoman carries 1136 for the same reason plus the compiled command tree.

Model artifacts

The en-us weightsparameterA single learned number inside a model — one weight or bias. Mailwoman's encoder has roughly 30 million of them; training is the search for good values. package is the modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.'. Sizes measured with stat on the files the package's manifest lists.

FileBytesSizeWhat it is
model.onnx39,419,62939.4 MBThe int8-quantized encoderencoderThe part of a transformer that turns input tokens into contextualized vector representations. Mailwoman's classifier is a small encoder-only transformer (~30M parameters)., opset 17
fst-en-us.bin21,757,16021.8 MBThe gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. prior index
locality-surface-lexicon-v6.json7,346,0047.35 MBLocalitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighborhood in the hierarchy. surface forms
postcode-us.bin1,904,3221.90 MBThe US postcode anchoranchor inferenceA technique where structured knowledge (postcode locations, gazetteer place names) is injected into the model as soft input features — not as deterministic overrides. The model still decides the final labels, but the anchor signal biases it toward correct admin tags. table
tokenizer.model1,632,2891.63 MBThe SentencePieceSentencePieceA language-independent subword tokenizer that splits text into pieces using a unigram language model. Mailwoman uses a SentencePiece tokenizer with a 48,000-token vocabulary and byte-fallback, trained on address data rather than general text. modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.'
pair-index-us.bin1,293,0311.29 MBThe localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighborhood in the hierarchy. and regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. pair index
fst-street-morphology.bin327,516328 kBThe streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.-morphology matcher
anchor-lexicon-v1.json11,23811.2 kBAnchor surface forms
street-type-lexicon-v3.json9,8829.88 kBStreetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.-type surface forms
calibration-per-locale.json9,0749.07 kBPer-countrycountryThe top-level address component (an ISO country). Closed-vocabulary, so it is best handled by a deterministic matcher feeding a proposal rather than a retrained model head. confidence calibrationconfidence calibrationThe process of adjusting model confidence scores so that '0.6' actually means the model is right about 60% of the time. Mailwoman uses isotonic regression (PAVA) to calibrate per-span confidences against held-out data. Applied opt-in via createCalibrator.
calibration.json8,7228.72 kBThe confidence calibrationconfidence calibrationThe process of adjusting model confidence scores so that '0.6' actually means the model is right about 60% of the time. Mailwoman uses isotonic regression (PAVA) to calibrate per-span confidences against held-out data. Applied opt-in via createCalibrator. table
country-surface-lexicon-v1.json7,0237.02 kBCountrycountryThe top-level address component (an ISO country). Closed-vocabulary, so it is best handled by a deterministic matcher feeding a proposal rather than a retrained model head. surface forms

Those twelve files total 73,725,890 bytes against a 73,796,933-byte published tarball across 16 files. The remaining 71 kB is the model cardmodel cardA JSON metadata file (model-card.json) shipped with each weights bundle. It declares the model version, lineage, label set, required inference channels (anchor, gazetteer), calibration data, and training provenance., the README, the manifest, and the development-linking script the package's file globs pick up. Those four measure 73,842 bytes in the working tree, so the published copies differ slightly from headattention headOne of several parallel attention computations in a layer, each free to focus on a different kind of relationship between tokens. Their outputs are concatenated — 'multi-head attention'. Mailwoman uses 4 heads. — the release the registry serves is a version behind this repository.

The model cardmodel cardA JSON metadata file (model-card.json) shipped with each weights bundle. It declares the model version, lineage, label set, required inference channels (anchor, gazetteer), calibration data, and training provenance. reports the encoderencoderThe part of a transformer that turns input tokens into contextualized vector representations. Mailwoman's classifier is a small encoder-only transformer (~30M parameters). as 37.6 MB and the unquantized original as 146.6 MB. That first figure is the same file as model.onnx above, counted in mebibytes: 39,419,629 bytes is 37.6 MiB and 39.4 MB. Quantization to int8 is what took it from 146.6 to 37.6 in those unitsunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise., a factor of 3.9.

Structure, from the model cardmodel cardA JSON metadata file (model-card.json) shipped with each weights bundle. It declares the model version, lineage, label set, required inference channels (anchor, gazetteer), calibration data, and training provenance.:

PropertyValue
EncoderencoderThe part of a transformer that turns input tokens into contextualized vector representations. Mailwoman's classifier is a small encoder-only transformer (~30M parameters).6 layerslayerOne transformer block — attention plus a feed-forward network, with normalization and residual connections — applied to every position. Stacking layers lets the model build up richer representations; Mailwoman's encoder has 6., 384 hidden, 6 attention headsattention headOne of several parallel attention computations in a layer, each free to focus on a different kind of relationship between tokens. Their outputs are concatenated — 'multi-head attention'. Mailwoman uses 4 heads.
Maximum sequence length128 tokenstokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words.
TokenizertokenizerThe component that converts a raw address string into a sequence of numeric token IDs the model can process. Mailwoman's tokenizer is a SentencePiece unigram model trained specifically on postal addresses. vocabularyvocabularyThe fixed set of tokens a tokenizer can produce. Mailwoman's SentencePiece vocabulary is tens of thousands of subword pieces, with byte fallback for anything outside it.73,143 SentencePieceSentencePieceA language-independent subword tokenizer that splits text into pieces using a unigram language model. Mailwoman uses a SentencePiece tokenizer with a 48,000-token vocabulary and byte-fallback, trained on address data rather than general text. piecesECE (Expected Calibration Error). A metric that measures how well a model's confidence scores align with its actual accuracy. Lower is better. Mailwoman's held-out ECE drops from 0.067 (raw) to 0.0035 (calibrated).
Output labelscomponent tagOne of the 25 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag.33 BIO labelsBIO tagging (Begin-Inside-Outside). A token-level labeling scheme where each token is tagged as B-X (beginning of an entity of type X), I-X (inside an entity of type X), or O (outside any entity). Mailwoman uses BIO over SentencePiece tokens to annotate address components. over 16 component tagscomponent tagOne of the 25 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag.
Trainable parametersparameterA single learned number inside a model — one weight or bias. Mailwoman's encoder has roughly 30 million of them; training is the search for good values.About 29 million
Quantizationint8 dynamic, from fp32fp32 / fp1632-bit and 16-bit floating-point formats. Mailwoman trains in bf16 (a 16-bit variant) and exports the ONNX model in int8 for size.

Data bundles

Downloaded with mailwoman data pull, never through npm. Sizes are the registered artifact totals in mailwoman/data-bundles.ts, surveyed against the bucket on 2026-08-03. mailwoman data pull <bundle> --dry-run prints the same figures without touching the network.

Bundleevidence bundleThe pair of retrieval-augmented input channels (street-type + locality-surface) that feed lexicon membership as soft per-token evidence alongside the text. Shipped in 6.7.0; trained natively from step 0 in the from-scratch base line.ArtifactsSizeWhat it covers
candidate11.65 GBThe global candidate gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture., 244 countries
poi13.89 GB13.68 million points across US, CA, MX, FR
fr16.95 GBFrench rooftoprooftopGeocoding precision at the building or parcel level — coordinates within a few meters — the highest tier of the geocode cascade. Sourced from address-point and situs data. address pointssitus dataA dataset of exact address-point coordinates (rooftop-level). Mailwoman's geocoder uses a national situs layer (124.9M US points built from state address-point sources) as the highest-precision tier of the geocode cascade.
us10341.3 GBUS rooftoprooftopGeocoding precision at the building or parcel level — coordinates within a few meters — the highest tier of the geocode cascade. Sourced from address-point and situs data. and interpolationinterpolationA geocoding technique that estimates a coordinate along a street segment based on the house number range. Used as the middle tier of Mailwoman's geocode cascade when exact address-point data is unavailable., per state

The us bundleevidence bundleThe pair of retrieval-augmented input channels (street-type + locality-surface) that feed lexicon membership as soft per-token evidence alongside the text. Shipped in 6.7.0; trained natively from step 0 in the from-scratch base line. is 52 rooftoprooftopGeocoding precision at the building or parcel level — coordinates within a few meters — the highest tier of the geocode cascade. Sourced from address-point and situs data. shardsshardA partial output file of the corpus build, written in Parquet format. The training pipeline streams shards row by row. and 51 interpolationinterpolationA geocoding technique that estimates a coordinate along a street segment based on the house number range. Used as the middle tier of Mailwoman's geocode cascade when exact address-point data is unavailable. shardsshardA partial output file of the corpus build, written in Parquet format. The training pipeline streams shards row by row., one pair per state plus DC and the US Virgin Islands, which has no interpolationinterpolationA geocoding technique that estimates a coordinate along a street segment based on the house number range. Used as the middle tier of Mailwoman's geocode cascade when exact address-point data is unavailable. shardshardA partial output file of the corpus build, written in Parquet format. The training pipeline streams shards row by row.. Pull one state with mailwoman data pull us --only nh rather than the whole tier.

Four state pairs account for 31.9% of that total: California at 4.25 GB, Florida at 3.74 GB, Texas at 3.29 GB, and North Carolina at 1.89 GB.

Runtime and build envelopes

These were measured by the tutorials that run the workloads, and are not re-measured here.

WorkloadEnvelopeMeasured in
GeocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available. a CSV against candidate.db2 GB of free disk for the download pathGeocode a CSV
Building one US state, Vermont8.94 GB of disk, 8 GB of free RAMBuild the US dataset
The same build, peak resident memory7.45 GiB, by /usr/bin/time -vBuild the US dataset
A whole-planet gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. buildTens of gigabytes, hours of wall clockFull planet build
Parsingaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. in a browserThe modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.' over the network, then WebGPUParse in the browser

Parseaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. latency is not a footprint and is not on this page. It is measured per host and reported by mailwoman parse --benchmark <n>, which prints per-stagestageOne of the dataflow stages in the runtime pipeline (normalize, locale gate, kind classify, phrase group, token classify, sequence correct, reconcile, resolve). Distinct from tier (model vocabulary) and phase (plan milestone). percentiles and a heap delta.

Errors

ConditionMeaningNext step
An install is far larger than 707 MBDevelopment dependencies were includedInstall with --omit=dev
A container image is over a gigabyteThe ONNX runtimeONNX (Open Neural Network Exchange). An open format for machine learning models that enables interoperability between training frameworks and inference runtimes. Mailwoman ships its trained model as an ONNX file so it can run in Node.js and the browser via onnxruntime. ships three platformsDelete the platform directories you do not run
npm view reports a size this page does not listThis page documents 8.6.0; npm serves the latestnpm view mailwoman version. Trust npm over this page
A pulled bundleevidence bundleThe pair of retrieval-augmented input channels (street-type + locality-surface) that feed lexicon membership as soft per-token evidence alongside the text. Shipped in 6.7.0; trained natively from step 0 in the from-scratch base line. is smaller than the table saysThe download did not finish, or an artifact is supersededmailwoman data status, then re-pull

Rationale

The gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. stays outside npm because it is 1.65 GB, and a registry tarball that size would be paid for by every consumer who wanted only the parser. Splitting it into a download makes parsingaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. a 74 MB proposition and geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available. an explicit second decision.

The modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.' ships quantized because the accuracy cost was small and the size cost was not: int8 took the encoderencoderThe part of a transformer that turns input tokens into contextualized vector representations. Mailwoman's classifier is a small encoder-only transformer (~30M parameters). from 146.6 MB to 37.6 MB in the card's unitsunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise., which is the difference between a package a serverless function can cold-start and one it cannot.

The ONNX runtimeONNX (Open Neural Network Exchange). An open format for machine learning models that enables interoperability between training frameworks and inference runtimes. Mailwoman ships its trained model as an ONNX file so it can run in Node.js and the browser via onnxruntime.'s 523 MB is not this project's choice and cannot be fixed from here. It is stated prominently because it dominates every other number on this page, and a reader sizing a container who budgets from the package sizes alone will be wrong by a factor of seven.

See also

  • Packages — what each package on this page is for.
  • Locales and tiers — which bundlesevidence bundleThe pair of retrieval-augmented input channels (street-type + locality-surface) that feed lexicon membership as soft per-token evidence alongside the text. Shipped in 6.7.0; trained natively from step 0 in the from-scratch base line. a localelocaleThe combination of language and country an address comes from. en-US and fr-FR are the locales Mailwoman ships weights for. needs.
  • What ships today — the release these numbers describe.
  • Deploy with Docker — trimming the image.
  • Deploy serverless — where the cold-start size binds.