Axonpack ends the guesswork when things break.
Answers you and your agent can both read. Every request, error, log and stored value, captured on the device and copied out as structured JSON.
Live at axonpack.github.io. Docs at axonpack.github.io/docs.
| Library | Version | What it does |
|---|---|---|
@axonpack/expo-devtools |
Browser-style devtools that run inside your app, on the device | |
@axonpack/react-pretty-print |
Collapsible JSON and XML trees, plus a syntax highlighter |
npx expo install @axonpack/expo-devtoolsEverything is MIT licensed. There are no tiers and nothing is paid.
- Small and focused. One package solves one problem. Nothing here grows into a framework that wants to own your app's structure.
- Dependency-light. Adding a package should not add a supply chain. Where a package needs a library you may already have, you hand yours over instead of having a second copy installed.
- Independently published. Each one versions and ships on its own, with its own docs. Installing one never drags in another.
- Honest about limits. Every guide ends with what the thing cannot do, and why. A number that cannot be measured is left out rather than invented.
Neither this site nor the docs carries a roadmap. A library shows up on the day it goes to npm and
not before. Work that has not shipped stays in the monorepo's notes/plan.md.
Naming a library on a public page is a promise, and there is nothing behind it until you can install it.
GitHub serves an organisation's root site only from a repository named exactly
<org>.github.io. That is this repo's whole job.
The docs are a separate project site, built from axonpack/docs
and served at /docs. The two coexist because GitHub routes /<repo> to the matching project site.
Do not add a docs/ directory here. It would shadow the path the docs are served on.
bun install
bun run dev # fetches the catalogue from npm, then starts Astro
bun run build # writes dist/
bun run typecheck # astro checkAstro with output: "static" and Tailwind v4. There is no adapter and no SSR, because GitHub Pages cannot run a server. The pages ship no external
JavaScript: the header menus, theme toggle and copy button are small inline scripts.
scripts/fetch-packages.mjs runs before every build and asks npm what exists. Publish a package
and the next build puts it in the nav, the library grid, the footer and the stats. Unpublish one and
it disappears. Nothing to edit.
It reads two npm sources, because neither is enough on its own:
- the search endpoint carries descriptions and keywords, but its index lags a fresh publish
- the org listing is immediate, but lists packages outside the scope, so it gets filtered
Docs links are derived too. @axonpack/x becomes /docs/x/, so a new library needs no routing
entry anywhere.
Release notes work the same way. Each library's CHANGELOG.md is read from its published npm
tarball, parsed into entries, and dated from npm's publish times. Those become the blog. A changeset
that ships turns into a blog entry with nothing to copy across.
GitHub is not used for any of this. Every source is a public npm endpoint, so the build needs no credentials.
Prose lives in src/content.json. Change it there, not in the markup. Anything about the libraries
themselves comes from npm and is not editable here.
Blog posts are markdown files in src/content/blog/. Releases are generated, so you never write
those.
.github/workflows/deploy.yml builds and publishes on push to main, and again on a daily cron so
versions and download counts stay current without a commit.
This needs Settings → Pages → Source: GitHub Actions. On the older "Deploy from a branch" setting the workflow runs but publishes nothing.
src/
components/ one component per file
ui/ atomic primitives
layouts/
lib/
constants/ tokens and path data
services/ shape the generated and static data
utils/ pure helpers
pages/ routes
content.json all the prose
generated/ written by the fetch script, never committed
scripts/
fetch-packages.mjs asks npm what exists
legacy/ the previous no-build page, kept until Pages is switched over
File names are kebab-case with a role suffix, matching the monorepo's CONVENTIONS.md.
This page is about the project, not about any one library. What a tab does, how to call an API, what an option means: that goes in the library's own docs. What belongs here is what is true of Axonpack as a whole.
The palette matches the docs site on purpose, so the two do not read as different products.