License
Your use of this product is subject to the terms of use available at https://tabsdata.com/license.
Tabsdata: An Agent-Ready Data Engineering Platform
Tabsdata is a declarative publish-subscribe (pub/sub) server for tables. Functions declare the tables they read and the tables they write, and the server handles the rest: loading, processing, storing and moving. Everything the server knows, tables, versions, dependencies, definitions and execution history, is addressable through its API, which is what lets an AI agent drive it end to end.
The server derives the dependency graph from those declarations and triggers downstream functions when a new version of an upstream table is committed. There is no pipeline to wire end to end and no external scheduler, so answering a new request is a declaration against tables that already exist rather than a dataflow assembled from scratch.
Tables are immutable and versioned. A function run does not mutate a table, it commits a new version, and each run is recorded against the table versions it read and wrote. Lineage and provenance are a product of execution rather than a separate metadata pass, so any table, dataflow or run can be inspected or replayed as of any point in time.
Tabsdata has connectors to publish and subscribe tables from local files, S3, Azure Storage, MySQL/MariaDB, Oracle, PostgreSQL. It also provides a Connector Plugin API to write custom connectors.
Tables can be populated with external data or using data from other tables already existing in the Tabsdata server.
Tables can be manipulated using a TableFrame API (internally Tabsdata uses Polars) that enables selection, filtering, aggregation and joins operations.
The server additionally provides a semantic catalog, which classifies the metadata of connected sources and destinations on connection and keeps it current as they change, recording what a table holds and how it is used alongside its schema; and medallion primitives, which provide raw capture, quality observation, change data capture and slowly changing dimensions as composable functions.
Function code is the same whether the server runs as a single instance on a laptop or workstation or on a Kubernetes cluster, where function execution scales out on the cluster and table storage is backed by cloud object storage.
Driving Tabsdata from an AI Agent
The dependency graph, table versions, execution history and semantic catalog are first-class objects of the server API, not metadata reconstructed after the fact. An agent queries what a table holds, what produced it, what depends on it and what changed between two versions, and it operates on what the server recorded rather than on inference about it. Writes follow the same rules as any other client: a function run commits a new version instead of mutating a table, under the same access control, and earlier versions remain readable.
- MCP server - exposes the catalog, table versions, dependency graph and execution history, as well as the operations to define, trigger and inspect functions, to external AI agents.
- Built-in agent - in the Tabsdata UI, scoped to operations: what ran, what failed and why.
For more details refer to Tabsdata Getting Started (latest) or the Tabsdata User Guide (latest).
Installation
Supported platforms:
- Windows (x86 - latest)
- macOS (Apple silicon - latest)
- Ubuntu, Debian & RedHat - (x86 - latest)
- Kubernetes (AWS EKS - latest, more distributions in upcoming releases)
pip install "tabsdata[all]"
Running Tabsdata Locally
tdkserver quickstart initializes, creates and starts a local instance. AI integration is
configured with whichever key is given on the command line:
$ tdkserver quickstart # without AI integration
$ tdkserver quickstart --anthropic-key $ANTHROPIC_API_KEY # integration with Anthropic
$ tdkserver quickstart --openai-key $OPENAI_API_KEY # integration with OpenAI
This version (2.0.1) Documentation
How Does Tabsdata Work?
The following snippets show how to publish and subscribe to tables in Tabsdata.
Endpoints and credentials are declared as connections, apart from function code, and attached to the collection a function is registered in. Functions declare only what they read and write.
Declaring a Connection to a MySQL Database
kind: connectionDef
apiVersion: '1.0'
type: tabsdatak.conn.mysql:MySQLSrcConn
spec:
uri: mysql://127.0.0.1:3306/testing
credentials:
kind: userPasswordCredentials
apiVersion: '1.0'
type: tabsdatak.conn.common.types:UserPassword
spec:
user: admin
password: tabsdata
Publishing data from a MySQL Database
from tabsdatak.api import TableFrameSpec, publisher
from tabsdatak.conn.mysql import MySQLSrc
@publisher(
source=MySQLSrc(queries=["select * from CUSTOMERS"]),
output_tables=["customers"],
)
def pub(customers: TableFrameSpec) -> TableFrameSpec:
return customers
Subscribing, transforming and publishing data within Tabsdata
from tabsdatak.api import TableFrameSpec, transformer
from tabsdatak.tableframe.functions import col
@transformer(
input_tables=["input/customers"],
output_tables=["spanish"],
)
def tfr(customers: TableFrameSpec) -> TableFrameSpec:
return customers.filter(col("nationality").eq("spanish")).select(
col("identifier"), col("name"), col("surname"), col("language")
)
Subscribing to data in an S3 Bucket
from tabsdatak.api import TableFrameSpec, subscriber
from tabsdatak.conn.s3 import S3Dest
@subscriber(
destination=S3Dest(paths=["spanish.parquet"]),
input_tables=["dataprod/spanish"],
)
def sub(spanish: TableFrameSpec) -> TableFrameSpec:
return spanish
Registering and Executing the Functions
Each function is registered in a collection, and triggering the publisher runs the rest:
$ tdk fn register --coll input --path input.py::pub
$ tdk fn register --coll dataprod --path transform.py::tfr
$ tdk fn register --coll output --path output.py::sub
$ tdk fn trigger --coll input --name pub
Every time the pub publisher is executed, the tfr transformer and the sub subscriber will also be
executed.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tabsdata-2.0.1-cp312-abi3-win_amd64.whl.
File metadata
- Download URL: tabsdata-2.0.1-cp312-abi3-win_amd64.whl
- Upload date:
- Size: 29.0 MB
- Tags: CPython 3.12+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df550fc075918ea67963c5f83f18ab71417f29b7bea165abf29cf0f67cdc6c2a
|
|
| MD5 |
94c7fe47202f2a30a4c8140c6de4fc36
|
|
| BLAKE2b-256 |
6dbecd9a56ead7e76b38223ccb64f3c2475aa5dd96c1acee4e9f925b6a354feb
|
File details
Details for the file tabsdata-2.0.1-cp312-abi3-manylinux1_x86_64.whl.
File metadata
- Download URL: tabsdata-2.0.1-cp312-abi3-manylinux1_x86_64.whl
- Upload date:
- Size: 32.7 MB
- Tags: CPython 3.12+
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f148251a9e1a20a2811d67caf0ab24dbd5bc62e89090845eec3e9e4922cb8e8
|
|
| MD5 |
bc3af1a5d671f087ec1580424b4fa47f
|
|
| BLAKE2b-256 |
966f93fefb45feb218dde571194c64770dc90abd455c4b456593f97873f9a97e
|
File details
Details for the file tabsdata-2.0.1-cp312-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: tabsdata-2.0.1-cp312-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 30.7 MB
- Tags: CPython 3.12+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8a2114613b93b1ba1af490dfbe37451ced595dd44b61defe1f5ffc413969cb9
|
|
| MD5 |
bcc8c07c9d4493b51ec1f1647107bd39
|
|
| BLAKE2b-256 |
7d6d18fffbcd20ed6a042cbffdd74647ad1abc7b901e8dcdf32ebf1da0646644
|