4.0 KiB
Bunext — Planned Features
Features currently in development or planned for a future release.
Middleware Request Mutation
Status: Planned (soon)
Extend the middleware function in bunext.config.ts to support returning a Request object. This allows the middleware to modify the incoming request — inject headers, attach auth context, set locale — and continue through the normal routing pipeline without short-circuiting.
The full return contract:
| Return value | Behaviour |
|---|---|
Response |
Short-circuits — response sent immediately, no further routing |
Request |
Replaces the original request and continues through the pipeline |
undefined |
Passes through unchanged (current behaviour) |
// bunext.config.ts
const config: BunextConfig = {
middleware: async ({ req, url, server }) => {
// Inject an auth header and continue
const token = await verifySession(req);
if (token) {
const mutated = new Request(req, {
headers: {
...Object.fromEntries(req.headers),
"x-user-id": token.userId,
},
});
return mutated;
}
// Short-circuit if not authenticated on protected routes
if (url.pathname.startsWith("/dashboard")) {
return Response.redirect("/login", 302);
}
// Otherwise continue unchanged
return undefined;
},
};
Custom Server
Status: In development
Allow consumer projects to create and fully customize the underlying Bun.serve() instance. Instead of Bunext owning the server entirely, the developer can provide their own server setup and integrate Bunext's request handler into it.
This enables use cases that require low-level server control:
- Custom WebSocket upgrade handling
- Custom TLS/SSL configuration
- Integrating Bunext into an existing Bun server alongside other handlers
- Custom
errorandlowMemoryModeoptions onBun.serve()
Sass / SCSS Support
Status: Planned
Add Sass/SCSS support by integrating the esbuild-sass-plugin package into the ESBuild pipeline alongside the existing Tailwind plugin. ESBuild does not handle .scss/.sass files natively — the plugin intercepts those file loads, compiles them via Dart Sass, and returns standard CSS to ESBuild.
Implementation is straightforward: install esbuild-sass-plugin, add it to the plugins array in allPagesBundler and writeHMRTsxModule. No changes to the rest of the pipeline — CSS extraction, per-page bundling, and HMR CSS swapping all work the same way.
Static Export (bunext export)
Status: Planned (low priority)
Add a bunext export command that pre-renders all pages to static HTML files, deployable to a CDN without a running server. This is a convenience feature for projects that have no dynamic server-side requirements.
A server is a fundamental requirement for Bunext — like WordPress, it is designed to run on a server. Static export is a secondary capability for edge cases, not a primary deployment model.
WebSocket Support via Config
Status: Planned
Add a websocket parameter to bunext.config.ts to handle WebSocket connections without requiring a custom server. This gives most projects a zero-config path to WebSockets while the custom server feature covers advanced use cases.
Proposed config shape:
// bunext.config.ts
import type { BunextConfig } from "bunext/src/types";
const config: BunextConfig = {
websocket: {
message(ws, message) {
ws.send(`echo: ${message}`);
},
open(ws) {
console.log("Client connected");
},
close(ws, code, reason) {
console.log("Client disconnected");
},
},
};
export default config;
The websocket field maps directly to Bun's WebSocketHandler interface, passed through to Bun.serve(). WebSocket upgrade requests are handled automatically by the framework before the normal request pipeline runs.