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

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.0.2
File Interpreter ABI Platform
tabsdata-2.0.2-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
tabsdata-2.0.2-cp312-abi3-manylinux1_x86_64.whl CPython 3.12 abi3 Linux glibc 2.5+ x86-64 Details
tabsdata-2.0.2-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details

Total release size: 92.7 MB

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

Download URL tabsdata-2.0.2-cp312-abi3-win_amd64.whl
Size 29.1 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
770137cca342ba1bf597102efafa31190e9beecce3845840ca1b34965fccfffe
BLAKE2b-256 checksum
How to use checksums
33725592b9ce4060b495ec225d1206d6accb63521d59941a938f02b9569389d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

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

Download URL tabsdata-2.0.2-cp312-abi3-manylinux1_x86_64.whl
Size 32.8 MB
Tags CPython 3.12 Linux glibc 2.5+ x86-64 abi3
SHA-256 checksum
How to use checksums
cd71aa9bba646af9f97403ee2c554e96a3820dc2dadc54b2a565780cb7d2abd7
BLAKE2b-256 checksum
How to use checksums
def6674a209e39dc5a18a9ced0d4d486432e9a1c433ef699ded5f0e338261094
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

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

Download URL tabsdata-2.0.2-cp312-abi3-macosx_11_0_arm64.whl
Size 30.8 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
781f1d8d1c516662cd4c9d05c5b7e9e2667d77da674c22a4e5d2b2257b1b38c5
BLAKE2b-256 checksum
How to use checksums
fcf0eaa073f2c997056d02cdaa651fe85afc306c99f90ac738377d8f3a140a43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

2.2.0

3 release files

2.1.0

3 release files

This release

2.0.2 This release

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