Skip to content

arshad-shah/Kit

kit

Foundation packages for side projects, each independently versioned and publishable to npm.

CI Docs

Packages

Package Description Size (gzipped)
@arshad-shah/store-kit Typed Zustand factory with persistence and migrations ~1.4 KB
@arshad-shah/fetch-kit Typed fetch client with retries, schema validation, React hooks ~2.5 KB core, ~0.8 KB hooks
@arshad-shah/log-kit Structured logger with pluggable transports and perf markers ~1.4 KB core
@arshad-shah/config-kit Typed env loading from .env, process.env, and remote sources ~1.4 KB

Each package can be used on its own. They compose cleanly when combined - fetch-kit can take a log-kit Logger for telemetry, config-kit can take one for source-load diagnostics, but neither has a hard dependency.

Read the docs →

Why this exists

Every side project hits the same plumbing in the first week: state that survives a refresh, HTTP calls that are cancellable and typed, structured logging that ships somewhere, and config validated at boot. These four packages do exactly that, with strict TypeScript, enforced bundle budgets, and 95%+ test coverage.

Repository layout

.
├── packages/
│   ├── internal-config/     # Shared TS, build, test, lint config (private)
│   ├── store-kit/
│   ├── fetch-kit/
│   ├── log-kit/
│   └── config-kit/
├── apps/
│   └── docs/                # Astro Starlight docs site
├── .changeset/              # Release notes
└── .github/workflows/       # CI, release, docs deploy, mutation testing

Development

pnpm install             # one-time setup
pnpm test                # run all tests across packages
pnpm test:coverage       # with coverage thresholds enforced
pnpm build               # build every package
pnpm lint                # Biome check
pnpm typecheck           # tsc --noEmit across packages
pnpm size                # enforce bundle size budgets
pnpm docs:dev            # run the docs site locally

Contributing

The packages are shaped to stay small and focused. New features need a clear use case from real projects, not "this would be cool". Bundle budgets are not negotiable - if a feature genuinely needs bytes, the budget moves up in the same PR with a one-line justification.

Add a changeset with every PR that affects a published package:

pnpm changeset

Project policies

License

MIT © Arshad Shah

About

No description, website, or topics provided.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors