Files
Flash5/README.md
T
RelismandClaude Sonnet 4.6 5f0681a922 Remove flash-bench, docs, stray .class files; rewrite README for library
- Remove flash-bench module from git and root pom.xml (kept locally)
- Remove docs/ directory (lifecycle markdown files)
- Remove stray compiled fpr-core .class files tracked by mistake
- Rewrite README.md: concise library overview, quick-start, handler styles, Maven dependency — no wrk/benchmarking content

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 22:39:33 +01:00

2.1 KiB

Flash

A high-performance HTTP/1.1 server library for Java 21+, built for low-latency workloads.

Features

  • Virtual threads — one virtual thread per connection via Executors.newVirtualThreadPerTaskExecutor()
  • Zero-allocation hot path — header buffer reused across keep-alive requests; ByteView slices avoid copies
  • Fast routingfpr-core compiles routes into a byte-level finite automaton at first request; path params via PathParams
  • Two-tier router — mounted sub-routers matched by longest prefix, then FastPathRouterImpl fallback
  • Middleware chain — composable Middleware lambdas fused at registration time (no per-request allocation)
  • Chunked transferChunkedInputStream de-chunks on the fly, keeps socket positioned for pipelining
  • Request bodybytes() for full materialization or stream() for zero-copy streaming

Requirements

  • Java 21+
  • Maven 3.8+

Build

mvn clean package -DskipTests

Quick start

HttpServer server = new HttpServer(
    HttpServerConfiguration.builder().port(8080).build()
);

server.get("/hello", (req, res) -> "Hello, world!");

server.register(new MyHandler()); // @Route(path="/...", method=GET)

server.start().thenRun(() -> System.out.println("Listening on :8080"));

Handler styles

Lambda:

server.get("/ping", (req, res) -> "pong");

Class-based (@Route):

@Route(path = "/users/{id}", method = HttpMethod.GET)
public class GetUser extends RequestHandler {
    @Override
    public Object handle(Request req, Response res) {
        String id = req.pathParam("id");
        return "{\"id\":\"" + id + "\"}";
    }
}

Middleware:

Middleware cors = next -> (req, res) -> {
    res.header("Access-Control-Allow-Origin", "*");
    return next.handle(req, res);
};
server.register(new GetUser(), cors);

Maven dependency

<repositories>
  <repository>
    <id>relism-releases</id>
    <url>https://maven.relism.dev/releases</url>
  </repository>
</repositories>

<dependency>
  <groupId>dev.relism</groupId>
  <artifactId>flash</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>