Release 4.1.0
12 Oct 2026 · pinned package [email protected]
- Every
shell.page()site is an installable web app, with no per-site code. A newicons/directory ships four pre-rendered app icons (192 and 512, any and maskable) per app-icon tint variant — 8 sets, 32 palette PNGs, about 630 KB, since most sites share the network's tint — drawn byscripts/build-icons.jsfromapp-icon.svg({ site: variant, maskable });icons/sites.jsongives each of the 35 services with a share card its name, tagline and variant (social.iconSite). The newopenvibe-shared/app-iconsmodule names them (has,url,site,isIcon,path), andserve.jsanswers them at/shared/icons/<variant>[-maskable]-<size>.pngbeside the browser files and share cards. serve.jsnow also answersGET /shared/manifest/<service>.webmanifestasapplication/manifest+json, built from the service's Contractssiteblock (name and tagline, committed inicons/sites.json) with the same hashed icon URLs,start_url/scope/,display: standalone, the app-icon background and the navbar's#0d131dtheme colour. Unknown services 404.shell.page()adds<link rel="manifest">and<link rel="apple-touch-icon">for the page's service when it has icons, using the same service resolution as the share-card default (service, elsenavbar.service, elsefooter.service).manifest: falseopts out, and a page whoseheadalready carries a manifest link keeps it.