nano-fw (nano-sized framework) is a minimal, schema-driven TypeScript micro-framework powered by Hono, Zod, Knex, and OpenAPI.
It's small, pragmatic, ESM-first and TypeScript-first.
It provides type-safe request and response validation, automatic OpenAPI generation with Scalar docs, and transparent transactional repositories via AsyncLocalStorage.
Dependencies:
fnm(eg:brew install fnm)- add
eval "$(fnm env --use-on-cd)"into your~/.zprofileor~/.profile
Setup:
fnm install
npm install -g corepack
corepack enable
corepack install
pnpm installLinting:
pnpm lint # lint
pnpm tsc # typecheckTesting:
docker run -d --name nano-fw -p 5432:5432 -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password -e POSTGRES_DB=nano-fw postgres:18-alpine
pnpm testInstall:
pnpm i nano-fwAdd the suggested scripts to your package.json:
{
"scripts": {
"test": "vitest run --reporter=default --reporter=junit --outputFile=/tmp/junit.xml --coverage",
"start:dev": "NODE_ENV=development NODE_OPTIONS='--no-warnings --enable-source-maps --import=amaro/transform' node --env-file-if-exists=../../.env --watch ./src/index.ts",
"start": "NODE_ENV=production NODE_OPTIONS='--no-warnings --enable-source-maps --import=amaro/transform' node ./src/index.ts",
"db:migrate": "NODE_ENV=development NODE_OPTIONS='--no-warnings --enable-source-maps --import=amaro/transform' knex migrate:latest --knexfile=./database/db.ts",
"db:seed": "NODE_ENV=development NODE_OPTIONS='--no-warnings --enable-source-maps --import=amaro/transform' knex seed:run --knexfile=./database/db.ts",
"db:migrate:make": "NODE_ENV=development NODE_OPTIONS='--no-warnings --enable-source-maps --import=amaro/transform' knex migrate:make --knexfile=./database/db.ts",
"db:seed:make": "NODE_ENV=development NODE_OPTIONS='--no-warnings --enable-source-maps --import=amaro/transform' knex seed:make --knexfile=./database/db.ts"
}
}Now check the example directory for a complete working setup.