hono-inertia
v0.1.0
Published
A small Inertia.js server-side adapter for Hono.
Maintainers
Readme
hono-inertia
A small server-side Inertia.js adapter for Hono.
It returns an HTML root view for first-page visits and Inertia page JSON for
requests with X-Inertia: true. It is framework-client agnostic: use it with
the Inertia React, Vue, or Svelte client in your frontend bundle.
Install
bun add hono-inertia hononpm install hono-inertia honoQuick Start
import { Hono } from "hono";
import { createInertia } from "hono-inertia";
const app = new Hono();
const inertia = createInertia({
version: "asset-v1",
sharedProps: {
appName: "My app",
},
});
app.get("/", (c) => {
return inertia.render(c, "Home", {
message: "Hello from Hono",
});
});
export default app;Custom Root View
Use a TSX root view when you want a Laravel-style root template.
import type { InertiaRootViewProps } from "hono-inertia";
export const RootView = ({ id, page, title }: InertiaRootViewProps) => (
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{title}</title>
</head>
<body>
<div id={id} data-page={JSON.stringify(page)} />
</body>
</html>
);const inertia = createInertia({
rootView: RootView,
title: (page) => `${page.component} - My app`,
});Props
import { always, lazy, optional } from "hono-inertia";
app.get("/users", (c) =>
inertia.render(c, "Users/Index", {
users: lazy(() => loadUsers()),
flash: always(() => getFlash(c)),
filters: optional(() => getFilters(c)),
}),
);- Plain values are included on full visits.
- Functions are lazy and only resolved when included.
always()is included on full and partial visits unless explicitly excluded.optional()is only included when requested by a partial reload.
Redirects
app.post("/logout", (c) => inertia.redirect(c, "/"));
app.post("/profile", (c) => inertia.back(c));
app.get("/billing", (c) => inertia.location(c, "https://billing.example.com"));redirect() and back() default to 303 for Inertia requests. back() uses
the Referer header and falls back to /. location() returns the Inertia
external redirect response: 409 with X-Inertia-Location.
Documentation
Development
bun install
bun run typecheck
bun run test
bun run build
bun run devThe example server runs from examples/basic.
Docs Site
View the docs in a browser with VitePress:
bun run docs:devThen open the local URL printed by VitePress, usually:
http://127.0.0.1:5173