osrv
Dart-first unified server core with a single Server(...) API.
Status
- Core API implemented:
Server, middleware, plugins, lifecycle, error handling. dart:ioruntime transport implemented and tested.- WebSocket upgrade helper implemented for Dart/Node/Bun, and Edge adapters with provider-specific limits.
- Maintainer helper script available at
dart run tool/build.dart(delegates to CLI build). dart run osrv buildgenerates direct-deploy Node/Bun/Deno/Edge adapters underdist/that load Dart-compiled JS core.
Edge WebSocket support:
- Cloudflare Workers: supported.
- Netlify Edge: supported when runtime exposes
Deno.upgradeWebSocket(orWebSocketPair). - Vercel Edge: not supported by runtime; adapter returns
501for websocket upgrade attempts.
Install
dart pub add osrv
Use osrv in your own package
Published dependency:
dependencies:
osrv: ^0.1.0
Then create bin/main.dart:
import 'package:osrv/osrv.dart';
Future<void> main() async {
final server = Server(
fetch: (request) => Response.json({'ok': true, 'path': request.url.path}),
);
await server.serve();
}
Local path dependency (for osrv contributors):
dependencies:
osrv:
path: ../osrv
Example package
/example is a minimal non-publishable pub package that depends on osrv via path dependency.
cd example
dart pub get
dart run osrv serve
dart run osrv build
Quick start
import 'package:osrv/osrv.dart';
Future<void> main() async {
final server = Server(
fetch: (request) async {
return Response.json({'ok': true, 'path': request.url.path});
},
);
await server.serve();
}
CLI
dart run osrv serve
dart run osrv build
serve defaults to server.dart (fallback: bin/server.dart), and build also defaults to the same entry.
osrv.config.dart is not supported in V1. Use CLI flags, environment variables, or constructor options.
TLS/HTTP2 flags for local serve:
dart run osrv serve --tls --cert=cert.pem --key=key.pem --http2
http2 is tri-state in CLI:
--http2: force on.--no-http2: force off.- omitted: runtime default (
auto).
Dependency-mode workflow (inside your app package):
- Add
osrvdependency. - Create
server.dartwith your server entrypoint. - Run
dart run osrv servefor local run. - Run
dart run osrv buildfor distributable artifacts.
CLI config precedence:
- CLI flags
- Environment variables
- Defaults
Programmatic build API (for downstream packages):
import 'package:osrv/build.dart';
Future<void> main() async {
await build(
const BuildOptions(
entry: 'server.dart',
outDir: 'dist',
),
);
}
Maintainer Build Helper
dart run tool/build.dart
This is for local osrv repo development convenience.
User/application build flow remains dart run osrv build.
Artifacts:
dist/js/<runtime>/dist/edge/<provider>/dist/bin/
Test
dart test
Contract runner:
dart run tool/contract.dart
Multi-runtime contract matrix (auto-detects available runtimes):
dart run tool/contract_matrix.dart
Benchmark gate (fractional overhead, 0.05 == 5%):
dart run tool/bench.dart --requests=200 --max-overhead=0.05