Skip to main content
Self-hosting runs the Verglas cache and admin API on your infrastructure. Your object store remains the system of record, and your query engine continues to use its existing Iceberg catalog.

Ports and data

The Docker example exposes the following endpoints: The container stores cache data under /var/lib/verglas. Mount that path on local NVMe or another fast, persistent volume.

Start a single server

1

Create local configuration files

From the Verglas repository, create an ignored working directory:
Edit .verglas-selfhost/verglas.toml with your origin bucket and region. The following filled example uses an AWS S3 bucket named acme-lakehouse-prod:
.verglas-selfhost/verglas.toml
Remove the [catalog] section when you only need a byte cache. Verglas then skips table watching and metadata warming.
2

Write credentials

Write the origin credentials that Verglas uses on cache misses:
.verglas-selfhost/credentials/backend
Write a separate keypair for clients that connect to the Verglas S3 endpoint:
.verglas-selfhost/credentials/endpoint
If the catalog uses a bearer token, write only that token to .verglas-selfhost/credentials/catalog.token.
Never reuse the origin keypair as the client-facing endpoint keypair. Never commit either credential file.
3

Override the Compose mounts

Save the following file as docker-compose.override.yml:
docker-compose.override.yml
4

Start and verify the server

Build the image and start the server:
In a second terminal, point the CLI at the admin API:
A healthy response includes the server version and cache state.
5

Point a client at the cache

Configure an S3 client with the endpoint keypair and fetch an object:
Configure DuckDB with path-style addressing:

Operate the server

Use the following commands during normal operation:
verglas drain stops new cache ownership, donates warm blocks to peers, and then exits. Use it before removing a node from a multi-node pod.

Configure production deployments

The Docker quickstart uses plaintext loopback endpoints. Production deployments must add TLS, restrict the admin listener, mount a persistent cache directory, and give the server only the origin and catalog permissions it needs. See the annotated verglas.example.toml in the repository for every supported key.