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.5.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.5.0.tar.gz (445.1 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.5.0-cp313-cp313-win_amd64.whl (4.6 MB view details)

Uploaded CPython 3.13Windows x86-64

apexbase-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

apexbase-0.5.0-cp313-cp313-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

apexbase-0.5.0-cp312-cp312-win_amd64.whl (4.6 MB view details)

Uploaded CPython 3.12Windows x86-64

apexbase-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

apexbase-0.5.0-cp312-cp312-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

apexbase-0.5.0-cp311-cp311-win_amd64.whl (4.6 MB view details)

Uploaded CPython 3.11Windows x86-64

apexbase-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

apexbase-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

apexbase-0.5.0-cp310-cp310-win_amd64.whl (4.6 MB view details)

Uploaded CPython 3.10Windows x86-64

apexbase-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

apexbase-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

apexbase-0.5.0-cp39-cp39-win_amd64.whl (4.6 MB view details)

Uploaded CPython 3.9Windows x86-64

apexbase-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

apexbase-0.5.0-cp39-cp39-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for apexbase-0.5.0.tar.gz
Algorithm Hash digest
SHA256 765f6b1dc35e0ffb9851396d481caa5a2bd2ba203d0f946c8c077128cceb22f9
MD5 6122fe9db4ac04d0884cade03b882326
BLAKE2b-256 deeef4b93ae917cb2d55745522bf4e735fec12638fadc87761336a152801560d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: apexbase-0.5.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 4.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.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5bc666ccab5f60bcaf48849aabd00b7e95755bd1b113866f3b8d4013cc884dcf
MD5 43b00682d6ad36370f0b6a7505afe5b8
BLAKE2b-256 5825c9d1c7f57dc8601add28e1b5cf4d34b238c11a1ac9f64467fc874e1d6a98

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3b96dc57657775c6e9c42b67b1ba0a632fa42b25b53ea2373f6d87b16a4c3796
MD5 d6495c8d51a1e0b2586bbdc560f982dd
BLAKE2b-256 c0924bf569252b6508cb7fae478bf980cd8a3adf44f2bff3d1fedaa404af470d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f586d10de26c14dfeb078df3e926579170a6e9e1c24648624b562b62b0eed08
MD5 9a2cb083dcf89e3f2beb40fddd908ba3
BLAKE2b-256 a9aac9cbd433af1d004e38d3ca1fb233a9fc0cfa187f13bc2f183cc02d86c260

See more details on using hashes here.

File details

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

File metadata

  • Download URL: apexbase-0.5.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 4.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.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0bdd2c90d9fc66fa891cd9cd18b469a6a82bbae5e3d8f82b257419f67bc0fb00
MD5 f8cb37a2c425ed467b9497df5378587f
BLAKE2b-256 386574f7aa37b8201779b5640f20f49c60ddaffd6a640aee1688431ba7b45478

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2accbebfd4a50fd7fa1e28c8a7ce5b7fba500bf5a021bfb21d55c57f4a0f5979
MD5 4c1cd64e4d9d2dc522241d7854cff7d0
BLAKE2b-256 cc4bf9d48ae4703aea6d42bfdc82e65e9bf640acb39cc259094af85c188e2d7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f5408fadb10c1ce0c830f3a0fdacec54fc7b538a5376a297fc9c6121c06e130
MD5 ee3e46bd3b2862ff48cd10528089afc9
BLAKE2b-256 2c3bef5acedc5564e199f0229f7a8f8d7b5a182cbad95342344c71ce09dd00c9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: apexbase-0.5.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 4.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.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6f10df2ef32591fa23faeb25dc40f6c0877e903dbecf0a0ab2a76ee1158afbce
MD5 535a59d2c57b196dc89f61d8e211c071
BLAKE2b-256 c8f40a6caa12c5cba0b18d1628c0402d10790fce07d2b4b5d21ceb37cc6dd94e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fb2f3df2b92c3098cfc57f6c2fec024a415309306c7788017d8072f01d04d4bd
MD5 9b0fe64591838d8656260f9c756f4a4f
BLAKE2b-256 13a44a7ef8d1c8051900970195313f23d2a9df8b17809a655515bc5f884fe3a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db94d5e71ec4287486d2f1b65f71195628cdce70bbf6a9ab1f5dd454bc666ff9
MD5 fbd9bfda148a190803fb8dd7d64118c2
BLAKE2b-256 2022dc7ca6fa55793a5f7eb571e1e25a8f1111fc315876164ba0d9f55ca3b178

See more details on using hashes here.

File details

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

File metadata

  • Download URL: apexbase-0.5.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 4.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.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b1f9f1dd9113f83013d534c25765dd22f06273b19fda501f8bf36c5148bd2b5b
MD5 2d9a298bebee8e3107eaf834ebe7e982
BLAKE2b-256 2a74ec9c91e5d5ac620ebba8195f6960d765905bd677079c33727547d946914f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 77a7a31d10fd4031dbc749bae2b983518688aca117e944b4da48e384afd192d0
MD5 7e69824b197af11fb48af0699cc7fea2
BLAKE2b-256 3d3f44a0811e5c39f788d26a56dc27a9a75ba45035e4a5c546782ce978e8a9bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b520845b1ed3ddf02d98d065bb14dbac203f98ccfbd4f7a7e536d3e8c7532e6
MD5 5ebe606e6a55128aeba891348e51a1c5
BLAKE2b-256 edcf67cb17240b63b29f662d43836bbf3430323389924a18b6341156b1cc0813

See more details on using hashes here.

File details

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

File metadata

  • Download URL: apexbase-0.5.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 4.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.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1b3f0cd611c41dd007fa5961a05d5e57d0a21cb2b81f08f6ecee567e45c07417
MD5 1e69cf08c71f71bf273e46b1a713d6bd
BLAKE2b-256 a4568a50bb0a1b277f231b506a7ce1ef910dc5a4c1987045790b62d4a88cbad9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7b585a318665eefcdb832dfa26f199212158cd8a62d871aa919fdb21e1d578d1
MD5 a46a55767ede2880011d919ac50f61e4
BLAKE2b-256 a5ebe97b3c05cbe861bf8ff3f224f28bea8c4f2cb43b6fc88f687a12dab0231b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for apexbase-0.5.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2288e682d541e01bd7572a683ee739a9e8f0703e073f1c85422983187010f6c9
MD5 a091d851f628262417a94c3877697000
BLAKE2b-256 689d19da2b58e2377854c6d4a9c77222df7c88d2e7471e673afa8b05a39f75a7

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