npm and native distribution
The primary installation is npm install -g @apixly/jev-filter. Python users keep
the release wheel/library interface. Both call the same semantic core.
Design
A small Node launcher chooses a platform package through optionalDependencies.
The platform package contains an executable plus its private interpreter/libraries,
code parsers and a pinned ripgrep binary. No user Python environment is modified;
there are no postinstall scripts. This follows the distribution pattern used by
Codex
and esbuild,
with platform packages on npm and mirrored tarballs on GitHub Releases.
The launcher preserves argument boundaries, streams and exit status. It does not pass user input through an implicit shell. Linux bundles require glibc; Alpine/musl is not currently supported by the bundled Python runtime. macOS Intel/Apple Silicon and Linux x64/ARM64 are built and smoke-tested separately. Windows uses WSL.
What is verified
- Install actual npm tarballs with lifecycle scripts disabled.
- Remove system Python and ripgrep from PATH.
- Run
doctorand a real code-search fixture using the bundled runtime/parser/rg. - Run source tests independently on Python 3.10–3.14 and macOS.
- Verify ripgrep assets against checked-in upstream SHA-256 digests before packaging.
- Ship package licenses, Python license and bundled dependency notices.
Native distribution improves installation, not semantic quality. Startup, disk size and install downloads are extra costs; no speedup is inferred from bundling.
Release order
- Merge the version PR after required source/security/native checks.
- Create
v<version>on that reviewed commit. Protected tags cannot be rewritten. - GitHub Actions rebuilds all four platform tarballs, wheel/sdist and the main npm package, checks them, then publishes checksums and provenance with the release.
- Successful
Releaseruns automatically triggerpublish-npm.ymlon protectedmain. Manual dispatch with an existing stablevMAJOR.MINOR.PATCHtag supports recovery. - The publisher validates exactly five package identities/versions, every SHA-256 and every GitHub attestation against the release tag, commit and signing workflow.
- Publish four native packages before the main package through npm OIDC. Existing versions are skipped only when registry SHA-512 integrity matches the release bytes. Collisions, lookup failures and uncertain uploads stop; no blind upload retries occur.
- Install from the registry into a new directory, then verify
doctorand dashboard export.
One-time npm trust setup
GitHub is configured to use the existing npm environment (protected branches only),
Node 24 and pinned npm 11.20.0. There is no long-lived npm secret or enablement variable.
The workflow runs automatically but publication cannot succeed until npm trusts it.
npm requires each package to already exist before its Trusted Publisher can be configured. Bootstrap the four platform packages and main package once using the release tarballs and an authenticated maintainer session. The account must have 2FA enabled to configure trust; a bypass-2FA granular token does not authorize trust/account-governance changes.
For each of the five packages, configure npm Settings → Trusted Publisher:
| Field | Value |
|---|---|
| Provider | GitHub Actions |
| Organization/user | apixly-ai |
| Repository | jev-filter |
| Workflow filename | publish-npm.yml |
| Environment | npm |
| Allowed action | Direct publishing (npm publish), not stage-only |
The package names are @apixly/jev-filter and the four suffixes -darwin-arm64,
-darwin-x64, -linux-arm64, -linux-x64. With npm 11.15+ the equivalent command is:
npm trust github PACKAGE --repo apixly-ai/jev-filter \
--file publish-npm.yml --environment npm --allow-publish --yes
Complete the interactive account verification when requested. Once trust is established, future CI publication uses short-lived OIDC credentials without a human 2FA prompt. Do not select stage-only permission if unattended direct publication is intended.
To publish/resume the existing release after setup:
gh workflow run publish-npm.yml --ref main -f tag=v0.2.0
A green GitHub Release is not proof of npm publication; check the separate Publish npm run and registry installation result. Missing npm trust remains a failed publish with a setup explanation in the job summary. npm trust prerequisites · Trusted publishing.
Each platform package includes BUILDINFO.json with runtime versions and file hashes; installer-origin paths are removed and package contents checked before publication.