Skip to main content

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.1.0) 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.

Metadata

Release files for tabsdata 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for tabsdata 2.1.0
File Interpreter ABI Platform
tabsdata-2.1.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
tabsdata-2.1.0-cp312-abi3-manylinux1_x86_64.whl CPython 3.12 abi3 Linux glibc 2.5+ x86-64 Details
tabsdata-2.1.0-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details

Total release size: 107.6 MB

Release files / tabsdata-2.1.0-cp312-abi3-win_amd64.whl

Download URL tabsdata-2.1.0-cp312-abi3-win_amd64.whl
Size 33.5 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
5445188cd98e3c64716cd084e1224bc3a7d612da75fb0f3e4dbd48d2b7ca2026
BLAKE2b-256 checksum
How to use checksums
9e8a115777c3b371378807f6d9d28d573f4f83dfc71ddedf734462566d8626fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / tabsdata-2.1.0-cp312-abi3-manylinux1_x86_64.whl

Download URL tabsdata-2.1.0-cp312-abi3-manylinux1_x86_64.whl
Size 38.4 MB
Tags CPython 3.12 Linux glibc 2.5+ x86-64 abi3
SHA-256 checksum
How to use checksums
36e386b7ee6f7200c55f9710930004aa630183f91b256add3a77e498a906d8e0
BLAKE2b-256 checksum
How to use checksums
68c52d426c16ce889c79cfdd74f4bf1eda028ec1008c053adc5d10944efe4d7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / tabsdata-2.1.0-cp312-abi3-macosx_11_0_arm64.whl

Download URL tabsdata-2.1.0-cp312-abi3-macosx_11_0_arm64.whl
Size 35.7 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
351988c65c20453937e2b825bbcb9108134e48da535596992dc9b014331b17e7
BLAKE2b-256 checksum
How to use checksums
1e1e84c4ac5bb9b976470217517091ed2c3b0e80398ec59d77cfc9a83775c380
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

2.2.0

3 release files

This release

2.1.0 This release

3 release files

2.0.2

3 release files

2.0.1

3 release files

1.9.1

3 release files

1.9.0

3 release files

1.8.0

3 release files

1.7.1

3 release files

1.7.0

3 release files

1.6.0

3 release files

1.5.1

3 release files

1.5.0

3 release files

1.4.0

4 release files

1.3.0

5 release files

1.2.0

5 release files

1.1.0

5 release files

1.0.0

5 release files

0.9.6

4 release files

0.9.5

4 release files

0.9.4

4 release files

0.9.3

4 release files

0.9.2

4 release files

0.9.1

4 release files

0.9.0

4 release files

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page