Metadata-Version: 2.4
Name: rhizo
Version: 0.1.1
Summary: Data, connected. Versioned data with SQL, time travel, and cross-table ACID transactions.
License: MIT
Project-URL: Homepage, https://rhizodata.dev
Project-URL: Repository, https://github.com/rhizodata/rhizo
Keywords: data,sql,duckdb,arrow,versioning,time-travel,transactions
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: rhizo-core>=0.1.0
Requires-Dist: pyarrow>=14.0.0
Requires-Dist: duckdb>=0.9.0
Requires-Dist: pandas>=2.0.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: maturin>=1.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"

# rhizo

Query layer for [Rhizo](https://rhizodata.dev) - versioned data with SQL, time travel, and cross-table ACID transactions.

## Installation

```bash
pip install rhizo
```

### From Source

```bash
git clone https://github.com/rhizodata/rhizo.git
cd rhizo/python
pip install -e .
```

Note: Requires `rhizo-core` (Rust) to be built first. See the main [README](https://github.com/rhizodata/rhizo) for full build instructions.

## Quick Start

```python
import rhizo
from rhizo import QueryEngine
import pandas as pd

# Initialize storage
store = rhizo.PyChunkStore("./data/chunks")
catalog = rhizo.PyCatalog("./data/catalog")
engine = QueryEngine(store, catalog)

# Write data
df = pd.DataFrame({"id": [1, 2, 3], "name": ["Alice", "Bob", "Charlie"]})
engine.write_table("users", df)

# SQL queries with DuckDB
result = engine.query("SELECT * FROM users WHERE id > 1")
print(result.to_pandas())

# Time travel to any version
result_v1 = engine.query("SELECT * FROM users", versions={"users": 1})
```

## Features

- **SQL Queries**: DuckDB-powered analytical queries
- **Time Travel**: Query any historical version
- **Cross-Table ACID**: Atomic transactions across multiple tables
- **Git-like Branching**: Zero-copy branches for experimentation
- **Change Tracking**: Subscribe to data changes

## Documentation

See [rhizodata.dev](https://rhizodata.dev) for full documentation.

## License

MIT
