Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
2231dc5
feat: Add Python bindings for ArcadeDB embedded database
tae898 Nov 3, 2025
fee2791
chore: update CI workflows to skip Python bindings changes and ensure…
robfrank Nov 5, 2025
d1d82b3
Potential fix for code scanning alert no. 818: Workflow does not cont…
robfrank Nov 5, 2025
756cc5e
Potential fix for code scanning alert no. 819: Workflow does not cont…
robfrank Nov 5, 2025
0463166
chore(deps): bump actions/download-artifact from 4.1.8 to 6.0.0
dependabot[bot] Nov 5, 2025
eaf6dfb
chore(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0
dependabot[bot] Nov 5, 2025
7117845
chore(deps): bump actions/setup-java from 4.6.0 to 5.0.0
dependabot[bot] Nov 5, 2025
f9f3425
chore(deps): bump actions/download-artifact from 4.1.8 to 6.0.0 [skip…
mergify[bot] Nov 5, 2025
b714846
chore(deps): bump actions/setup-java from 4.6.0 to 5.0.0 [skip ci]
mergify[bot] Nov 5, 2025
b7c078f
chore(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0 [skip ci]
mergify[bot] Nov 5, 2025
cbda1df
chore(deps): bump actions/checkout from 5.0.0 to 6.0.0
dependabot[bot] Nov 23, 2025
b3cc437
chore(deps): bump actions/checkout from 5.0.0 to 6.0.0 [skip ci]
mergify[bot] Nov 24, 2025
90c4711
chore(deps): bump actions/setup-python from 6.0.0 to 6.1.0
dependabot[bot] Nov 30, 2025
98ce19c
chore(deps): bump actions/setup-java from 5.0.0 to 5.1.0
dependabot[bot] Dec 7, 2025
b13a474
chore(deps): bump actions/checkout from 6.0.0 to 6.0.1
dependabot[bot] Dec 7, 2025
fb79a45
chore(deps): bump actions/setup-java from 5.0.0 to 5.1.0 [skip ci]
mergify[bot] Dec 8, 2025
8f3d521
chore(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0
dependabot[bot] Dec 14, 2025
553299b
chore(deps): bump actions/download-artifact from 6.0.0 to 7.0.0
dependabot[bot] Dec 14, 2025
12fba5f
chore(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 [skip ci]
mergify[bot] Dec 14, 2025
44a5eb0
chore(deps): bump docker/setup-buildx-action from 3.11.1 to 3.12.0
dependabot[bot] Dec 21, 2025
e49c1fd
ArcadeData/arcadedb#3094 refactor: remove old HNSW vector index suppo…
robfrank Jan 7, 2026
c7dc014
chore(deps): bump actions/checkout from 6.0.1 to 6.0.2
dependabot[bot] Jan 25, 2026
81ac250
chore(deps): bump actions/setup-java from 5.1.0 to 5.2.0
dependabot[bot] Jan 25, 2026
006a6e6
chore(deps): bump actions/checkout from 6.0.1 to 6.0.2 [skip ci]
mergify[bot] Jan 27, 2026
ff4f27d
chore(deps): bump actions/setup-python from 6.1.0 to 6.2.0
dependabot[bot] Jan 27, 2026
f15455a
chore(deps): bump actions/setup-python from 6.1.0 to 6.2.0 [skip ci]
mergify[bot] Jan 27, 2026
4b44799
Sync Python bindings and tests with upstream (ArcadeData/arcadedb#3270)
tae898 Jan 28, 2026
7844146
chore: another refactoring to simplify the function tree - removing C…
lvca Jan 30, 2026
5ee3fa9
chore(deps): bump actions/upload-artifact from 4.6.2 to 6.0.0
dependabot[bot] Feb 1, 2026
33c9778
chore(deps): bump actions/download-artifact from 4.1.8 to 7.0.0
dependabot[bot] Feb 2, 2026
8861adb
chore(deps): bump actions/download-artifact from 4.1.8 to 7.0.0 [skip…
mergify[bot] Feb 2, 2026
487a013
chore: fixed REUSE license
lvca Feb 10, 2026
46669c4
Enhance Python bindings for ArcadeDB (ArcadeData/arcadedb#3466)
tae898 Feb 17, 2026
42be83a
chore(deps): bump actions/upload-artifact from 6.0.0 to 7.0.0
dependabot[bot] Mar 1, 2026
87fc2fd
chore(deps): bump actions/download-artifact from 7.0.0 to 8.0.0
dependabot[bot] Mar 1, 2026
1f0252f
chore(deps): bump actions/upload-artifact from 6.0.0 to 7.0.0 [skip ci]
mergify[bot] Mar 3, 2026
d72b3e3
chore(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0
dependabot[bot] Mar 8, 2026
8568b3a
chore(deps): bump the github-actions group with 2 updates
dependabot[bot] Mar 13, 2026
ac4ea2a
chore(deps): bump the github-actions group with 2 updates [skip ci]
mergify[bot] Mar 13, 2026
749eb33
chore: pre-commit fix formatting
robfrank Mar 13, 2026
f40bc98
Update python bindings (ArcadeData/arcadedb#3709)
tae898 Mar 23, 2026
279ebfc
sync python bindings changes. (ArcadeData/arcadedb#3720)
tae898 Mar 25, 2026
fc44025
feat: update vector search parameters and improve documentation (Arca…
tae898 Mar 25, 2026
aad12f3
chore(deps): bump the github-actions group with 2 updates
dependabot[bot] Apr 12, 2026
ca3f168
Update the python bindings for the version `26.4.2` (ArcadeData/arcad…
tae898 Apr 27, 2026
fea5118
Fix Python workflow triggers (ArcadeData/arcadedb#4011)
tae898 Apr 28, 2026
5940e14
fix: arcadedb-embedded PyPI wheel will not install on manylinux_2_34_…
lvca Apr 30, 2026
f181571
fix formatting on python bidings (ArcadeData/arcadedb#4041)
robfrank May 1, 2026
4a63e6f
Improve Python bindings code quality (Codacy/Bandit cleanup) (ArcadeD…
robfrank May 7, 2026
3402278
Refactor build script and enhance vector handling in Python bindings …
tae898 May 13, 2026
c4e2167
chore(deps): bump the github-actions group with 5 updates
dependabot[bot] May 24, 2026
91b3307
chore(deps): bump the github-actions group with 5 updates [skip ci]
mergify[bot] May 24, 2026
0c47784
fix: resolve open CodeQL alerts (workflow permissions, ReDoS, path-in…
robfrank May 28, 2026
410a5e1
chore(deps): bump the github-actions group with 3 updates
dependabot[bot] Jun 7, 2026
45fd0c0
chore(deps): bump the github-actions group with 2 updates
dependabot[bot] Jun 21, 2026
278e818
chore(deps): bump actions/checkout from 6.0.3 to 7.0.0
dependabot[bot] Jun 21, 2026
282b75d
chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 [skip ci]
mergify[bot] Jun 21, 2026
bc061d9
chore(deps): bump the github-actions group with 2 updates [skip ci]
mergify[bot] Jun 21, 2026
1cd21da
chore(deps): bump the github-actions group with 4 updates
dependabot[bot] Jun 28, 2026
e3dd567
chore(deps): bump the github-actions group across 1 directory with 8 …
dependabot[bot] Jul 5, 2026
149ffcd
Update Python bindings: bulk-transport performance, embedded-only pac…
tae898 Jul 6, 2026
a820816
feat(ArcadeData/arcadedb#5000): populate Bolt ResultSummary counters …
robfrank Jul 6, 2026
7a7eefe
chore(deps): bump the github-actions group with 2 updates
dependabot[bot] Jul 8, 2026
62dc320
Update Python bindings from humemai/arcadedb-embedded-python (2026-07…
tae898 Jul 9, 2026
1316809
chore(deps): bump the github-actions group with 5 updates
dependabot[bot] Jul 19, 2026
5fc2e9c
build(deps): bump actions/setup-python from 6.3.0 to 7.0.0
dependabot[bot] Jul 26, 2026
dbc7866
build(deps): bump the github-actions group across 1 directory with 6 …
dependabot[bot] Jul 26, 2026
e267130
build(deps): bump the github-actions group across 1 directory with 6 …
mergify[bot] Jul 26, 2026
bbc5f26
fix(deps): raise vulnerable numpy and py7zr floors in python bindings…
robfrank Jul 31, 2026
d30465f
bindings/python: align max_connections default with engine ArcadeData…
robfrank Jul 31, 2026
dfd7051
fix(ArcadeData/arcadedb#5616): audit the python bindings' dependency …
robfrank Jul 31, 2026
af06257
fix(python): use the supported 'similarity' METADATA key in the vecto…
robfrank Aug 1, 2026
207285c
refactor(mcp) ArcadeData/arcadedb#5692: extract the MCP server into a…
robfrank Aug 2, 2026
2d68dd2
Update Python bindings for 26.8.1: server mode restored, ResultSet.to…
tae898 Aug 4, 2026
31ac45d
build(deps): bump the github-actions group with 2 updates
dependabot[bot] Aug 4, 2026
0bbee3f
build(deps): bump the github-actions group with 2 updates [skip ci]
mergify[bot] Aug 5, 2026
cea933f
chore(deps): bump actions/cache from 4.3.0 to 6.1.0
dependabot[bot] Aug 10, 2026
2ea680a
build(deps): bump the github-actions group with 2 updates
dependabot[bot] Aug 23, 2026
0c5e6c1
fix(ArcadeData/arcadedb#6757,ArcadeData/arcadedb#6758,ArcadeData/arca…
lvca Aug 26, 2026
bf40b13
fix: address the first review round on ArcadeData/arcadedb#6758-Arcad…
lvca Aug 26, 2026
f65a1ac
Update Python bindings: GraphBatch retry/cache knobs, importer on_row…
tae898 Aug 29, 2026
ff490c7
Update Python bindings: examples CI resilient to a third-party datase…
tae898 Aug 29, 2026
5ef7adb
chore(deps): bump actions/setup-java from 5.7.0 to 6.0.0
dependabot[bot] Aug 30, 2026
2dbee0c
chore(deps): bump actions/setup-java from 5.7.0 to 6.0.0 [skip ci]
mergify[bot] Aug 30, 2026
cc3eae8
chore(deps): bump the github-actions group with 6 updates
dependabot[bot] Sep 13, 2026
2224552
fix: batch of 5 simple bugs across bindings, server, bolt, graphql, g…
lvca Sep 14, 2026
18e43e3
fix: address CI review findings on PR ArcadeData/arcadedb#7606
lvca Sep 14, 2026
770616d
fix: address CodeRabbit findings on PR ArcadeData/arcadedb#7606
lvca Sep 14, 2026
6467efa
fix: address claude-review nitpicks on PR ArcadeData/arcadedb#7606
lvca Sep 14, 2026
809cffc
fix: satisfy Codacy's pydocstyle D205/D209/D213/D415 on the two new r…
lvca Sep 14, 2026
cdad08b
build(deps): bump the github-actions group with 4 updates
dependabot[bot] Sep 20, 2026
7b3009c
fix(python): repair the examples broken by ArcadeData/arcadedb#8625, …
robfrank Oct 2, 2026
ffd3383
fix(ArcadeData/arcadedb#7883): make AsyncExecutor.wait_completion(0) …
robfrank Oct 2, 2026
a41b3a4
fix(ArcadeData/arcadedb#7882): roll back insert_many and GraphBatch.c…
robfrank Oct 3, 2026
c5b1cfe
chore: restore REUSE compliance and gate it in CI (ArcadeData/arcaded…
robfrank Oct 3, 2026
1bdf79d
fix: gRPC host bind, DATE under LocalDateTime, stored datetime zone, …
lvca Oct 7, 2026
fff4bb1
style: isort import order in the transaction interrupt test
lvca Oct 7, 2026
9685510
review: do not roll back a transaction the context did not open
lvca Oct 7, 2026
24af194
Update Python bindings for 26.10.1: results that release the engine, …
tae898 Oct 9, 2026
a52ba40
chore(deps): bump the github-actions group with 6 updates
dependabot[bot] Oct 10, 2026
6eb10a8
fix(ArcadeData/arcadedb#9629,ArcadeData/arcadedb#9630,ArcadeData/arca…
lvca Oct 11, 2026
ab9a5c2
test(ArcadeData/arcadedb#9632): keep the bandit B104 suppression on t…
lvca Oct 11, 2026
912086a
review(ArcadeData/arcadedb#9629,ArcadeData/arcadedb#9630,ArcadeData/a…
lvca Oct 11, 2026
02df3d9
review(ArcadeData/arcadedb#9632): _config_key docstring in the module…
lvca Oct 11, 2026
91936be
style(ArcadeData/arcadedb#9629,ArcadeData/arcadedb#9630): import orde…
lvca Oct 11, 2026
df6df08
review(ArcadeData/arcadedb#9632): an IPv6 all-interfaces default (::)…
lvca Oct 11, 2026
c7d736c
review(ArcadeData/arcadedb#9629): log a lost partial-commit witness a…
lvca Oct 11, 2026
30e4425
review(ArcadeData/arcadedb#9629,ArcadeData/arcadedb#9630): warn once …
lvca Oct 11, 2026
1b734ce
review(ArcadeData/arcadedb#9632): resolve the listener host settings …
lvca Oct 11, 2026
dd6f056
fix(ArcadeData/arcadedb#9630): the bridge writes a Calendar as epoch …
lvca Oct 11, 2026
401abb9
test(ArcadeData/arcadedb#9629): check the wait requested, not the clo…
lvca Oct 11, 2026
6a5e808
Merge pull request ArcadeData/arcadedb#9739 from ArcadeData/worktree-…
lvca Oct 11, 2026
3a84a1c
fix(ArcadeData/arcadedb#9807,ArcadeData/arcadedb#9810,ArcadeData/arca…
lvca Oct 12, 2026
2988979
test(ArcadeData/arcadedb#9810,ArcadeData/arcadedb#9813): isort order …
lvca Oct 12, 2026
54f052f
test(ArcadeData/arcadedb#9810,ArcadeData/arcadedb#9814): an old inlin…
lvca Oct 12, 2026
0ddccea
docs(ArcadeData/arcadedb#9813): note the accepted window of a nested …
lvca Oct 12, 2026
1cfd629
fix(ArcadeData/arcadedb#9970): an interrupted nested begin() pops onl…
robfrank Oct 15, 2026
cc1bbb4
Renamed current release 26.10.2
lvca Oct 15, 2026
8a96bd8
Update Python bindings from humemai/arcadedb-embedded-python (2026-10…
tae898 Oct 16, 2026
8ff960a
fix: remote save() reports a vetoed write, openCypher list expression…
lvca Oct 16, 2026
2acf2ba
Merge pull request ArcadeData/arcadedb#10177 from ArcadeData/worktree…
lvca Oct 16, 2026
6c2dc2b
Update Python bindings from humemai/arcadedb-embedded-python (2026-10…
tae898 Oct 20, 2026
57be540
build(deps): bump the github-actions group with 5 updates (ArcadeData…
dependabot[bot] Oct 21, 2026
052e2a3
docs: design and plan for moving the Python bindings here
robfrank Oct 22, 2026
26943de
Import Python bindings history from ArcadeData/arcadedb@ee04bd202abce…
robfrank Oct 22, 2026
625b7b7
refactor: build from the repo root instead of the monorepo; vendor im…
robfrank Oct 22, 2026
9ba3751
feat: derive the ArcadeDB version from the bundled engine jar instead…
robfrank Oct 22, 2026
0134028
ci: run the bindings workflows standalone against arcadedata/arcadedb…
robfrank Oct 22, 2026
53a883e
style: apply black and isort across the moved sources
robfrank Oct 22, 2026
acc4a1c
docs: README for the standalone repository
robfrank Oct 22, 2026
b5d9529
test: collect the docs examples only when the docs site is present
robfrank Oct 22, 2026
69760c1
test: mark the version CLI test's subprocess use for Bandit
robfrank Oct 22, 2026
6c444e6
ci: build every platform from the one set of jars download-jars fetched
robfrank Oct 22, 2026
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
12 changes: 12 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# actionlint configuration, picked up automatically by the pre-commit hook (.pre-commit-config.yaml).
#
# The ignores below are the shellcheck findings the two workflows carried when they moved here from
# ArcadeData/arcadedb, scoped to the exact file and rule. They are style findings in `run:` scripts, not
# schema errors, and the list is meant to shrink: fix the script and delete its entry.
paths:
.github/workflows/test-python-bindings.yml:
ignore:
- 'shellcheck reported issue in this script: SC(2001|2010|2012|2086|2129):'
.github/workflows/test-python-examples.yml:
ignore:
- 'shellcheck reported issue in this script: SC(2010|2012|2086|2129|2188):'
26 changes: 26 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
version: 2

# Every update block carries `cooldown: default-days: 3`, so Dependabot will not
# propose a release until it has been public for three days: a compromised
# release is usually pulled well inside that window. Security updates ignore
# the cooldown and still open the moment an advisory lands.
updates:
# pyproject.toml is the package definition (`[tool.uv] managed = false`, no
# uv.lock), so it is tracked as a pip project rather than a uv one.
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: weekly
day: "sunday"
cooldown:
default-days: 3
open-pull-requests-limit: 10

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: weekly
day: "sunday"
cooldown:
default-days: 3
open-pull-requests-limit: 10
571 changes: 571 additions & 0 deletions .github/workflows/test-python-bindings.yml

Large diffs are not rendered by default.

727 changes: 727 additions & 0 deletions .github/workflows/test-python-examples.yml

Large diffs are not rendered by default.

64 changes: 64 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -218,3 +218,67 @@ __marimo__/

# Streamlit
.streamlit/secrets.toml
.superpowers/

# --- Python bindings (from ArcadeData/arcadedb bindings/python/.gitignore) ---
# SPDX-FileCopyrightText: Copyright © 2021-present Arcade Data Ltd (info@arcadedata.com)
# SPDX-License-Identifier: Apache-2.0

# Generated during build - do not commit
src/arcadedb_embedded/_version.py


# Build artifacts
dist/
build/
*.egg-info/
__pycache__/
*.pyc
*.pyo

# Virtual environments
.venv/
venv/
env/

# Testing
.pytest_cache/
.coverage
htmlcov/

# IDEs
.vscode/
.idea/
*.swp
*.swo
*~

# Logs
log/
*.log

# MkDocs
site/
README.old.md

# Jupyter Notebooks for internal testing
notebooks/

# local built jars
local-jars/
.runtime-cache/

# test databases
my_test_databases/

# auto-created by scripts/extract_version.py on every run
scripts/.dev_version_tracker.json

# Every directory under src/ is source, as in the root .gitignore (#10162): log/, dist/, build/, env/ above must not hide a
# package. Keep this block last: a pattern written below it wins. The output written inside src/ is restated after it
!src/**/
src/**/__pycache__/
src/**/*.egg-info/
# the JRE and the jars scripts/build-native.sh bundles into the package
src/arcadedb_embedded/jre/
src/arcadedb_embedded/jars/
30 changes: 30 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
repos:
- repo: https://github.com/psf/black
rev: 26.10.1
hooks:
- id: black
language_version: python3
- repo: https://github.com/pycqa/isort
rev: 9.0.2
hooks:
- id: isort
args: [--profile, black]
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
rev: v2.16.0
hooks:
- id: pretty-format-yaml
args:
- --autofix
- --indent=2
# Workflows are linted by actionlint, not reformatted (as upstream).
exclude: ^\.github/
- repo: https://github.com/scop/pre-commit-shfmt
rev: v3.14.1-1
hooks:
- id: shfmt
args: [-i, '4', -ci, -sr, -w]
# actionlint runs shellcheck over every `run:` block; per-file ignores live in .github/actionlint.yaml.
- repo: https://github.com/rhysd/actionlint
rev: v1.7.12
hooks:
- id: actionlint
195 changes: 193 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,193 @@
# arcadedb-python-bindings
ArcadeDB Python bindings
# ArcadeDB Python Bindings

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

**Status**: ✅ Production Ready | **Platforms**: 4 Supported

---

## 📚 Documentation

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

---

## 🚀 Quick Start

### Installation

```bash
uv add arcadedb-embedded # or: pip install arcadedb-embedded
```

**Requirements:**

- **Python 3.10 to 3.14** (CI runs all five on every supported platform). No Java installation required!
- **Supported Platforms**: Prebuilt wheels for **4 platforms**
- Linux: x86_64, ARM64
- macOS: Apple Silicon (ARM64)
- Windows: x86_64

### 5-Minute Example

```python
import arcadedb_embedded as arcadedb

# Create database (context manager for automatic open and close)
with arcadedb.create_database("./mydb") as db:
# Create schema (DDL)
db.command("sql", "CREATE DOCUMENT TYPE Person")
db.command("sql", "CREATE PROPERTY Person.name STRING")
db.command("sql", "CREATE PROPERTY Person.age INTEGER")

# Insert data (requires transaction)
with db.transaction():
db.command("sql", "INSERT INTO Person SET name = ?, age = ?", "Alice", 30)

# Query data
result = db.query("sql", "SELECT FROM Person WHERE age > 25")
for record in result:
print(f"Name: {record.get('name')}")
```

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

---

## ✨ Features

- ☕ **No Java Installation Required**: Bundled JRE (~63 MiB uncompressed)
- 🌍 **4 Platforms Supported**: Linux (x86_64, ARM64), macOS (ARM64), Windows (x86_64)
- 🚀 **Embedded Mode**: Direct database access in Python process (no network)
- 🌐 **Server Mode**: Optional in-process HTTP server with the Studio web UI: it costs ~8MB of wheel and nothing at runtime until you call `create_server()`
- 📦 **Self-contained**: All dependencies bundled (~69 MiB current Linux wheel)
- 🔄 **Multi-model**: Graph, Document, Key/Value, Vector, Time Series
- 🔍 **Multiple query languages**: SQL and OpenCypher
- ⚡ **High performance**: Direct JVM integration via JPype
- 🔒 **ACID transactions**: Full transaction support
- 🎯 **Vector storage**: Store and query vector embeddings with HNSW (JVector) indexing
- 📥 **Data import**: Built-in CSV and ArcadeDB JSONL import

---

## 📦 What's Inside

The `arcadedb-embedded` package is platform-specific and self-contained:

**Package Contents (the 26.10.1 Linux x86_64 wheel; varies by platform and version):**

- **Wheel size (compressed)**: ~69 MiB
- **ArcadeDB JARs (uncompressed)**: ~34 MiB across 64 JARs
- **Bundled JRE (uncompressed)**: ~63 MiB (platform-specific Java 25 runtime via jlink)
- **Installed package size**: ~97 MiB

The compressed wheel size is measured from `dist/*.whl`, and the installed package size
is measured from the extracted `site-packages/arcadedb_embedded/` directory.

Of that, the optional **server stack is 12 JARs, 8.58MB uncompressed**. [Server
Mode](https://docs.humem.ai/arcadedb/latest/guide/server/) breaks the cost down and
explains what you pay at runtime (nothing, until you start a server).

**Note**: Some JARs are excluded to optimize package size (e.g., gRPC wire protocol). See [`scripts/jar_exclusions.txt`](scripts/jar_exclusions.txt) for details.

Import: `import arcadedb_embedded as arcadedb`

---

## 🧪 Testing

Tests run against the built wheel via the uv project at the repo root. No
virtualenv activation is needed, and `uv run` works from anywhere in the repo:

```bash
# Run all tests
uv run pytest

# Run specific test file
uv run pytest tests/test_core.py -v
```

See [testing documentation](https://docs.humem.ai/arcadedb/latest/development/testing/) for detailed test documentation.

---

## 🔧 Building from Source (Advanced)

Linux uses Docker. macOS and Windows use a native Java 25+ JDK with jlink.

```bash
# Install uv (one-time)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Build for your current platform (auto-detected)
./scripts/build.sh
```

Built wheels will be in `dist/`. To test one, install it together with the
`test` extra into a virtual environment and run `pytest tests`.

**[Build instructions](https://docs.humem.ai/arcadedb/latest/getting-started/installation/#building-from-source)**

> **Developer Note:** See [build architecture docs](https://docs.humem.ai/arcadedb/latest/development/build-architecture/) for comprehensive documentation of the multi-platform build architecture, including how we achieve platform-specific JRE bundling across the supported platforms on GitHub Actions.

## Development

The ArcadeDB jars come from the `arcadedata/arcadedb` Docker image: `latest` by
default, which follows ArcadeDB's current snapshot, or the tag in `ARCADEDB_TAG`
to pin one (`ARCADEDB_TAG=26.11.1-SNAPSHOT ./scripts/build.sh`). The package
version is taken from the `arcadedb-engine-<version>.jar` in that image, so
`26.11.1-SNAPSHOT` builds `26.11.1.devN`. CI does the same, and also runs every
night so each new snapshot is tested. See [versioning strategy](https://docs.humem.ai/arcadedb/latest/development/release/#python-versioning-strategy) for details on development vs release mode handling.

## Origin

This code moved here from the `bindings/python` directory of
[ArcadeData/arcadedb](https://github.com/ArcadeData/arcadedb) at
`ee04bd202abce0183c6263a3c4d8a61a4d526960`, with its git history. Issue
references in imported commit messages point at `ArcadeData/arcadedb`.

---

## 📋 Package Structure

```bash
arcadedb_embedded/
├── async_executor.py # Asynchronous command/query + record execution
├── core.py # Database and DatabaseFactory
├── exceptions.py # ArcadeDBError exception
├── exporter.py # Data export (JSONL, CSV)
├── graph.py # Graph wrappers
├── graph_batch.py # GraphBatch high-throughput graph ingest wrapper
├── importer.py # Data import (CSV, XML, ArcadeDB JSONL)
├── __init__.py # Public API exports
├── jvm.py # JVM lifecycle management
├── _logging.py # Internal logging helpers
├── results.py # ResultSet and Result wrappers
├── schema.py # Schema management API
├── server.py # ArcadeDBServer for optional HTTP/Studio mode
├── transactions.py # TransactionContext manager
├── type_conversion.py # Python-Java type conversion utilities
└── vector.py # Vector search and HNSW (JVector) indexing
```

**[Architecture details](https://docs.humem.ai/arcadedb/latest/development/architecture/)**

---

## 🤝 Contributing

[See our contributing guidelines](https://docs.humem.ai/arcadedb/latest/development/contributing/)

## 📄 License

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

---

## 🔗 Links

- **Documentation**: <https://docs.humem.ai/arcadedb/latest/>
- **PyPI**: <https://pypi.org/project/arcadedb-embedded/>
- **GitHub**: <https://github.com/humemai/arcadedb-embedded-python>
- **ArcadeDB Main Docs**: <https://docs.arcadedb.com>
- **Issues**: <https://github.com/humemai/arcadedb-embedded-python/issues>
6 changes: 6 additions & 0 deletions REUSE.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version = 1

[[annotations]]
path = ["**/*.py","**/*.sh","**/*.md","**/*.y*ml",".git*","scripts/Dockerfile.build","scripts/jar_exclusions.txt","pyproject.toml","setup.py","src/java/**/*","tests/fixtures/**"]
SPDX-FileCopyrightText = "Copyright © 2021-present Arcade Data Ltd (info@arcadedata.com)"
SPDX-License-Identifier = "Apache-2.0"
Loading
Loading