Skip to main content

High-performance HTAP embedded database with Rust core and Python API

Project description

ApexBase

High-performance HTAP embedded database with Rust core and Python API

ApexBase is an embedded columnar database engineered for Hybrid Transactional/Analytical Processing (HTAP) workloads. It combines a high-throughput columnar storage engine written in Rust with an ergonomic Python API, delivering analytical query speed comparable to DuckDB while supporting fast transactional writes — all in a single .apex file with zero external dependencies.

✨ Features

  • 🚀 HTAP architecture — columnar V4 Row Group storage with delta writes for fast inserts and analytical scans
  • 📦 Single-file storage — custom .apex format, no server, no external dependencies
  • 🛠️ Full SQL support — DDL, DML, aggregations, GROUP BY, HAVING, ORDER BY, JOINs, sub-expressions
  • 🔍 Full-text search — built-in NanoFTS integration with fuzzy matching
  • 🐍 Python-native — zero-copy Arrow IPC bridge with Pandas / Polars / PyArrow
  • 💾 Compact storage — dictionary encoding for low-cardinality strings, ~45% smaller on disk
  • 🌐 Cross-platform — runs on Linux, macOS, and Windows (x86_64 & ARM64)
  • JIT compilation — Cranelift-based JIT for predicate evaluation
  • 🔒 Durability levels — configurable fast / safe / max with WAL support

📦 Installation

# Install from PyPI (Linux, macOS, Windows — Python 3.9–3.13)
pip install apexbase

# Build from source
maturin develop --release

🚀 Quick Start

Installation

pip install apexbase

Basic Usage

from apexbase import ApexClient

# Create a client
client = ApexClient("./data")

# Create a table (required before any data operations)
client.create_table("users")

# Store single record
client.store({"name": "Alice", "age": 30, "city": "Beijing"})

# Store multiple records
client.store([
    {"name": "Bob", "age": 25, "city": "Shanghai"},
    {"name": "Charlie", "age": 35, "city": "Beijing"}
])

# SQL query
results = client.execute("SELECT * FROM users WHERE age > 28")

# Convert to DataFrame
df = results.to_pandas()

# Close client
client.close()

Table Management

ApexBase requires explicit table creation before any data operations. Each table is stored as a separate .apex file in the data directory.

# Create a table (automatically becomes the active table)
client.create_table("users")

# Create a table with pre-defined schema (avoids type inference on first insert)
client.create_table("orders", schema={
    "order_id": "int64",
    "product": "string",
    "price": "float64",
    "paid": "bool"
})

# Switch between tables
client.use_table("users")

# Reopen an existing database
client2 = ApexClient("./data")
client2.use_table("users")  # Select an existing table

# List all tables
tables = client.list_tables()  # ["users", "orders"]

# Drop table (active table resets to None)
client.drop_table("orders")

Data Operations

import pandas as pd
import polars as pl
import pyarrow as pa

# From pandas DataFrame (table_name creates/selects the table automatically)
df = pd.DataFrame({"name": ["A", "B"], "age": [20, 30]})
client.from_pandas(df, table_name="users")

# From polars DataFrame
df_pl = pl.DataFrame({"name": ["C", "D"], "age": [25, 35]})
client.from_polars(df_pl, table_name="users")

# From PyArrow Table
table = pa.table({"name": ["E", "F"], "age": [28, 38]})
client.from_pyarrow(table, table_name="users")

# Columnar storage (fastest for bulk data, requires active table)
client.use_table("users")
client.store({
    "name": ["G", "H", "I"],
    "age": [22, 32, 42]
})

Query Operations

# Full SQL support (use your table name in FROM clause)
results = client.execute("SELECT name, age FROM users WHERE age > 25 ORDER BY age DESC LIMIT 10")

# WHERE expression (uses the active table)
results = client.query("age > 28")
results = client.query("name LIKE 'A%'")
results = client.query(where_clause="city = 'Beijing'", limit=100)

# Aggregation
agg = client.execute("SELECT COUNT(*), AVG(age), MAX(age) FROM users")
count = agg.scalar()  # Get single value

