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.
Summary
Longhand segfaults (
EXC_BAD_ACCESS/ SIGSEGV) on Python 3.14 when installed withchromadb >= 1.0. The crash happens inchromadb_rust_bindings.abi3.soduring tokio worker thread operations — a NULL pointer dereference inside the PyO3 bindings.Environment
Repro
pip install longhand longhand stats # → Segmentation fault (exit 139)Faulting stack (condensed)
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.tomldeclareschromadb>=0.5.0with no upper bound, so pip resolves to 1.5.7 on a fresh 3.14 install, hitting the crash immediately.Workaround (until fixed)
Fix
Constrain chromadb conditionally on Python version in
pyproject.toml: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.