Familiar
Integrates well with libraries you love.
Intuitive features and API, and a few new ones to explore.
Features
File-based routing
Use the file system to define routes, layouts, and more.
Config-based routing
Use a config file for more control and flexibility.
Layered Middleware
Define middleware at the route, layout, or app level and compose them together.
Layered Loaders
Define data loaders at the route, layout, or app level, and share the results.
"use" directives
Continue using file or function-level directives for client-server boundaries (in applicable frameworks)
vite plugins
Continue using familiar Vite plugins.
UI Frameworks
Choose between React or Preact (more to come).
SSG
Static site generation for pre-rendered content.
SSR
Server-side rendering for dynamic content.
Client-side Routing
Optionally navigate between pages on the client side without full page reloads.
Vanilla-JS component script
Create dynamic components with a script tag and JSX, without bundling frameworks.
And more
Check our documentation for more features.
Feather-light
Built on
Configurable route-based caching. Competitive SSR performance.
Competitive Performance
Routing to Catch-all /a/b/c
p50 response latency
node v26.10.0, autocannon v8.0.0, 50 connections, 10 pipelining, 15s duration, M4 Pro. Minimal routes. Attempted to not include any client assets per app. Take these results with a grain of salt!
Thoughtful Enhancements
Minimal API
Wren tries to keep features minimal and focused on essentials, but flexible enough to let you build what you need.
Zero JS
Ship HTML without a client runtime by default. Use vanilla JS scripts without importing a framework.
Vanilla JS scripts
Add lightweight behavior with standard script tags. Create web components.
Minimal Dependencies
Our packages make an effort to use the least amount of dependencies possible.
Client routing
Navigate without full page reloads when you need it.
Custom ISR
Tune revalidation for each route (planned!).