Framework pieces that stay close together.
Controllers
Route logic stays small and readable.
Markdown content
Docs stay editable without touching templates.
Browser UI
Interactive pages hydrate from Dart components.
Built for real full-stack work
The home page should show the framework, not a demo toy. These are the pieces teams reach for first.
Routing and controllers
Define feature routes and keep request logic in plain Dart controllers.
Models and QueryBuilder
Use the active-record style model layer when your docs app needs persistent content.
Guards and sessions
Protect write flows for blog posts, questions, comments, and admin actions.
Swagger and Markdown
Serve API references, guides, changelog pages, and AI-friendly docs from clean content.
Cache, storage, mail
Reach for production utilities without pulling in a pile of unrelated packages.
Flint UI browser pages
Hydrate modern Dart components on server-rendered pages when interaction matters.
This counter is a real Flint component.
Click it and the state updates through Dart in the browser, inside the same docs page.
class CounterProof extends Component {
int count = 0;
@override
View build() {
return Row(
children: [
Text.span(count),
Button(
child: '+',
onPressed: (_) => setState(() => count++),
),
],
);
}
}Three commands from empty folder to running app.
Copy each step as you go. Flint keeps the first path short, then the guides can fill in the details when you need them.
One framework, one structure
Routes, controllers, content, and browser UI each get their own place.
Routes
Group routes by feature and register controllers with app.controller().
Controllers
Extend Controller directly and keep request handlers easy to scan.
Content
Store docs as Markdown, then render them where the UI needs them.
UI
Use Flint UI pages for interactive docs without returning to template files.
class DocsRoutes extends RouteGroup {
@override
void register(Flint app) {
final docs = app.controller(DocsController.new);
docs.get('/', (c) => c.home());
docs.get('/guides/:topic', (c) => c.guidesTopic());
}
}Full-stack features stay organized.
Composed route groups handle API endpoints and render browser pages seamlessly. Controllers manage backend actions and return type-safe page structures directly to Flint UI components, keeping the entire lifecycle structured.
Start with the guide, then jump into the API.
The docs now point users into Markdown-backed guides and Dart-powered pages, with no old view templates in the way.
Build routes, controllers, APIs, docs, and browser UI from one Dart-shaped stack.