Hono JSX + Bun + SQLite (Server-Rendered Internal Tools)
Rules for internal tools rendered on the server with Hono JSX on Bun: forms over fetch, htmx where needed, an OAuth allow-list, Drizzle over SQLite or a read replica, and cron in the same process.
- Formats
- 4 files
- AGENTS.md
- 43 lines
- CLAUDE.md
- 13 lines
- Languages
- TypeScript
- Updated
- Oct 2026
- Used by
- 4 projects
Writes .claude/skills/hono-jsx-internal-tools/SKILL.md
$ curl -s --create-dirs -o .claude/skills/hono-jsx-internal-tools/SKILL.md https://stackitfast.com/rules/hono-jsx-internal-tools/SKILL.mdRule files
Works with Cursor · Claude Code · Windsurf · AGY
Architecture notes
Architecture Overview
Guidelines for internal tools built as server-rendered HTML with Hono JSX on Bun: forms instead of fetch calls, htmx where a reload hurts, Drizzle over SQLite for the tool’s own data, and scheduled jobs in the same process.
Key Advantages
- One file per screen: the GET renders, the POST validates and redirects, so an agent can add a screen and a table in one change.
- Nothing on the client: no bundler, no state library, no API layer between the form and the database.
- Safe by default: an OAuth allow-list, CSRF on mutations and an audit log are part of the template, not an afterthought.
Frequently asked questions
Why server-rendered HTML instead of React for an internal tool?
Internal tools are mostly tables and forms. Rendering them on the server removes the client build, the API layer between screen and database, and all client state, which is most of what an agent gets wrong in a CRUD app. htmx covers the few interactions that need partial updates.
How is this different from the Bun + Hono + SQLite API rules?
Those rules are for a JSON API consumed by other apps. This one is for a tool people use in a browser: Hono renders the HTML itself, forms replace fetch calls, and authentication is an allow-list rather than tokens for clients.
Does this AGENTS.md work with Cursor, Claude Code and Windsurf?
Yes. AGENTS.md is the cross-tool standard read by Cursor, Claude Code, Windsurf, Codex and others. A .mdc file is included for Cursor's native rules format.
Used in production
Explore all stacksGotify
6Gotify keeps the server one deployable Go binary by embedding its Vite/React web UI, using Gin and gorilla/websocket for the REST and streaming API, and swapping SQLite, MySQL or PostgreSQL through GORM, while a compiled Go plugin system handles extensibility instead of a scripting layer.
elekcsv
5Keeping parsing, compiled-validator generation, fuzzy column mapping and bitmap error tracking in one dependency-free core package lets every UI framework reuse identical import logic instead of six separate implementations.
Orca
1Agent CLIs stay the user's own. Orca adds the orchestration layer around them: isolated git worktrees, a PTY daemon that outlives the UI, and a relay for mobile steering. It can support new agents without bundling them.
MindsHub (formerly MindsDB)
1Splitting the client, API and agent into separately versioned git submodules lets each ship on its own cadence (a signed desktop app, a PyPI server package, an agent package), while one Makefile and one docker-compose.yml still bring the whole stack up together.