A fast, modern server framework for Bun with multi-protocol support. Build HTTP, HTTP/2, WebSocket, gRPC, UDP, and TCP servers with the same intuitive API.
Verb is designed specifically for the Bun run time, for more information on Bun checkout https://bun.sh
Features
- Multi-Protocol Support - HTTP, HTTP/2, WebSocket, gRPC, UDP, TCP
- Unified API - Same interface across all protocols
- Runtime Protocol Switching - Switch between protocols dynamically
- Built for Bun - Native Bun APIs for maximum performance
- TypeScript First - Full type safety out of the box
Install / Add
# Install dependencies
bun add github:wess/verb
Basic Usage:
HTTP Server
import { createServer } from "verb";
const app = createServer();
app.get("/", (req, res) => {
res.json({ message: "Hello World!" });
});
app.listen(3000);
Protocol Selection
import { createServer, ServerProtocol } from "verb";
// HTTP/2 server
const http2Server = createServer(ServerProtocol.HTTP2);
// WebSocket server
const wsServer = createServer(ServerProtocol.WEBSOCKET);
wsServer.websocket({
open: (ws) => ws.send("Connected!"),
message: (ws, message) => ws.send(`Echo: ${message}`)
});
// gRPC server
const grpcServer = createServer(ServerProtocol.GRPC);
grpcServer.addMethod("UserService", {
name: "GetUser",
handler: async (request) => ({ id: request.id, name: "John" })
});
// UDP server
const udpServer = createServer(ServerProtocol.UDP);
udpServer.onMessage((message) => {
console.log("UDP:", message.data.toString());
});
// TCP server
const tcpServer = createServer(ServerProtocol.TCP);
tcpServer.onConnection((connection) => {
connection.write("Welcome to TCP server!");
});
Fluent API
import { server } from "verb";
const httpApp = server.http();
const grpcApp = server.grpc();
const udpApp = server.udp();
Protocol Gateway
Switch between protocols at runtime with the same routes:
import { ProtocolGateway, ServerProtocol } from "verb";
const gateway = new ProtocolGateway();
// Define routes that work across HTTP-based protocols
gateway.defineRoutes((app) => {
app.get("/api/status", (req, res) => {
res.json({
status: "healthy",
protocol: gateway.getCurrentProtocol()
});
});
});
// Start with HTTP
gateway.listen(3000);
// Switch to HTTP/2
gateway.switchProtocol(ServerProtocol.HTTP2);
gateway.listen(3001);
// Switch to WebSocket
const wsServer = gateway.switchProtocol(ServerProtocol.WEBSOCKET);
wsServer.websocket({
open: (ws) => ws.send("WebSocket ready!")
});
gateway.listen(3002);
Available Protocols
Protocol | Enum | Description |
---|---|---|
HTTP/1.1 | ServerProtocol.HTTP |
Standard HTTP server |
HTTP/2 | ServerProtocol.HTTP2 |
HTTP/2 with multiplexing |
WebSocket | ServerProtocol.WEBSOCKET |
WebSocket with HTTP routes |
gRPC | ServerProtocol.GRPC |
gRPC service definitions |
UDP | ServerProtocol.UDP |
UDP message handling |
TCP | ServerProtocol.TCP |
TCP connection management |
API Reference
HTTP-based Servers (HTTP, HTTP/2, WebSocket)
// Route methods
app.get(path, handler)
app.post(path, handler)
app.put(path, handler)
app.delete(path, handler)
app.patch(path, handler)
// Middleware
app.use(middleware)
// Start server
app.listen(port, hostname?)
WebSocket Server
app.websocket({
open: (ws) => { /* connection opened */ },
message: (ws, message) => { /* message received */ },
close: (ws) => { /* connection closed */ }
});
gRPC Server
app.addService(service)
app.addMethod(serviceName, method)
UDP Server
app.onMessage((message) => { /* handle message */ })
app.send(data, port, address)
TCP Server
app.onConnection((connection) => { /* handle connection */ })
app.onData((connection, data) => { /* handle data */ })
Development
# Run tests
bun test
# Lint code
bun run lint
# Format code
bun run format
Top comments (0)