Skip to content

Footprint

Installing Ferriki adds a small JavaScript package and one native addon for your platform. Grammars and themes arrive when your code first loads them.

What installing Ferriki adds to a project, in bytes as measured.
PartSize
@ferriki/core, packedThe npm tarball: the JavaScript API, type declarations, macro markers and the language and theme catalogs, 22 files.70,815 bytes (70.8 kB)
@ferriki/core, installedThe same files, unpacked in node_modules.298,033 bytes (298.0 kB)
Native addon, linux-x64-gnuferriki.node as pnpm run build:native builds it for @ferriki/linux-x64-gnu, the only platform package npm installs on that system.2,775,072 bytes (2.78 MB)
Grammars and themesDownloaded when first loaded, verified by SHA-256 and cached. None is bundled.On demand
Measured
2026-10-04
Machine
linux-x64-gnu, Cargo release profile, rustc 1.97.0 (2d8144b78 2026-07-07)
Revision
38747b66

What npm installs

@ferriki/core holds the JavaScript API, its type declarations, the macro markers and the catalogs that name every language and theme. It contains no native code. The addon comes from one platform package, @ferriki/<platform>, which npm installs as an optional dependency, so a machine downloads only the addon for its own platform. Seven targets are published: Linux x64 and arm64 (glibc and musl), macOS on Apple Silicon, and Windows x64 and arm64.

The publish workflow lists the unpacked addon size of every target in the run summary of each release.

Grammars and themes on demand

Neither the npm package nor the Rust crate bundles grammar or theme payloads. The first time a language or theme is loaded, the Node.js package, or the Rust crate with its remote feature, downloads the payload from assets.ferriki.dev. A release-pinned manifest selects immutable language and theme objects by short hash; Ferriki checks each object against the manifest’s SHA-256 digest and size, then caches it. In Node.js the cache is node_modules/.cache/ferriki. A payload that fails the check is not cached. FERRIKI_ASSETS_BASE_URL points at a mirror, and FERRIKI_ASSETS_REMOTE=0 loads from a populated cache only.

The native addon carries no HTTP or TLS stack: in Node.js, downloads use Node's own fetch. The Rust crate includes an HTTP client only with its opt-in remote feature.

No JavaScript toolchain inside

Neither the ferriki crate nor the addon depends on a JavaScript parser. The Rust lockfile names no crate of the OXC, SWC or Boa toolchains, which this site's footprint check verifies, and the repository's boundary check rejects OXC in the dependency tree of either. @ferriki/vite recognizes the build-time macros with the parser Vite already ships.

No WebAssembly module ships either. Regular expressions run in Ferroni, Oniguruma continued in Rust, compiled into the addon and the crate.