Skip to main content

Prerequisites

Install Docker and Docker Compose before continuing. Rootprint requires Quickwit 0.9.0. The bundled Compose files pin quickwit/quickwit:v0.9.0. Earlier releases are not supported: some features are missing and others behave incorrectly. This option deploys Rootprint together with PostgreSQL and its embedded Quickwit search engine. Best for getting started quickly or running a self-contained setup. Download the Compose file and start the services:
This starts three containers:
  • Rootprint: the web UI, exposed on port 8282.
  • PostgreSQL: Rootprint application state, stored in the rootprint-db Docker volume.
  • Quickwit: Rootprint’s embedded search engine, reachable only from the Compose network by default.
Run docker compose ps to confirm all containers are healthy, then open http://localhost:8282.

Use S3 for storage

By default, the self-contained deployment stores index data in the rootprint-quickwit Docker volume on local disk. This is fine for testing, but removing the volume permanently deletes all indexed logs. For a persistent, production-ready setup, configure Quickwit to store index data in S3 (or any S3-compatible object storage). Add the following environment variables to the quickwit service in your docker-compose.yml:
Set both variables to paths within the same bucket. The bucket must already exist. See Quickwit storage configuration for all options, including S3-compatible providers and custom endpoints.
This keeps Quickwit single-node. An S3 QW_METASTORE_URI is a file-backed metastore (single-writer): durable, but not distributed. To run a multi-node Quickwit cluster, move the metastore to PostgreSQL. See Scaling beyond a single node.

Other storage backends

Quickwit also supports Azure Blob Storage, Google Cloud Storage, and S3-compatible providers (MinIO, Garage, DigitalOcean Spaces). The configuration follows the same shape: a URI scheme on QW_DEFAULT_INDEX_ROOT_URI and QW_METASTORE_URI, plus credentials. S3-compatible providers need a flavor set on the storage config so Quickwit picks the right path-style and multipart settings. See the Quickwit storage reference for the YAML structure and the full env-var list.

Exposing Quickwit on internal networks

If other services on your internal network need to ingest data directly into Quickwit, publish Quickwit’s ports on the host. In docker-compose.yml, add these port bindings to the quickwit service:
Quickwit will then be reachable at http://<host-ip>:7280 from other machines on the same network.
Quickwit has no authentication mechanism. Never expose it on a public or untrusted network. Restrict access at the network or firewall level and only do this within a private, trusted network.

Connect to an existing Quickwit instance

Prerequisite: Quickwit 0.9.0 required. Rootprint relies on Quickwit 0.9.0 Ingest V2 behavior and the otel-logs-v0_9 schema. Anything older — 0.8.x and earlier — is unsupported and may fail or silently lose functionality. Confirm your instance’s version with curl http://your-quickwit-host:7280/api/v1/version before connecting it.
If you already have a Quickwit cluster running, deploy Rootprint with PostgreSQL and point it at your Quickwit instance. Download the standalone Compose file:
Open docker-compose.yml and set QUICKWIT_URL to the REST API endpoint of your Quickwit instance:
Then start the service:
Run docker compose ps to confirm both containers are healthy, then open http://localhost:8282.

Configuration

Customize the deployment by setting environment variables under the environment key of the rootprint service. See the environment variables reference for the full list, including the database URL, public origin, Quickwit endpoint, and session secret.

Next steps

With Rootprint running, head to Send logs to start ingesting data.