Changes in version 0.1.6 (2026-05-13) - dr_rate_limit(app, capacity, window, type, scope, routes) — per-route or shared rate limit (sliding / fixed window or token bucket); over-budget requests get HTTP 429 + Retry-After from the I/O thread before R is involved. - New vignette rate-limiting.Rmd. Changes in version 0.1.5 - Streaming responses: dr_stream(next_chunk, state, ...) returns HTTP chunked responses driven by an R generator pumped on the main R thread, with a cancelled = TRUE cleanup contract on client disconnect. - dr_stream_sse(generator, ...) convenience wrapper that formats Server-Sent Events frames (multi-line data is split per the SSE spec) and adds the Cache-Control: no-cache / X-Accel-Buffering: no headers expected by typical SSE clients. - New vignette streaming.Rmd with the threading caveats and end-to- end examples. Changes in version 0.1.4 - Path parameters in routes: dr_get("/users/:id", ...). Three placeholder syntaxes are accepted interchangeably — :name, , {name} — and exposed to handlers as a named character vector in req$params. - Response helpers: dr_text(), dr_html(), dr_redirect(), dr_file(). dr_file() auto-detects the MIME type from a built-in table covering ~25 common extensions, supports download_as = ... for Content-Disposition: attachment, and warns/errors on oversized loads (>50MB / >500MB). - Windows source-portability: replaced the POSIX pipe(2) / fcntl(2) wakeup mechanism with a loopback TCP socketpair on Windows. (Full Windows binary build is still pending.) Changes in version 0.1.3 - Fast-path handlers: bypass R-side tryCatch/middleware, registering directly in C++. Hits 147k req/s (2.5x boost). - dr_json(): new C++ walker for basic types replaces jsonlite. Hits 118k req/s (12x boost) with silent fallback. - Stable workers: switched from mcparallel (fork) to processx (spawn). Fixes later fds and sink stack issues in tests; ensures a clean R state for each worker. Changes in version 0.1.2 - Multi-process workers: dr_serve(workers = N) spawns N forked R workers sharing the listening port via SO_REUSEPORT. - on_worker_start callback in dr_serve() for per-worker initialization (load models, open per-worker resources). - dr_status() reports the live worker pids of a multi-process serve. - dr_serve(max_queue = N) bounds the request queue and rejects excess requests with HTTP 503, providing backpressure under overload. Changes in version 0.1.0 Initial development release. - High-performance HTTP server for R, backed by the Drogon C++ framework. - Bundled, statically-linked Drogon, Trantor and JsonCpp sources — no external installation of Drogon is required. - Optional HTTPS support: when OpenSSL development headers are detected by the configure script (via pkg-config or a manual search), the package is built with TLS enabled. Otherwise it falls back to a plain-HTTP build with a single message at install time. - --with-openssl / --without-openssl flags can force the choice (passed via R CMD INSTALL --configure-args=...). - Portable UUID generation using instead of libuuid, removing the system dependency on Linux.