Installation
curral is a single binary that is both the server (curral serve) and a
client (curral query).
docker pull lucasapassos/curral- Images for
linux/amd64andlinux/arm64. - Distroless, non-root (uid 65532), no shell, about 190 MB.
- The
httpfs,avroandicebergextensions are installed at build time, so the container boots without internet access. - Pin a version tag (for example
lucasapassos/curral:v0.4.1) in production.
The image has no curl; its HEALTHCHECK uses curral healthcheck.
Download a Linux tarball (amd64 or arm64, glibc 2.35+) from the
releases page. The
httpfs, avro and iceberg extensions are bundled, so it runs offline:
tar xzf curral_vX.Y.Z_linux_amd64.tar.gz && cd curral_vX.Y.Z_linux_amd64./curral serve --extension-dir ./extensions \ --catalog catalog.yaml --users users.yaml --policy policy.regoRequires Go 1.27+ and a C compiler (cgo, because of DuckDB):
go install -tags duckdb_arrow github.com/lucasapassos/curral/cmd/curral@latestOr from a clone:
go build -tags duckdb_arrow -ldflags "-s -w" -o bin/curral ./cmd/curralgo test -tags duckdb_arrow ./...The duckdb_arrow tag enables Arrow output. Without it, the build works the
same but format: arrow responds 400.
Extra DuckDB extensions
Section titled “Extra DuckDB extensions”Extension autoloading is disabled at runtime, so every extension a query may need must be listed in the catalog file and available at startup. To bake more into the Docker image:
docker build --build-arg EXTENSIONS="httpfs avro iceberg postgres" -t curral .For the binary, install them into a directory and pass --extension-dir:
curral install-extensions --extension-dir ./extensions postgres jsonSubcommands
Section titled “Subcommands”| Command | |
|---|---|
curral serve |
run the server; see server flags |
curral check |
validate the files and mount the catalog without starting HTTP |
curral query |
run a query against a server; see CLI |
curral hash-password |
generate a bcrypt hash for the users file |
curral gen-api-key NAME [ROLE...] |
generate an API key and its users-file entry |
curral install-extensions |
download DuckDB extensions for offline use |
curral healthcheck [url] |
probe /healthz (used by the Docker image) |
curral version |
print the version |