# Retrieve by _id (internal auto-increment ID)
record = client.retrieve(0)
records = client.retrieve_many([0, 1, 2])
all_data = client.retrieve_all()

Column Operations

# Add column
client.add_column("email", "String")

# Rename column
client.rename_column("email", "email_address")

# Drop column
client.drop_column("email_address")

# Get column type
dtype = client.get_column_dtype("age")

# List all fields
fields = client.list_fields()

SQL DDL (Data Definition Language)

ApexBase supports full SQL DDL operations. Tables created via SQL are automatically registered and become the active table:

# Create table via SQL (becomes the active table)
client.execute("CREATE TABLE employees")
client.execute("CREATE TABLE IF NOT EXISTS departments")  # No error if exists

# Add columns via SQL
client.execute("ALTER TABLE employees ADD COLUMN name STRING")
client.execute("ALTER TABLE employees ADD COLUMN age INT")

# Insert data via SQL
client.execute("INSERT INTO employees (name, age) VALUES ('Alice', 30)")
client.execute("INSERT INTO employees (name, age) VALUES ('Bob', 25), ('Charlie', 35)")

# Query the data
results = client.execute("SELECT * FROM employees WHERE age > 28")

# Drop table via SQL
client.execute("DROP TABLE employees")
client.execute("DROP TABLE IF EXISTS departments")  # No error if not exists

Multi-Statement SQL

You can execute multiple SQL statements in a single call by separating them with semicolons:

# Execute multiple DDL statements at once
client.execute("""
    CREATE TABLE IF NOT EXISTS products;
    ALTER TABLE products ADD COLUMN name STRING;
    ALTER TABLE products ADD COLUMN price FLOAT;
    INSERT INTO products (name, price) VALUES ('Laptop', 999.99)
""")

# Execute multiple INSERT statements
client.execute("""
    INSERT INTO products (name, price) VALUES ('Mouse', 29.99);
    INSERT INTO products (name, price) VALUES ('Keyboard', 79.99);
    INSERT INTO products (name, price) VALUES ('Monitor', 299.99)
""")

# Query results
results = client.execute("SELECT * FROM products ORDER BY price DESC")
print(results.to_pandas())

Full-Text Search

# Initialize FTS
client.init_fts(index_fields=["name", "city"], lazy_load=True)

# Search
ids = client.search_text("Alice")
records = client.search_and_retrieve("Beijing")
top_records = client.search_and_retrieve_top("keyword", n=10)

# Fuzzy search (tolerates typos)
ids = client.fuzzy_search_text("Alic")

# FTS stats
stats = client.get_fts_stats()

# Disable or drop FTS
client.disable_fts()
client.drop_fts()

ResultView Operations

results = client.execute("SELECT * FROM users")

# Convert to different formats
df = results.to_pandas()          # pandas DataFrame
pl_df = results.to_polars()       # polars DataFrame
arrow_table = results.to_arrow()  # PyArrow Table
dicts = results.to_dict()         # List of dicts

# Result properties
print(results.shape)       # (rows, columns)
print(results.columns)     # column names
print(len(results))        # row count

# Get single values
first_row = results.first()
ids = results.get_ids()    # numpy array
scalar = client.execute("SELECT COUNT(*) FROM users").scalar()

Context Manager Support

# Automatic cleanup with context manager
with ApexClient("./data") as client:
    client.create_table("mydata")
    client.store({"key": "value"})
    results = client.execute("SELECT * FROM mydata")
    # Client automatically closed on exit

📊 Performance Benchmark

ApexBase vs SQLite vs DuckDB (1M rows)

Three-way comparison with SQLite (v3.45.3) and DuckDB (v1.1.3).

Test Environment

Component Specification
Platform macOS 26.2 (arm64)
CPU Apple M1 Pro (10 cores)
Memory 32.0 GB
Python 3.11.10
ApexBase v0.6.0
SQLite v3.45.3
DuckDB v1.1.3
PyArrow 19.0.0

Dataset: 1,000,000 rows × 5 columns (name string, age int, score float, city string, category string)

Query Performance (average of 5 iterations, after 2 warmup runs)

