ArcadeDB Python Bindings¶
-
Production Ready
Native Python bindings for ArcadeDB with comprehensive embedded/server coverage
- Status: ✅ Production Ready
- Tests: ✅ Full suite green on every platform build
-
Pure Python API
Pythonic interface to ArcadeDB's multi-model database
-
Multi-Model Database
Graph, Document, Key/Value, Vector, Time Series in one database
-
High Performance
Direct JVM integration via JPype for maximum speed
What is ArcadeDB?¶
ArcadeDB is a next-generation multi-model database that supports:
- Graph: Native property graphs with vertices and edges
- Document: Schema-less JSON documents
- Key/Value: Fast key-value pairs
- Vector: Embeddings with HNSW (JVector) similarity search
- Time Series: Temporal data with efficient indexing
- Search Engine: Full-text search with Lucene
Why Python Bindings?¶
These bindings provide native Python access to ArcadeDB's full capabilities with two access methods:
Embedded Engine (DSL-first)¶
- Direct JVM Integration: Run database directly in your Python process via JPype
- Best Performance: No network overhead, direct method calls
- Use Cases: Single-process applications, high-performance scenarios
- Recommended style: SQL/OpenCypher via
db.command(...)anddb.query(...) - Example:
HTTP API (Server Mode)¶
- Remote Access: HTTP REST endpoints when server is running
- Multi-Language: Any language can connect via HTTP
- Use Cases: Multi-process applications, web services, remote access
- Example:
Both APIs can be used simultaneously on the same server instance; see Access Methods and Server Mode.
When to run the official server distribution instead
In-process server mode ties the server's lifetime to your Python process. For a database that outlives any one client, or for HA/replication and TLS, run the standalone ArcadeDB server.
Additional Features¶
- Multiple Query Languages: SQL and OpenCypher
- ACID Transactions: a commit survives a process crash; with
arcadedb.txWalFlush=1it also survives a power cut (see Durability) - Type Safety: Strong Python type handling and clear errors
Current Ingest Guidance¶
The bindings are SQL/Cypher-first, but the recommended ingest path depends on what you are doing.
- For normal application code, prefer SQL/OpenCypher through
db.command(...)anddb.query(...). - For file-driven imports or restore flows, use SQL
IMPORT DATABASEor the narrowdb.import_documents(...)wrapper when you specifically need document-file import. - For bulk document ingest from Python, prefer
db.insert_many(...), which crosses the FFI boundary once per batch; addparallel=Trueon a type created with as many buckets as the async executor has writers, or a multiple (CREATE DOCUMENT TYPE T BUCKETS n, ArcadeData/arcadedb#8478); on a laptop's 4 performance cores (engineb22b5e9954, 6 runs per arm) it was 1.11x to 1.14x faster than the synchronous mode at 1, 3, 4, and 8 buckets alike. - The async executor's SQL command path is not a bulk-ingest path. Before 26.10.1,
async_executor().command(...)could silently drop records above parallel level 1 (ArcadeData/arcadedb#7615, fixed in #7625); see Bulk Ingest Recommendation. - For bulk graph ingest from Python, prefer
GraphBatch.
Features¶
Core Features
- 🚀 Embedded Mode - Direct database access in Python process
- 🌐 Server Mode - Optional in-process HTTP server with Studio UI
- 📦 Self-contained - All JARs and JRE bundled
- 🔄 Multi-model - Graph, Document, Key/Value, Vector, Time Series
- 🔍 Multiple languages - SQL and OpenCypher
Advanced Features
- ⚡ High performance - Direct JVM integration via JPype
- 🔒 ACID transactions - durable to a process crash by default, to a power cut with
arcadedb.txWalFlush=1 - 🎯 Vector storage - HNSW (JVector) indexing for embeddings
- 📥 Data import - CSV, XML, and ArcadeDB JSONL
- 🔎 Full-text search - Lucene integration
Quick Example¶
import arcadedb_embedded as arcadedb
with arcadedb.create_database("./mydb") as db:
db.command("sql", "CREATE DOCUMENT TYPE Person")
db.command("sql", "CREATE PROPERTY Person.name STRING")
db.command("sql", "CREATE PROPERTY Person.age INTEGER")
with db.transaction():
db.command("sql", "INSERT INTO Person SET name = ?, age = ?", "Alice", 30)
result = db.query("sql", "SELECT FROM Person WHERE age > 25")
for record in result:
print(f"Name: {record.get('name')}")
Resource Management
Always use context managers (with statements) for automatic resource cleanup!
Package Coverage¶
These bindings cover the parts of ArcadeDB's Java API most relevant to Python developers:
| Module | Status | Description |
|---|---|---|
| Core Operations | ✅ Supported | Database, queries, transactions |
| Schema Management | ✅ Supported | Types, properties, indexes |
| Server Mode | ✅ Supported | HTTP server, Studio UI, database management |
| Vector Search | ✅ Supported | HNSW (JVector) indexing, similarity search |
| Data Import | ✅ Supported | CSV, XML, and ArcadeDB JSONL |
| Data Export | ✅ Supported | JSONL; CSV for query results |
| Graph API | ✅ Supported | SQL and OpenCypher, plus record wrappers |
See Java API Coverage for detailed comparison.
Benchmarks¶
ArcadeDB is measured against the engines you would otherwise reach for, on one machine, one job at a time, with every timed query's answer compared across engines before any latency is published. The results live on the project page; the Benchmarks section documents the protocol, the answer checking, how to run a lane yourself, and how to read the output.
Distribution¶
We provide a single, self-contained package that works on all major platforms:
| Platforms | Package Name | Size | What's Included |
|---|---|---|---|
| linux/amd64, linux/arm64, darwin/arm64, windows/amd64 | arcadedb-embedded |
~69 MiB wheel, ~96 MiB installed | Full ArcadeDB + Bundled JRE + Studio UI |
The package uses the standard import:
No Java Installation Required!
The package includes a bundled Java 25 Runtime Environment (JRE) optimized for ArcadeDB. You do not need to install Java separately on your system.
Getting Started¶
-
Installation instructions
-
Get up and running in 5 minutes
-
Comprehensive guide to all features
-
Detailed API documentation
Requirements¶
- Python: 3.10 to 3.14 (CI runs all five on every supported platform)
- OS: Linux (x86_64, ARM64), macOS (Apple Silicon), or Windows (x86_64)
Self-Contained
Everything needed to run ArcadeDB is included in the wheel. Current Linux x86_64 package metadata and local installs are in this ballpark, with small variation by platform, version, and filesystem:
- Bundled JRE (Platform-specific Java 25 runtime trimmed with jlink to only what's required for ArcadeDB, ~63 MiB uncompressed)
- ArcadeDB JARs (~33 MiB uncompressed)
- Wheel download (~69 MiB compressed)
- Installed package on disk (~96 MiB)
- JPype (Bridge between Python and the bundled JVM)
Community & Support¶
- PyPI: arcadedb-embedded
- GitHub: humemai/arcadedb-embedded-python
- Issues: Report bugs
- ArcadeDB Docs: docs.arcadedb.com
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.