Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 24 additions & 70 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,92 +1,46 @@
# ArcadeDB Embedded for Python

> **Moved: the Python bindings now live in [ArcadeData/arcadedb-python](https://github.com/ArcadeData/arcadedb-python).** Install `arcadedb` (the native build, the default) or `arcadedb-jvm` (the JVM build); both use `import arcadedb`. [Which package?](https://github.com/ArcadeData/arcadedb-python/blob/main/docs/modules/ROOT/pages/which-package.adoc) explains the choice. The first releases of the new packages are 26.11.1, starting as pre-releases (`pip install --pre arcadedb`). `arcadedb-embedded` and `import arcadedb_embedded` are deprecated: `arcadedb-embedded` will get a last release that installs `arcadedb`. Report bindings issues and send bindings pull requests to the new repository. This repository will be archived; the benchmark tooling stays here for now.
> **Moved: the Python bindings now live in [ArcadeData/arcadedb-python](https://github.com/ArcadeData/arcadedb-python).** Install `arcadedb` (the native build, the default) or `arcadedb-jvm` (the JVM build); both use `import arcadedb`. [Which package?](https://github.com/ArcadeData/arcadedb-python/blob/main/docs/modules/ROOT/pages/which-package.adoc) explains the choice. The first releases of the new packages are 26.11.1, starting as pre-releases (`uv add --pre arcadedb`). `arcadedb-embedded` and `import arcadedb_embedded` are deprecated: `arcadedb-embedded` will get a last release that installs `arcadedb`. Report bindings issues and send bindings pull requests to the new repository. This repository will be archived; the benchmark tooling stays here for now.

Native Python bindings for ArcadeDB (forked from the official Java project).

[![PyPI](https://img.shields.io/pypi/v/arcadedb-embedded)](https://pypi.org/project/arcadedb-embedded/)
[![PyPI - Python
Version](https://img.shields.io/pypi/pyversions/arcadedb-embedded)](https://pypi.org/project/arcadedb-embedded/)
[![PyPI](https://img.shields.io/pypi/v/arcadedb?include_prereleases)](https://pypi.org/project/arcadedb/)
[![Docs](https://img.shields.io/badge/docs-arcadedb.com-892122)](https://docs.arcadedb.com/arcadedb-python/)
[![Test Python
Bindings](https://github.com/humemai/arcadedb-embedded-python/actions/workflows/test-python-bindings.yml/badge.svg)](https://github.com/humemai/arcadedb-embedded-python/actions/workflows/test-python-bindings.yml)
[![Test Python
Examples](https://github.com/humemai/arcadedb-embedded-python/actions/workflows/test-python-examples.yml/badge.svg)](https://github.com/humemai/arcadedb-embedded-python/actions/workflows/test-python-examples.yml)
[![Release to
PyPI](https://github.com/humemai/arcadedb-embedded-python/actions/workflows/release-python-packages.yml/badge.svg)](https://github.com/humemai/arcadedb-embedded-python/actions/workflows/release-python-packages.yml)

---

## ✨ What this repo provides

- Native Python bindings for ArcadeDB with a bundled JRE (no local Java required).
- **Wheels for 4 platforms: Linux x86_64, Linux ARM64, macOS Apple Silicon, and Windows x86_64.**
- Embedded usage (in-process) with optional in-process server mode (HTTP API; Studio is not bundled, see [ArcadeData/arcadedb#10579](https://github.com/ArcadeData/arcadedb/issues/10579)).
- Tests and examples validated in CI across supported platforms.

The Python bindings and packaging live under bindings/python. The upstream Java project
remains the source of the core database.

## 🧱 What’s inside

- bindings/python: Python package source, build scripts, tests, and examples.
- docs site: [https://docs.arcadedb.com/arcadedb-python/](https://docs.arcadedb.com/arcadedb-python/)
- CI: Build/test workflows for bindings and examples (badges above).

## ✅ Typical use cases

- Local embedded analytics without a separate server process.
- Vector search and graph workloads from Python.
- Running ArcadeDB in-process for testing or tooling.
## What is in this repository

## 🧠 ArcadeDB at a glance
- `benchmarks/`: the benchmark harness for ArcadeDB and its comparators, and the published results. Start with [benchmarks/README.md](benchmarks/README.md).
- `bindings/python/`: the source of the `arcadedb-embedded` releases up to 26.10.2.post1. It is kept for history and for the benchmark harness, and new work on the bindings goes to [ArcadeData/arcadedb-python](https://github.com/ArcadeData/arcadedb-python).
- The rest is a fork of the ArcadeDB Java project, which this repository does not change.

- Multi-model database built for performance.
- Document + Graph + Key/Value + Vector + Time Series in one engine.
- Supports SQL and OpenCypher query languages.
## Use the Python bindings

## 📦 What the wheel includes

- Approximate size: ~65 MiB download, ~86 MiB installed.
- Lightweight Java 25 runtime (jlink) bundled per platform.
- ArcadeDB JARs required for the embedded engine.
- Python bindings and source modules.

## ✨ ArcadeDB capabilities (via Python)

- Multi-model: Graph, Document, Key/Value, Vector, Time Series.
- Query languages: SQL, OpenCypher.
- ACID transactions and high performance.

## 🚀 Quick start (Python)
Install the package and read the documentation from the new repository:

```bash
uv add arcadedb-embedded # or: pip install arcadedb-embedded
uv add --pre arcadedb # native build; until 26.11.1 is a final release
uv add --pre arcadedb-jvm # JVM build, only if you need it
```

## 🔗 Quick Links
- Documentation: [https://docs.arcadedb.com/arcadedb-python/](https://docs.arcadedb.com/arcadedb-python/)
- Repository, issues and pull requests: [ArcadeData/arcadedb-python](https://github.com/ArcadeData/arcadedb-python)
- PyPI: [arcadedb](https://pypi.org/project/arcadedb/) and [arcadedb-jvm](https://pypi.org/project/arcadedb-jvm/)

- Python README: [bindings/python/README.md](bindings/python/README.md)
- PyPI:
[https://pypi.org/project/arcadedb-embedded/](https://pypi.org/project/arcadedb-embedded/)
## Upstream ArcadeDB (Java)

## 🧭 Upstream ArcadeDB (Java)
This repository is a fork of ArcadeDB Java. For the server, the Java API, and the core database documentation:

This repo is a fork of ArcadeDB Java. For the server, Java API, and core database docs:

- Upstream repo:
[https://github.com/ArcadeData/arcadedb](https://github.com/ArcadeData/arcadedb)
- Docs: [https://docs.arcadedb.com](https://docs.arcadedb.com)
- Upstream repository: [https://github.com/ArcadeData/arcadedb](https://github.com/ArcadeData/arcadedb)
- Documentation: [https://docs.arcadedb.com](https://docs.arcadedb.com)
- ArcadeDB Discord: [https://discord.gg/w2Npx2B7hZ](https://discord.gg/w2Npx2B7hZ)

## 💬 Support & community
## Support

- Issues (Python bindings):
[https://github.com/humemai/arcadedb-embedded-python/issues](https://github.com/humemai/arcadedb-embedded-python/issues)
- ArcadeDB Discord: [https://discord.gg/w2Npx2B7hZ](https://discord.gg/w2Npx2B7hZ)
- Benchmark issues: [https://github.com/humemai/arcadedb-embedded-python/issues](https://github.com/humemai/arcadedb-embedded-python/issues)
- Bindings issues: [https://github.com/ArcadeData/arcadedb-python/issues](https://github.com/ArcadeData/arcadedb-python/issues)

## 📄 License
## License

Both upstream ArcadeDB (Java) and this ArcadeDB Embedded Python project are licensed
Both upstream ArcadeDB (Java) and the Python bindings are licensed under Apache 2.0, fully open and free for everyone, including commercial use.

Arcade Data, the company behind ArcadeDB, has [committed in writing](https://arcadedb.com/blog/open-source-forever-why-arcadedb-will-never-change-its-license/) to keeping the engine Apache 2.0, and HumemAI, the company behind this package, makes the same commitment for the Python bindings.
under Apache 2.0, fully open and free for everyone, including commercial use.
Arcade Data, the company behind ArcadeDB, has [committed in writing](https://arcadedb.com/blog/open-source-forever-why-arcadedb-will-never-change-its-license/) to keeping the engine Apache 2.0, and HumemAI makes the same commitment for the Python bindings.
12 changes: 6 additions & 6 deletions bindings/python/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ArcadeDB Python Bindings

> **Moved: the Python bindings now live in [ArcadeData/arcadedb-python](https://github.com/ArcadeData/arcadedb-python).** Install `arcadedb` (the native build, the default) or `arcadedb-jvm` (the JVM build); both use `import arcadedb`. [Which package?](https://github.com/ArcadeData/arcadedb-python/blob/main/docs/modules/ROOT/pages/which-package.adoc) explains the choice. The first releases of the new packages are 26.11.1, starting as pre-releases (`pip install --pre arcadedb`). `arcadedb-embedded` and `import arcadedb_embedded` are deprecated: `arcadedb-embedded` will get a last release that installs `arcadedb`. Report bindings issues and send bindings pull requests to the new repository. This repository will be archived; the benchmark tooling stays here for now.
> **Moved: the Python bindings now live in [ArcadeData/arcadedb-python](https://github.com/ArcadeData/arcadedb-python).** Install `arcadedb` (the native build, the default) or `arcadedb-jvm` (the JVM build); both use `import arcadedb`. [Which package?](https://github.com/ArcadeData/arcadedb-python/blob/main/docs/modules/ROOT/pages/which-package.adoc) explains the choice. The first releases of the new packages are 26.11.1, starting as pre-releases (`uv add --pre arcadedb`). `arcadedb-embedded` and `import arcadedb_embedded` are deprecated: `arcadedb-embedded` will get a last release that installs `arcadedb`. Report bindings issues and send bindings pull requests to the new repository. This repository will be archived; the benchmark tooling stays here for now.

Native Python bindings for ArcadeDB - the multi-model database that supports Graph, Document, Key/Value, Search Engine, Time Series, and Vector models.

Expand All @@ -10,7 +10,7 @@ Native Python bindings for ArcadeDB - the multi-model database that supports Gra

## 📚 Documentation

**[📖 Read the Full Documentation →](https://docs.humem.ai/arcadedb/latest)**
**[📖 Read the Full Documentation →](https://docs.arcadedb.com/arcadedb-python/)**

---

Expand All @@ -19,7 +19,7 @@ Native Python bindings for ArcadeDB - the multi-model database that supports Gra
### Installation

```bash
uv add arcadedb-embedded # or: pip install arcadedb-embedded
uv add arcadedb-embedded # deprecated; new projects use: uv add --pre arcadedb
```

**Requirements:**
Expand Down Expand Up @@ -52,7 +52,7 @@ with arcadedb.create_database("./mydb") as db:
print(f"Name: {record.get('name')}")
```

**[👉 See full tutorial](https://docs.humem.ai/arcadedb/latest/getting-started/quickstart/)**
**[👉 See full tutorial](https://docs.arcadedb.com/arcadedb-python/quickstart)**

---

Expand Down Expand Up @@ -179,8 +179,8 @@ Both upstream ArcadeDB (Java) and this ArcadeDB Embedded Python project are lice

## 🔗 Links

- **Documentation**: <https://docs.humem.ai/arcadedb/latest/>
- **PyPI**: <https://pypi.org/project/arcadedb-embedded/>
- **Documentation**: <https://docs.arcadedb.com/arcadedb-python/>
- **PyPI**: <https://pypi.org/project/arcadedb/> (`arcadedb-embedded` is deprecated)
- **GitHub**: <https://github.com/humemai/arcadedb-embedded-python>
- **ArcadeDB Main Docs**: <https://docs.arcadedb.com>
- **Issues**: <https://github.com/humemai/arcadedb-embedded-python/issues>
2 changes: 1 addition & 1 deletion bindings/python/docs/api-access-methods.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Direct JVM method calls via JPype for embedded/local runtime access.
- **Transport**: Direct JVM method calls (no network)
- **Performance**: Fastest (no serialization/network overhead)
- **Use Cases**: Single-process applications, high-performance scenarios
- **Setup**: Nothing beyond `pip install arcadedb-embedded`: no server, no Java installation
- **Setup**: Nothing beyond `uv add arcadedb`: no server, no Java installation

### Example

Expand Down
2 changes: 1 addition & 1 deletion bindings/python/docs/api/database.md
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,7 @@ vertices and no column convention for them is fixed here.

**Raises:**

- `ImportError`: pyarrow is not installed (`pip install 'arcadedb-embedded[arrow]'`)
- `ImportError`: pyarrow is not installed (`uv add 'arcadedb[arrow]'`)
- `ValueError`: no columns, duplicate or non-string column names, a `batch_size` that is
not a positive integer, or `parallel` with a vertex type
- `TypeError`: a column type with no mapping (time of day, duration, map), a type that
Expand Down
2 changes: 1 addition & 1 deletion bindings/python/docs/api/results.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ sims = emb @ query_vector # immediately usable
### `to_polars(batch_size: int = 25_000, columns: Optional[Sequence[str]] = None)`

Bulk-materialize all rows as a `polars.DataFrame`, through `to_arrow()`. Requires polars
and pyarrow (`pip install 'arcadedb-embedded[polars]'`). Everything said for `to_arrow()`
and pyarrow (`uv add 'arcadedb[polars]'`). Everything said for `to_arrow()`
holds: nulls keep their column type, a `DECIMAL` column is a Polars `Decimal`, and a
`DATE` or `DATETIME` column is `Datetime("ms")`, the precision the columnar bridge
carries.
Expand Down
2 changes: 1 addition & 1 deletion bindings/python/docs/benchmarks/running.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ scripts, every adapter, the image pins, the corpus recipes, and the gates. This
one lane end to end and says what to expect if you run it somewhere other than the bench
host.

!!! warning "This is not a `pip install` benchmark"
!!! warning "This is not an install-and-run benchmark"
The harness drives Docker directly. It starts a client container and, for a served
engine, a sibling server container on a cell network, gives both the same CPU set,
reads their cgroups back, and sizes their disks from the daemon. It needs Docker, a
Expand Down
2 changes: 1 addition & 1 deletion bindings/python/docs/development/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ The Python binding is distributed as a **single, self-contained package** (`arca
- **Zero Configuration**: No external Java installation required.

```python
# pip install arcadedb-embedded
# uv add arcadedb
import arcadedb_embedded as arcadedb

db = arcadedb.create_database("./mydb")
Expand Down
2 changes: 1 addition & 1 deletion bindings/python/docs/development/ci-setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ Every `uses:` is pinned to a full commit SHA with a `# vX.Y.Z` comment (enforced

### Python tooling in the workflows

The workflows follow the project rule for Python tooling: no `pip install` and no `uv pip` anywhere. The Docker wrappers of the benchmark examples `07` to `12` follow it too: they run the example with `uv run --no-project --python <interpreter> --with <package> ... python bench_exec.py <script>`, and `examples/bench_exec.py` prints the interpreter and every installed package version (`[bench-env]` lines) before it replaces itself with `python -u <script>`. The Milvus runner image fills its uv cache at build time, and its runs use `--offline`. One-off tools run with `uvx` at an exact version (`bandit`, `pip-audit`, `mkdocs` with its plugins, `mike`). The inline `pyyaml` check in `lint-workflows.yml` runs with `uv run --no-project --with pyyaml==...`. The test jobs run `uv run --no-project --python <matrix version> --with <built wheel> --with-requirements <file> ...`, so the wheel and its test packages live in a throwaway environment and nothing is installed into the runner's interpreter. The example jobs do the same through a throwaway uv project (`uv run --project <dir> --python <matrix version> --with <built wheel> ...`) that the "Install example dependencies" step writes to `$RUNNER_TEMP`. The macOS and Windows wheel builds (`scripts/build-native.sh`) need a Python with the `build` module on `PATH`, so those steps run `bash ./scripts/build.sh` under `uv run --with build --with wheel --with setuptools`. That project declares the PyTorch CPU index with `explicit = true` and pins only `torch` to it through `[tool.uv.sources]`, so torch gets its CPU build from there and every other package comes from PyPI. The project is needed because `--no-project` reads no `[tool.uv.sources]` and a requirements file cannot mark an index explicit. Do not set `UV_INDEX` or `UV_INDEX_STRATEGY=unsafe-best-match` instead: uv then asks the PyTorch index about every package, and a PyTorch outage fails jobs that do not need torch (503 on `/whl/cpu/rich/` and `/whl/cpu/h11/`, #401). The examples job also sets `UV_HTTP_RETRIES=6` (uv's default is 3) to ride out a brief index outage. The Docker build of the Linux wheels (`scripts/Dockerfile.build`) installs nothing into the image's interpreter either: the `python-builder` stage runs `uv build --wheel`, which creates an isolated environment from the `[build-system] requires` in `pyproject.toml`, and the `tester` stage runs its smoke script with `uv run --no-project --with /tmp/*.whl --with pytest --with pytest-cov`.
The workflows follow the project rule for Python tooling: no `pip` and no `uv pip` anywhere. The Docker wrappers of the benchmark examples `07` to `12` follow it too: they run the example with `uv run --no-project --python <interpreter> --with <package> ... python bench_exec.py <script>`, and `examples/bench_exec.py` prints the interpreter and every installed package version (`[bench-env]` lines) before it replaces itself with `python -u <script>`. The Milvus runner image fills its uv cache at build time, and its runs use `--offline`. One-off tools run with `uvx` at an exact version (`bandit`, `pip-audit`, `mkdocs` with its plugins, `mike`). The inline `pyyaml` check in `lint-workflows.yml` runs with `uv run --no-project --with pyyaml==...`. The test jobs run `uv run --no-project --python <matrix version> --with <built wheel> --with-requirements <file> ...`, so the wheel and its test packages live in a throwaway environment and nothing is installed into the runner's interpreter. The example jobs do the same through a throwaway uv project (`uv run --project <dir> --python <matrix version> --with <built wheel> ...`) that the "Install example dependencies" step writes to `$RUNNER_TEMP`. The macOS and Windows wheel builds (`scripts/build-native.sh`) need a Python with the `build` module on `PATH`, so those steps run `bash ./scripts/build.sh` under `uv run --with build --with wheel --with setuptools`. That project declares the PyTorch CPU index with `explicit = true` and pins only `torch` to it through `[tool.uv.sources]`, so torch gets its CPU build from there and every other package comes from PyPI. The project is needed because `--no-project` reads no `[tool.uv.sources]` and a requirements file cannot mark an index explicit. Do not set `UV_INDEX` or `UV_INDEX_STRATEGY=unsafe-best-match` instead: uv then asks the PyTorch index about every package, and a PyTorch outage fails jobs that do not need torch (503 on `/whl/cpu/rich/` and `/whl/cpu/h11/`, #401). The examples job also sets `UV_HTTP_RETRIES=6` (uv's default is 3) to ride out a brief index outage. The Docker build of the Linux wheels (`scripts/Dockerfile.build`) installs nothing into the image's interpreter either: the `python-builder` stage runs `uv build --wheel`, which creates an isolated environment from the `[build-system] requires` in `pyproject.toml`, and the `tester` stage runs its smoke script with `uv run --no-project --with /tmp/*.whl --with pytest --with pytest-cov`.

### `deploy-python-docs.yml`

Expand Down
Loading
Loading