What's New in v0.5
v0.5 is the developer-experience and installation update. It adds guided setup with aiondb init, configuration files through aiondb serve --config, a 128 MiB default buffer pool, bounded dynamic-programming join ordering, prebuilt release binaries with a checksum-verifying installer, and multi-arch Docker images.
v0.5 is in development. Everything on this page is shipped on the v0.5 development branch. The downloadable artifacts — release binary archives, installer downloads, and release-tagged multi-arch images — become available when the first v0.5 release is published.
Product Highlights
v0.5 delivers five major upgrades:
aiondb init: one command that prepares a data directory, writes a commentedaiondb.conf, and prints strong generated bootstrap credentials once;aiondb serve --config <path>: file-based configuration with environment > file > defaults precedence and fail-fast validation;- a 128 MiB default buffer pool matching PostgreSQL's
shared_buffersdefault, plus the newAIONDB_STORAGE_INDEX_POOL_FRAMESknob; - bounded dynamic-programming join ordering for queries joining up to 10 relations, with the previous greedy ordering as fallback;
- release binaries for linux x86_64, linux aarch64, and macos arm64 with SHA256 checksums, a one-liner installer, and multi-arch (amd64 + arm64) Docker images.
Guided Setup: aiondb init
aiondb init prepares a persistent local instance in one step:
aiondb init --data-dir ./data/aiondb
It creates the data directory (owner-only permissions), writes a commented aiondb.conf (owner read/write only) with strong generated bootstrap credentials, prints the credentials once, and prints the exact command to start the server:
aiondb serve --config ./data/aiondb/aiondb.conf
Behavior is deliberately conservative, mirroring initdb:
- it refuses to initialize over a non-empty data directory;
- it refuses to overwrite an existing config file;
- the generated bootstrap password satisfies the server password baseline;
- if the data directory is not on a LUKS/dm-crypt encrypted filesystem,
initprints a note that the server will refuse persistent storage untilAIONDB_ALLOW_UNENCRYPTED_STORAGE=trueis uncommented in the generated file (development only).
Use --output <path> to write the config file somewhere other than <data-dir>/aiondb.conf.
Configuration Files: serve --config
aiondb serve --config <path> loads configuration from a KEY=VALUE file using the same keys as the AIONDB_* environment variables. Real environment variables take precedence over file values (priority: environment > file > built-in defaults).
Startup fails if the file is missing, unreadable, or contains an unknown key. There is no silent fallback: a typo in a key name stops the server instead of being ignored.
Useful references:
Default Buffer Pool: 128 MiB
The default storage buffer pools now total 128 MiB, matching PostgreSQL's shared_buffers default:
AIONDB_STORAGE_TABLE_POOL_FRAMES=8192
AIONDB_STORAGE_SNAPSHOT_POOL_FRAMES=2048
AIONDB_STORAGE_INDEX_POOL_FRAMES=6144
Each frame caches one 8 KiB page. AIONDB_STORAGE_INDEX_POOL_FRAMES is new in v0.5 and sizes the durable index page pool.
The pools are fixed-size and are not resized based on host RAM. On machines with 1 GiB of RAM or less, lower the frame counts (for example 1024/256/768 for a 16 MiB total). Every value must be at least 1; the loader rejects 0.
Join Ordering
For queries joining up to 10 relations, the planner now runs a bounded dynamic program (DPsize over left-deep join orders) that exhaustively searches join orders using the same per-step cost function as the previous greedy ordering. The DP order is adopted only when it is strictly cheaper than the greedy order, so plans never regress. Beyond 10 relations, the planner keeps the greedy path.
Release Binaries and Installer
The release workflow now attaches real binaries to each tagged GitHub Release:
aiondb-<version>-linux-x86_64.tar.gzaiondb-<version>-linux-aarch64.tar.gzaiondb-<version>-macos-arm64.tar.gz
each with a matching .tar.gz.sha256 checksum file. Once the first v0.5 release is published, install the latest binary into ~/.local/bin with:
curl -fsSL https://raw.githubusercontent.com/ayoubnabil/aiondb/main/packaging/install.sh | sh
The installer detects the OS and CPU architecture, downloads the matching archive, verifies the SHA256 checksum, and copies the aiondb binary into the install directory. It never uses sudo and never writes outside the install directory and a temporary directory. AIONDB_VERSION pins a release tag and AIONDB_INSTALL_DIR overrides the target directory.
Docker images are now built multi-arch (linux/amd64 and linux/arm64). docker-compose.yml is self-contained, so the compose quickstart also works without a repository checkout; see packaging/INSTALL.md. That path depends on the GHCR packages being public — if an image pull is denied, the package is not public yet.
Shipped vs. Upcoming
Shipped on the v0.5 development branch:
aiondb initandaiondb serve --config <path>;- the 128 MiB default buffer pool and
AIONDB_STORAGE_INDEX_POOL_FRAMES; - bounded dynamic-programming join ordering;
- the release workflow,
packaging/install.sh, and multi-arch image builds.
Available when the first v0.5 release is published:
- downloadable
aiondb-<version>-<os>-<arch>.tar.gzarchives and checksums; - installer downloads that resolve to real release assets;
- release-tagged multi-arch images.