Query ApexBase SQLite DuckDB vs Best Other
Bulk Insert (1M rows) 266ms 956ms 890ms 0.30x ✅ 3.3x faster
COUNT(*) 0.21ms 9.85ms 0.58ms 0.36x ✅ 2.8x faster
SELECT * LIMIT 100 0.17ms 0.12ms 0.46ms 1.4x slower
SELECT * LIMIT 10K 1.07ms 6.77ms 4.55ms 0.23x ✅ 4.3x faster
Filter (string eq) 1.04ms 38.6ms 1.64ms 0.64x ✅ faster
Filter (range BETWEEN) 19.2ms 168ms 92.6ms 0.21x ✅ 4.8x faster
GROUP BY (10 groups) 2.56ms 369ms 3.96ms 0.65x ✅ faster
GROUP BY + HAVING 2.53ms 348ms 3.71ms 0.68x ✅ faster
ORDER BY + LIMIT 1.55ms 52.6ms 5.79ms 0.27x ✅ 3.7x faster
Aggregation (5 funcs) 1.45ms 84.8ms 1.34ms ~1.0x ⚡ tied
Complex (Filter+Group+Order) 1.62ms 158ms 2.87ms 0.57x ✅ faster
Point Lookup (by ID) 0.064ms 0.053ms 4.03ms 1.2x slower
Insert 1K rows (incremental) 0.71ms 1.34ms 2.75ms 0.53x ✅ 1.9x faster

