Skip to content

Segfault on Python 3.14 with chromadb >= 1.0 (Rust bindings) #4

@Wynelson94

Description

@Wynelson94

Summary

Longhand segfaults (EXC_BAD_ACCESS / SIGSEGV) on Python 3.14 when installed with chromadb >= 1.0. The crash happens in chromadb_rust_bindings.abi3.so during tokio worker thread operations — a NULL pointer dereference inside the PyO3 bindings.

Environment

  • macOS 26.4.1 (ARM64, Apple M4)
  • Python 3.14.2
  • chromadb 1.5.7
  • longhand 0.5.5 (also reproduced with 0.3.0)

Repro

pip install longhand
longhand stats   # → Segmentation fault (exit 139)

Faulting stack (condensed)

Thread 31 Crashed:
chromadb_rust_bindings.abi3.so + 25456296
chromadb_rust_bindings.abi3.so + 25443892
...
→ KERN_INVALID_ADDRESS at 0x0

Root cause

ChromaDB 1.x rewrote internals in Rust and ships PyO3-based chromadb_rust_bindings. Python 3.14 changed internals that PyO3 bindings are sensitive to, and chromadb hasn't shipped a 3.14-compatible build yet. ChromaDB 0.x (pre-Rust) works fine on Python 3.14.

Longhand's pyproject.toml declares chromadb>=0.5.0 with no upper bound, so pip resolves to 1.5.7 on a fresh 3.14 install, hitting the crash immediately.

Workaround (until fixed)

pip install 'chromadb<1.0'
rm -rf ~/.longhand/chroma   # 1.x on-disk format incompatible with 0.x
longhand ingest --force     # rebuild vector index

Fix

Constrain chromadb conditionally on Python version in pyproject.toml:

"chromadb>=0.5.0; python_version<'3.14'",
"chromadb>=0.5.0,<1.0; python_version>='3.14'",

This way 3.12/3.13 users are unaffected (keep 1.x) and 3.14 users get 0.x which works. Once chromadb ships a 3.14-compatible 1.x wheel, we can relax the constraint.

Will ship as 0.5.6.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions