Skip to main content

doltlite (Python)

A Python loader for doltlite — Dolt's version control through SQLite's drop-in API.

import doltlite          # one-time bootstrap
import sqlite3

conn = sqlite3.connect("repo.db")
conn.execute("CREATE TABLE t(x INT)")
conn.execute("INSERT INTO t VALUES (1)")
conn.execute("SELECT dolt_commit('-A', '-m', 'init')")

import doltlite makes libdoltlite the active SQLite engine for the current interpreter, so anything that uses the standard sqlite3 module — including SQLAlchemy with sqlite:///... URLs — transparently gains dolt_commit, dolt_branch, dolt_merge, dolt_log, dolt_diff_<table>, and the other Dolt SQL functions and virtual tables.

Install

pip install doltlite

Wheels bundle a precompiled libdoltlite for macOS (arm64) and Linux (x86_64, aarch64). No system-level setup required.

Intel Mac wheels aren't shipped in v0.11.x — GitHub's free-tier macos-13 runners queue for hours and block releases. Intel Mac users should build libdoltlite locally and use the DOLTLITE_LIB path below.

For development against a local checkout of doltlite, point DOLTLITE_LIB at your built library instead:

DOLTLITE_LIB=/path/to/libdoltlite.dylib python3 your_script.py

Requirements

The package piggybacks on Python's stdlib sqlite3, which must load SQLite as a shared extension at runtime. The following Pythons work:

  • Distro / system Python (Linux)
  • Homebrew Python (macOS, Linux)
  • pyenv-built Python
  • Conda Python

These do not work because their _sqlite3 is statically linked into the interpreter:

  • python-build-standalone interpreters — the default for uv python install, mise, and Rye

If you use uv, target one of the supported Pythons explicitly:

uv venv --python /opt/homebrew/bin/python3   # or /usr/bin/python3

How the bootstrap works

Doltlite is a SQLite drop-in: it implements the same sqlite3_* C API and adds Dolt-specific functions and virtual tables on top. To use it from Python, libdoltlite has to be loaded ahead of the system libsqlite3 so its symbols win during the dynamic-link symbol-resolution pass that Python's _sqlite3 module triggers when it's first imported.

The mechanics differ by platform:

Linux

ELF flat-namespace symbol resolution: if libdoltlite is loaded into the process with RTLD_GLOBAL before _sqlite3 is loaded, its sqlite3_* symbols enter the global namespace and the later libsqlite3.so lookup finds them first.

import doltlite does ctypes.CDLL(libdoltlite_path, mode=ctypes.RTLD_GLOBAL) in this case — no re-exec required.

If sqlite3 was already imported before doltlite, that boat has sailed: we fall back to re-execing the interpreter with LD_PRELOAD set, so libdoltlite is loaded at process start.

macOS

macOS uses a two-level namespace: _sqlite3.so has an LC_LOAD_DYLIB command bound to a specific libsqlite3.dylib path (e.g. /opt/homebrew/opt/sqlite/lib/libsqlite3.dylib). Plain dlopen / ctypes.CDLL does not redirect that resolution, and DYLD_INSERT_LIBRARIES alone doesn't either — the inserted library has to have an install_name (LC_ID_DYLIB) that matches the path _sqlite3.so was linked against.

import doltlite does:

  1. Detect that path via otool -L $(python3 -c 'import _sqlite3; print(_sqlite3.__file__)').
  2. Copy libdoltlite to $TMPDIR/.../libsqlite3.dylib (cached per (lib, mtime, install_name)).
  3. Rewrite the shim's install_name with install_name_tool -id <path>.
  4. Re-exec the interpreter with DYLD_INSERT_LIBRARIES=<shim>.

The two-level lookup then accepts the shim because the install_name matches.

This requires otool and install_name_tool — install Xcode Command Line Tools (xcode-select --install) if missing.

Re-exec caveats

When a re-exec is required (macOS, or Linux-after-sqlite3-loaded), the bootstrap calls os.execvpe with sys.argv. That means the invocation must name a script file we can replay:

  • ✅ python3 my_script.py
  • ✅ python3 -m my_package
  • ❌ python3 -c "import doltlite; ..." — code string isn't in argv
  • ❌ Interactive REPL / Jupyter — there's no script to re-exec

In the unsupported cases the bootstrap raises DoltliteLoadError with a clear workaround: set DYLD_INSERT_LIBRARIES (macOS) or LD_PRELOAD (Linux) yourself before starting Python.

API

import doltlite

# Side-effect import does the bootstrap automatically. Subsequent
# imports are no-ops thanks to a process-env marker.

# If you want to bootstrap explicitly (e.g. inside a function):
doltlite.bootstrap()

# Find where the loaded libdoltlite came from:
doltlite.libdoltlite_path()  # absolute path

See also

License

Apache License 2.0. See LICENSE.

Metadata

Release files for doltlite 0.50.18

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for doltlite 0.50.18
File Size Uploaded
doltlite-0.50.18.tar.gz 13.1 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for doltlite 0.50.18
File Interpreter ABI Platform
doltlite-0.50.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
doltlite-0.50.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
doltlite-0.50.18-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details

Total release size: 20.4 MB

Release files / doltlite-0.50.18.tar.gz

Download URL doltlite-0.50.18.tar.gz
Size 13.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a4c4305ca0265a8c7beb65aec4959c90f73b0840944335fb594d6b9ad1f57cdf
BLAKE2b-256 checksum
How to use checksums
3fa34e1f357473864685212df4634910a02cafcee93fabf64ee74e169b96d47b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / doltlite-0.50.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL doltlite-0.50.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 9.5 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
829d17c57eb0264174968be9ec10b841915e3e53383d28fd93570465b7b3d844
BLAKE2b-256 checksum
How to use checksums
4bc5e4de4e340771ea37689a8844bc13d99624f57d835c76ebae869412acc861
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / doltlite-0.50.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL doltlite-0.50.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.9 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
d1894e2241318d219e570aa64ebcc0189ad0eb6f65701b221f71cd899b167423
BLAKE2b-256 checksum
How to use checksums
540d74c5f5d0ced20629cecb12a806d356aaa6668422307c60c6788e875201d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / doltlite-0.50.18-py3-none-macosx_11_0_arm64.whl

Download URL doltlite-0.50.18-py3-none-macosx_11_0_arm64.whl
Size 1.9 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3c3d1e4cb26b00693b3eb70d39f6319520dba08520890692501b5b52204a3382
BLAKE2b-256 checksum
How to use checksums
f2b92761c195ff13b316d04cb3769efec871f65e76f136252886462d712e9e1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

0.51.0

4 release files

This release

0.50.18 This release

4 release files

0.50.9

4 release files

0.50.0

4 release files

0.11.2

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page