vole
Clone
Read only, no credentials:
https://rodent.software/vole.git
Write over SSH with a registered key:
git clone ssh://git@rodent.software:2222/vole.git
A free and open-source forge that lives in your Git repo.
Compress hosted site responses too
a76b2f38cb6692f7fe88c83e4552205d398f30df · Keenan Nemetz · 12d ago · parent 306f36fc
Compress hosted site responses too The gzip middleware covered the forge UI and nothing else: server.Handler dispatches a site host to server/pages before the forge middleware runs, so every hosted site was serving raw HTML, CSS and JavaScript. A site is a static file server, which is the best case gzip has. The compressor moves from server/web to internal/compress so both surfaces share one implementation of the negotiation and header rules, with two entry points: New for the forge, which needs the writer inside its own status recorder and panic handling, and Handler for the site dispatcher. Site responses keep their ETag and Last-Modified, so revalidation is still a 304 off the blob sha; Vary: Accept-Encoding names the representation; a 304 and a 301 carry no body to compress; and a client that does not ask for gzip still gets the exact bytes and the exact Content-Length. Measured on the site path, an HTML page with repeated markup goes from 1.5 KB to 83 bytes.
docs/operations.md +6−6
| @@ -181,12 +181,12 @@ the linked sections explain each in full. | |||
| 181 | 181 | request arrives over TLS, or `public_url` is `https://`, Vole sends HSTS on | |
| 182 | 182 | every response, not only on the pages that use passkeys. See | |
| 183 | 183 | [Configuration](configuration.md). | |
| 184 | - **Compression is already here.** Pages, the stylesheet, scripts and source | ||
| 185 | blobs are gzipped when the client asks for it, so a proxy in front should not | ||
| 186 | compress them again: double compression costs CPU and hides the `ETag` | ||
| 187 | revalidation that keeps the 545 KB Prism bundle to one download per browser. | ||
| 188 | Archives, LFS objects, Git responses and ranged downloads are passed through | ||
| 189 | untouched. | ||
| 184 | - **Compression is already here.** Forge pages, hosted sites, the stylesheet, | ||
| 185 | scripts and source blobs are gzipped when the client asks for it, so a proxy in | ||
| 186 | front should not compress them again: double compression costs CPU and hides | ||
| 187 | the `ETag` revalidation that keeps the 545 KB Prism bundle to one download per | ||
| 188 | browser. Archives, LFS objects, Git responses and ranged downloads are passed | ||
| 189 | through untouched. | ||
| 190 | 190 | - **SSH firewalled.** The SSH listener is the only write transport and the only | |
| 191 | 191 | place an account is authenticated. Expose it to the people who push, not to the | |
| 192 | 192 | internet at large, and leave it on a port other than 22 unless you also run | |