Key Takeaways:

  • Wins 10 of 13 benchmarks against both SQLite and DuckDB, ties 1
  • No metric loses to ALL competitors — every gap only trails one engine
  • Bulk insert throughput: 3.3x faster than both SQLite and DuckDB (columnar batch path)
  • Analytical scans: COUNT, range filters, ORDER BY+LIMIT — consistently faster
  • GROUP BY: Cached string dict indices + single-pass aggregation beats DuckDB (2.56ms vs 3.96ms)
  • Complex queries: Branchless BETWEEN+GROUP+ORDER beats DuckDB (1.62ms vs 2.87ms)
  • String filter: V4 in-memory scan beats DuckDB (1.04ms vs 1.64ms)
  • Incremental insert: V4 append row group — 1.9x faster than SQLite, 3.9x faster than DuckDB
  • Aggregation: ~1.0x tied with DuckDB (Arrow SIMD ceiling), 58x faster than SQLite
  • SELECT * LIMIT 100: 0.17ms — lazy ResultView + columnar transfer, beats DuckDB
  • Point Lookup: 0.064ms (1.2x vs SQLite's C-level tuples, 63x faster than DuckDB)

Reproduce: python benchmarks/bench_vs_sqlite_duckdb.py --rows 1000000

🔧 API Reference

ApexClient

Initialization

client = ApexClient(
    dirpath="./data",           # Data directory (default: current dir)
    drop_if_exists=False,       # Delete existing data on open
    batch_size=1000,            # Batch size for operations
    enable_cache=True,          # Enable query cache
    cache_size=10000,           # Cache size
    prefer_arrow_format=True,   # Prefer Arrow format for results
    durability="fast",          # Durability level: "fast" | "safe" | "max"
)

# Create clean instance (drop existing data)
client = ApexClient.create_clean("./data")

# Context manager
with ApexClient("./data") as client:
    ...

Table Management

Method Description
create_table(name, schema=None) Create a new table, optionally with pre-defined schema
drop_table(name) Drop a table
use_table(name) Switch to a table
list_tables() List all tables
current_table Property: get current table name

Data Storage

Method Description
store(data) Store data (dict, list, DataFrame, Arrow Table) into the active table
from_pandas(df, table_name=None) Import from pandas DataFrame (auto-creates table if table_name given)
from_polars(df, table_name=None) Import from polars DataFrame (auto-creates table if table_name given)
from_pyarrow(table, table_name=None) Import from PyArrow Table (auto-creates table if table_name given)

Data Retrieval

Method Description
retrieve(id) Get record by internal _id
retrieve_many(ids) Get multiple records by _id
retrieve_all() Get all records
execute(sql) Execute SQL query
query(where, limit) Query with WHERE expression
count_rows(table) Count rows in table

Data Modification

Method Description
replace(id, data) Replace a record
batch_replace({id: data}) Batch replace records
delete(id) or delete([ids]) Delete record(s)

Column Operations

Method Description
add_column(name, type) Add a column
drop_column(name) Drop a column
rename_column(old, new) Rename a column
get_column_dtype(name) Get column data type
list_fields() List all fields/columns

Full-Text Search

Method Description
init_fts(fields, lazy_load, cache_size) Initialize FTS
search_text(query) Search documents
fuzzy_search_text(query) Fuzzy search (tolerates typos)
search_and_retrieve(query, limit, offset) Search and return records
search_and_retrieve_top(query, n) Return top N results
get_fts_stats() Get FTS statistics
disable_fts() Disable FTS
drop_fts() Drop FTS index

Utility

Method Description
flush() Flush data to disk
set_auto_flush(rows, bytes) Set auto-flush thresholds
get_auto_flush() Get auto-flush configuration
estimate_memory_bytes() Estimate memory usage
close() Close the client

ResultView

Query results are returned as ResultView objects:

Method/Property Description
to_pandas(zero_copy=True) Convert to pandas DataFrame
to_polars() Convert to polars DataFrame
to_arrow() Convert to PyArrow Table
to_dict() Convert to list of dicts
scalar() Get single scalar value
first() Get first row
get_ids(return_list=False) Get record IDs
shape Property: (rows, columns)
columns Property: column names
__len__() Row count
__iter__() Iterate over rows
__getitem__(idx) Index access

📚 Documentation

Documentation entry point: docs/README.md

📄 License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apexbase-0.6.0.tar.gz (591.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

apexbase-0.6.0-cp313-cp313-win_amd64.whl (5.6 MB view details)

Uploaded CPython 3.13Windows x86-64

apexbase-0.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

apexbase-0.6.0-cp313-cp313-macosx_11_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

apexbase-0.6.0-cp312-cp312-win_amd64.whl (5.6 MB view details)

Uploaded CPython 3.12Windows x86-64

apexbase-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

apexbase-0.6.0-cp312-cp312-macosx_11_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

apexbase-0.6.0-cp311-cp311-win_amd64.whl (5.6 MB view details)

Uploaded CPython 3.11Windows x86-64

apexbase-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

apexbase-0.6.0-cp311-cp311-macosx_11_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

apexbase-0.6.0-cp310-cp310-win_amd64.whl (5.6 MB view details)

Uploaded CPython 3.10Windows x86-64

apexbase-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

apexbase-0.6.0-cp310-cp310-macosx_11_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

apexbase-0.6.0-cp39-cp39-win_amd64.whl (5.6 MB view details)

Uploaded CPython 3.9Windows x86-64

apexbase-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

apexbase-0.6.0-cp39-cp39-macosx_11_0_arm64.whl (5.5 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file apexbase-0.6.0.tar.gz.

File metadata

  • Download URL: apexbase-0.6.0.tar.gz
  • Upload date:
  • Size: 591.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for apexbase-0.6.0.tar.gz
Algorithm Hash digest
SHA256 927ee0a6dd4954fadf0273782d3d1d0896c53aac9bd6a7347784ecf01017e8a7
MD5 0867aa23d31cb6ffada2c8015e9bfa32
BLAKE2b-256 bb693ed56fa84d791af511ecb75d5094b7704114ac53436acee89176c0c07a42

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: apexbase-0.6.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 5.6 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for apexbase-0.6.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 74de5486e3311e8aaa941a4711cee24781dff8db319464eb717cde0cb8972863
MD5 8d9f9b8a890e3e5ae4be82683657e620
BLAKE2b-256 3ca38160b7a51340a52a7e223498ed7cfc4a4bbbebf54cb05cb29345be00f900

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 51cb019bd6f4be6cfe2ff705af31d809950675f078581b50e12b430de3548307
MD5 cff3dcfce85143fb4f55faf4eb1814a2
BLAKE2b-256 308210d557ac29abb011e6d4995bb0727503a70e28dabe113bee7cf33f523353

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 457ba1b9c623d9110b87612f161307e4c88aef0bbee974491cc9e3099767cfdc
MD5 c3cb3ee5667512ea269c0ebad5929d6d
BLAKE2b-256 be97db52ae7f83ec2841b018b92b1dc65cab1a32c1ee2c6e796721cfa82bc855

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: apexbase-0.6.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 5.6 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for apexbase-0.6.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0ea09dc4e8b3d4695c90a70d6b74910376f7485f1f24aec9189544ea0c53f0f8
MD5 f0be0cb7c3672ef00c03eac56fb83f4f
BLAKE2b-256 4b7fb0da2431e0c441e692b29d512bcf54243a87d57316ffd7ce90acfeba1414

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 28c1f3bb8a9a5eaecc81642c9919c4e13a6bfc24f9385b62367acac9740adf4a
MD5 fcfcddb63722189d6be254ace30bdd43
BLAKE2b-256 8471be7070a9696991094d4fb64c94543f940b3015722e7195b6254a036d7679

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7aeded6632cfcf3eaf6469e080c07988ead7cc2c73fca6edb1f50e4e223f00ef
MD5 7e92326424c97c9e1c0ba8a5f45e0dd1
BLAKE2b-256 0bf326d04fdfa080838bfbbb6b36e4ed935e1a334010fdbf1ea937d26bb39573

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: apexbase-0.6.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 5.6 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for apexbase-0.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cd890b25f45104d29a95894f6a3d1068f31db905f649248500e08979f199c392
MD5 cc66d83e5752e616769767beb345abef
BLAKE2b-256 faa1007001d423d93076378365722a6a9a82b6a5a7223a73ad8697e0cacd06ab

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e7c2774642e689a012e158f548b3b18353dc8e858b51bccbb587843d0992a95d
MD5 3e9716414408686462ac22ce062cba45
BLAKE2b-256 6ecc20a8238f39b398fd8d1308cac89e6d6a5b87777195f94a7644183c696155

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38511366b20260eb54312b0ad8da3f3b22228f02ea1d151c676704b71faa42c1
MD5 757124d6a7288d852a4fc696204182fe
BLAKE2b-256 d145db851a1321917dd49c6561e536337fc082294ff0b2652693c90409344881

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: apexbase-0.6.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 5.6 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for apexbase-0.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 449424b10c6e5e4f509bf1284e002718143df0856944c1c7247fe820b1cf6a34
MD5 8e7804d68125eef93a46a4c853a0aef0
BLAKE2b-256 11300a692e8dbcaafca050a15006746ba5c2f1ba7a017630eb1399e6aad40a0d

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0dbd2feb096b53912e9709061155fdde904d3823c52e41408d78a047cc28ac6b
MD5 0f6ead2c765ee7b07c0022e936cb9bed
BLAKE2b-256 95f7a4b703b23fa5179b882410e7a1057a4ee3739d86f13360da736724d75fb3

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2675e0ec6a9a90a8e7eef59739f962233c7e3a5aa8f7e0c8e487017ccbc7550d
MD5 10f47f772ca7e9a92c327fde91b225b8
BLAKE2b-256 190a97dda7995ca35590cf70bad087a68f0ff95f6f26cb3217ac924c396cea99

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: apexbase-0.6.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 5.6 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for apexbase-0.6.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 997c1c0f1c88e9ba224a3ea5a9bbcc638c92b59741e512abd1697fec112fe412
MD5 1f50c8dd32ece531bad90caf2907fb89
BLAKE2b-256 311da1d13b03399906ee9b0d63464fab1c1bdff71ed966a2a8e096ee4039b885

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 937e98fd501b01d930b993c5d2ed6181408ae46187f323157c9a7ea8f9bf1c74
MD5 149295a5fa0e2afc236a5d53b5555284
BLAKE2b-256 e6c1494443cfc6edaf8b62968e42577720c42a966bca98f7ed997b1ee1b84109

See more details on using hashes here.

File details

Details for the file apexbase-0.6.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for apexbase-0.6.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e4a1e911f665ef7a45881fa74c16b8c37920eb60811c9bfb0943f0c7b7ee1357
MD5 f241738952c30d19c6659344bd0ad937
BLAKE2b-256 0abf433a47da291924a8b814b3e137b39362c53278d7959b7d9c034f0870dfdb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page