@astroscope/hyperspace
v0.1.3
Published
Pre-compressed in-memory static file serving for Astro — save space, serve from hyperspace
Maintainers
Readme
@astroscope/hyperspace
Note: This package is in active development. APIs may change between versions.
Pre-compressed in-memory static file serving for Astro SSR. Save space, serve from hyperspace.
CDNs and reverse proxies often compress on the fly with conservative settings — or sometimes not at all. Hyperspace pre-compresses static files at build time with maximum brotli and gzip quality, then serves them from memory at startup. The result is smaller responses than most CDNs produce in real-time, with zero per-request CPU or disk overhead. Works great standalone or behind a proxy.
Examples
See the demo/hyperspace directory for a working example.
Installation
npm install @astroscope/hyperspaceUsage
// astro.config.ts
import { defineConfig } from 'astro/config';
import hyperspace from '@astroscope/hyperspace';
export default defineConfig({
output: 'server',
integrations: [hyperspace()],
});That's it. No configuration needed.
What it does
Build time
After Astro finishes building, hyperspace walks dist/client/ and compresses every text-based static file:
- Brotli at maximum quality (level 11)
- Gzip at level 9
- Skips variants where compressed size >= original size
- Writes
.brand.gzfiles next to originals
Compressible extensions: .html, .css, .js, .mjs, .json, .xml, .svg, .txt, .wasm, .map, .webmanifest, .xhtml
Runtime
On server startup, the middleware loads all compressible files and their pre-compressed variants. When a request comes in, it:
- Checks if the request path matches a cached file
- Negotiates encoding from
Accept-Encoding(prefers br > gzip > raw) - Returns the best variant from memory with correct headers
- Falls through to Astro for non-static requests
Headers
Content-Encoding: brorgzipwhen serving compressedVary: accept-encodingon all cached responsesCache-Control: public, immutable, max-age=31536000for/_astro/files (hashed filenames)
Memory footprint
Typical memory usage is modest:
| Site size (raw) | Estimated memory (raw + br + gz) | | --------------- | -------------------------------- | | 400 KB | ~600 KB | | 3 MB | ~5 MB | | 10 MB | ~15 MB |
Only text-based files are loaded. Images, fonts, and other binaries are left to Astro's default static file handling.
Dev mode
In development, there are no compressed files — the middleware gracefully no-ops and passes all requests through to Astro.
Requirements
- Node.js runtime
- SSR output mode (
output: "server")
License
MIT
