Dart implementation of the Inertia.js server-side protocol. Build
single-page apps without building an API — pair any Dart HTTP server with a client adapter
like @inertiajs/react, @inertiajs/vue3, or @inertiajs/svelte.
| Package | pub.dev | Description |
|---|---|---|
inertia_dart |
Core protocol — framework-agnostic props, SSR, asset helpers, and testing utilities | |
routed_inertia |
Routed integration — middleware, EngineContext helpers, config-driven setup, and SSR |
|
serinus_inertia |
Serinus integration — InertiaModule, RequestContext.inertia(), and managed SSR |
The framework-agnostic foundation. Use it directly with dart:io or as the
building block for higher-level integrations.
import 'package:inertia_dart/inertia_dart.dart';
final request = inertiaRequestFromHttp(httpRequest);
final page = InertiaResponseFactory().buildPageData(
component: 'Dashboard',
props: {
'user': {'name': 'Ada'},
'stats': LazyProp(() => loadStats()),
},
url: request.url,
context: request.createContext(),
version: '1.0.0',
);
await writeInertiaResponse(httpRequest.response, InertiaResponse.json(page));Provides a first-class Serinus experience via
InertiaModule and RequestContext.inertia().
import 'package:serinus/serinus.dart';
import 'package:serinus_inertia/serinus_inertia.dart';
class AppModule extends Module {
AppModule()
: super(
imports: [
InertiaModule(
options: InertiaOptions(
version: '1.0.0',
assets: InertiaAssetsOptions(
entry: 'src/main.jsx',
clientDirectory: 'client',
includeReactRefresh: true,
),
),
),
],
controllers: [AppController()],
);
}class AppController extends Controller {
AppController() : super('/') {
on(Route.get('/'), (context) async {
return context.inertia(
component: 'Home',
props: {'title': 'Hello from Serinus'},
);
});
}
}