The fastest way to ship
documented Rust APIs.
Vespera turns plain Axum handlers into a typed, validated API with OpenAPI 3.1 generated at compile time.
File-based routing, automatic Swagger UI, and a binary JNI bridge that embeds your router
inside Spring Boot with microsecond round-trips.
FastAPI-grade DX, Rust-grade performanceVespera turns your Axum routes into a typed, validated, embeddable API with one macro. File-based routing, compile-time OpenAPI 3.1, and a JNI bridge that lets Spring host your Rust router with microsecond round-trips — no TCP, no JSON envelope.
Zero-config OpenAPI 3.1Drop handlers into src/routes/, derive Schema on your types, and Vespera generates the full OpenAPI 3.1 spec at compile time. No annotations, no runtime registration, no hand-written JSON.
Type-safe validationWrap any extractor in Validated<T> and garde runs before your handler. Failures become a structured 422 response automatically — under JNI, errors are hoisted into the wire header so Java decoders never special-case error shapes.
Embed Rust in SpringJNI in-process dispatch with a length-prefixed binary wire format. Multipart, PDFs, and images travel as raw bytes — no TCP socket, no JSON envelope, no base64 — the same Axum routes Spring users hit directly.
Microsecond dispatchSync round-trip in ~2.9 µs, direct ByteBuffer path in ~2.2 µs, streaming throughput up to 14.5 GB/s — measured end-to-end across the real JNI boundary, not just on the Rust side.
Microsecond dispatch, gigabyte/s streamingVespera embeds your Axum router inside the JVM via JNI — zero TCP, zero JSON envelope, raw bytes end-to-end. Numbers below are measured through the real JNI boundary on AMD Ryzen 9 9950X, JDK 21.
2.2µs
Direct JNI dispatchPer round-trip via pooled direct ByteBuffers
2.9µs
Sync dispatchLength-prefixed binary wire, no JSON envelope
14.5GB/s
Streaming throughput256 KiB chunks, 3.3× faster than v0.x
20%
Faster sync dispatchv0.2 zero-copy decode vs v0.1.1, same wire format
Latency measured on small GET /health round-trips through the real JNI boundary; streaming throughput measured with a 64 MiB payload. Full methodology and raw runs in the JNI benchmark report.
Zero to documented API in three stepsNo boilerplate, no YAML, no hand-written specs — the macro does the wiring, you write handlers.
1. Drop in a routeWrite a pub async fn in src/routes/ with #[vespera::route]. The file path becomes the URL — no router wiring, no manual registration.
2. Serve with one macrovespera!() discovers every route and cron job at compile time and generates your OpenAPI 3.1 spec. Chain .serve(addr) and Swagger UI is live at /docs.
3. Embed in Spring — optionalAdd vespera::jni_app! and call VesperaBridge.init() from Java. The same router runs inside the JVM over a binary wire — microsecond round-trips, no TCP.
Join our communityJoin our Discord to talk Rust APIs, JNI embedding, and what Vespera should build next.
join our community background image
문의 및 의견 제출
contact@devfive.kr
Copyright © DEVFIVE. All Rights Reserved.
DEVFIVE