Installation

SecantusDB requires Python 3.12 or newer.

pip install SecantusDB

Pre-built wheels are published for CPython 3.12 and 3.13 on:

  • macOS arm64 (Apple Silicon)

  • Linux x86_64 and aarch64 (manylinux2014 / glibc, and musllinux_1_2 / Alpine)

  • Windows AMD64

WiredTiger is vendored inside the wheel — no separate package, no compile step, no system build tools required.

macOS Intel (x86_64) is not in the wheel matrix; macOS Intel users fall back to the from-source path below.

PyPI name vs import name

The PyPI distribution is SecantusDB. The Python import is secantus:

from secantus import SecantusDBServer       # import name: secantus

This split is normal Python convention — pip install Pillow / import PIL, pip install scikit-learn / import sklearn. PyPI is case-insensitive on lookup so pip install secantusdb works too.

Building from source (unsupported platforms only)

If your platform isn’t in the wheel matrix, pip install SecantusDB falls back to the sdist and compiles WiredTiger from source. That needs three native build tools on PATH:

  • cmake (>= 3.21)

  • ninja

  • swig (>= 4.0)

Platform

Install prerequisites

macOS (Homebrew)

brew install cmake ninja swig

Debian / Ubuntu

sudo apt-get install -y cmake ninja-build swig

Fedora / RHEL

sudo dnf install -y cmake ninja-build swig

Alpine

apk add --no-cache cmake ninja swig build-base

Then pip install SecantusDB triggers the build.

Development install

For working on SecantusDB itself, clone the repo and use uv:

git clone https://github.com/jdrumgoole/SecantusDB.git
cd SecantusDB
git submodule update --init --recursive   # vendor/wiredtiger
uv sync --extra dev                       # also builds vendored WT
uv run python -m pytest                   # full parallel suite

A development clone always builds WiredTiger from source (the same build cibuildwheel runs in CI), so the prerequisites in the previous section apply: cmake / ninja / swig / a C/C++ compiler must be on PATH.

Common workflows:

uv run python -m invoke fmt    # ruff format
uv run python -m invoke lint   # ruff check
uv run python -m invoke test   # pytest, parallel
uv run python -m invoke docs   # build Sphinx docs (warnings as errors)

The test suite runs in parallel via pytest-xdist. Tests use port=0 and :memory: storage so they don’t share state across workers.