Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

Highlight with Prism in a worker and gzip text responses

306f36fcef89c145abcd0c5331453d0b179f37ce · Keenan Nemetz · 12d ago · parent e5542ac6

Highlight with Prism in a worker and gzip text responses

The code browser now names a blob's language and lets the browser colour it.
Chroma is gone: server/web/highlight.go is an extension table, and
static/prism-worker.js runs Prism — every language Prism ships — off the main
thread. The server sends escaped lines with their numbers and L# anchors, so a
page is complete and scrollable before any script runs and the worker only swaps
the contents of each line cell. The table covers 186 languages; a file it does
not claim stays plain rather than being coloured by a guess.

The bundle those grammars make is 545 KB, so the instance now gzips text
responses itself instead of relying on a proxy, and static assets carry a
content ETag so a browser revalidates with a 304 rather than re-downloading the
bundle on every code page. The raw-download route opts out with
Cache-Control: no-transform because it promises an exact Content-Length.

This also makes JavaScript a requirement rather than a nicety: the label and
assignee token inputs lose their noscript save buttons and their comma-separated
text fallback, and the docs say so.

Measured: release binary 26.08 MB -> 22.70 MB; /r/{repo}/code 11.1 KB -> 2.6 KB
over the wire; the Prism bundle 545 KB -> 206 KB gzipped, fetched once.

scripts/vendor-prism.py regenerates the bundle from Prism's components.json
require graph, and --check fails if the committed assets drift.

go.mod −2

@@ -6,7 +6,6 @@ toolchain go1.27.3
6 6
7 7 require (
8 8 github.com/BurntSushi/toml v1.6.0
9 github.com/alecthomas/chroma/v2 v2.27.0
10 9 github.com/go-webauthn/webauthn v0.18.2
11 10 github.com/microcosm-cc/bluemonday v1.0.27
12 11 github.com/yuin/goldmark v1.8.6
@@ -17,7 +16,6 @@ require (
17 16
18 17 require (
19 18 github.com/aymerick/douceur v0.2.0 // indirect
20 github.com/dlclark/regexp2/v2 v2.11.0 // indirect
21 19 github.com/dustin/go-humanize v1.1.0 // indirect
22 20 github.com/fxamacker/cbor/v2 v2.9.6 // indirect
23 21 github.com/go-viper/mapstructure/v2 v2.5.0 // indirect