From c58eefbd84727fd59aa34d09d2392f00783127d9 Mon Sep 17 00:00:00 2001 From: Burak Yigit Kaya Date: Sat, 16 May 2026 18:25:09 +0000 Subject: [PATCH] fix(server): add zstd HTTP compression with gzip fallback Add zstd as the preferred compression encoding, falling back to gzip and deflate. Modern browsers (Chrome 123+, Firefox 126+, Safari 18+) automatically send zstd in Accept-Encoding. Zstd provides ~30-40% better compression than gzip at similar speeds. Uses Bun.zstdCompressSync which is available natively in Bun. --- .../routes/instance/httpapi/middleware/compression.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/server/routes/instance/httpapi/middleware/compression.ts b/packages/opencode/src/server/routes/instance/httpapi/middleware/compression.ts index 9187bfea345e..05f25fe810a5 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/middleware/compression.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/middleware/compression.ts @@ -13,11 +13,12 @@ const STREAMING_POST_REGEX = /^\/session\/[^/]+\/(?:message|prompt_async)$/ const THRESHOLD_BYTES = 1024 -type Encoding = "gzip" | "deflate" +type Encoding = "zstd" | "gzip" | "deflate" function pickEncoding(acceptEncoding: string | undefined): Encoding | undefined { if (!acceptEncoding) return undefined const lower = acceptEncoding.toLowerCase() + if (lower.includes("zstd")) return "zstd" if (lower.includes("gzip")) return "gzip" if (lower.includes("deflate")) return "deflate" return undefined @@ -54,7 +55,12 @@ export const compressionLayer = HttpRouter.middleware<{ handles: unknown }>()((e const encoding = pickEncoding(request.headers["accept-encoding"]) if (!encoding) return response - const compressed = encoding === "gzip" ? gzipSync(body.body) : deflateSync(body.body) + const compressed = + encoding === "zstd" + ? Bun.zstdCompressSync(body.body) + : encoding === "gzip" + ? gzipSync(body.body) + : deflateSync(body.body) return HttpServerResponse.setHeader( HttpServerResponse.setBody(response, HttpBody.uint8Array(compressed, contentType)), "content-encoding",