Skip to main content

TableClone

Data synchronization tool for heterogeneous platforms (Airtable, Bubble, PostgreSQL, SQLite, Excel, Google Drive, etc.).

TableClone enables bidirectional data synchronization between different data platforms using a unified abstraction layer. It handles type conversions, schema mapping, and data normalization automatically.

Features

  • Multi-platform support: Airtable, Bubble.io, PostgreSQL, SQLite, Excel, Google Drive, and more
  • Flexible sync modes: Insert (append), Update, Upsert
  • Schema mapping: Automatic or explicit column mapping
  • Type conversion: Automatic handling of dates, numbers, booleans, null values
  • Batch operations: Efficient bulk insert/update with configurable batch sizes
  • Backup operations: Full container backup with attachment download support

Supported Platforms

Platform Read Write Create Backup
Airtable ✅ ✅ ✅ ✅
Bubble.io ✅ ✅ ✅ ✅
PostgreSQL ✅ ✅ ✅ ❌
SQLite ✅ ✅ ✅ ✅
Excel ✅ ✅ ✅ ✅
Google Drive ✅ ✅ ✅ ❌

Installation

Using pip

pip install tableclone

Using uv (recommended for development)

# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install tableclone
uv pip install tableclone

Quick Start

Table Synchronization

# Sync from Airtable to SQLite
tableclone sync config.json

# Or pass config as JSON string
tableclone sync '{"source": {...}, "destination": {...}}'

Example configuration (config.json):

{
    "source": {
        "platform": "airtable",
        "table": {
            "alias": "source_table",
            "api_identifier": "baseId/tableId",
            "platform": {
                "secret_string": "$AIRTABLE_API_KEY",
                "options": {}
            }
        }
    },
    "destination": {
        "platform": "sqlite",
        "table": {
            "alias": "dest_table",
            "api_identifier": "table_name",
            "platform": {
                "platform_root_path": "/path/to/database.sqlite"
            },
            "options": {
                "unique_id_column": "id"
            }
        }
    },
    "options": {
        "mapping_auto": true,
        "append_mode": true,
        "update_mode": true
    }
}

Full Backup

# Backup entire Bubble app to Excel files
tableclone full_backup backup_config.json

Development Setup

Prerequisites

  • Python 3.10 or higher
  • uv (recommended) or pip

Setup with uv (recommended)

# Clone the repository
git clone https://github.com/vlebert/bubbleio.git
cd tableclone

# Create virtual environment with uv
uv venv .venv

# Activate virtual environment
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install package in editable mode with dev dependencies
uv pip install -e ".[dev]"

# Verify installation
tableclone --help

Setup with pip (alternative)

# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install in editable mode with dev dependencies
pip install -e ".[dev]"

Development Dependencies

The [dev] extra includes:

  • pytest and pytest-cov for testing
  • ruff for linting and formatting
  • basedpyright for type checking

Running Tests

# Run all tests
pytest tests/ -v

# Run integration tests (requires credentials)
pytest tests/integration/ -v

# Run with coverage
pytest tests/ --cov=tableclone --cov-report=html

# Run only fast tests (exclude integration)
pytest tests/ -m "not integration"

See tests/README.md for detailed test setup instructions (Airtable credentials, etc.).

Code Quality

# Lint with ruff
ruff check .

# Format with ruff
ruff format .

# Type check with basedpyright
basedpyright tableclone/

Project Structure

tableclone/
├── tableclone/
│   ├── platforms/          # Platform implementations (Airtable, Bubble, etc.)
│   ├── tasking/            # Task orchestration (sync, backup)
│   ├── cli_v2.py           # CLI entry point
│   └── utils.py            # Options system and utilities
├── tests/
│   ├── integration/        # Integration tests
│   ├── fixtures/           # Test data
│   └── helpers/            # Test utilities
├── pyproject.toml          # Project configuration
├── CLAUDE.md               # Development guide for Claude Code
└── REFACTORING_ANALYSIS.md # Refactoring plan

Documentation

Configuration

Environment Variables

Credentials can be passed via environment variables in config files:

{
    "platform": {
        "secret_string": "$AIRTABLE_API_KEY"
    }
}

Supported variables:

  • AIRTABLE_API_KEY
  • BUBBLE_API_KEY
  • POSTGRES_CONNECTION_STRING
  • Any custom variable prefixed with $

Options

Each platform and table supports options for customization. See CLAUDE.md for detailed options documentation.

Contributing

This project is currently in a refactoring phase. See REFACTORING_ANALYSIS.md for the roadmap.

Current Phase

Phase 1: Stabilization (Months 1-2)

  • ✅ Integration tests created
  • ⏳ Documentation in progress
  • ⏳ Code cleanup (remove dead code)

Roadmap

  • Phase 2: Simplify architecture (replace Pandas with lightweight data model)
  • Phase 3: Decouple credentials and configuration
  • Phase 4: Add observability (structured logging, metrics)

License

MIT License - see LICENSE file for details

Author

Valérian LEBERT

Links

Metadata

Release files for tableclone 2.0.0

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

Source distribution (sdist)

Source distribution for tableclone 2.0.0
File Size Uploaded Provenance Actions
tableclone-2.0.0.tar.gz 71.6 kB Without provenance Details for tableclone-2.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for tableclone 2.0.0
File Interpreter ABI Platform Actions
tableclone-2.0.0-py3-none-any.whl Python 3 none any Details for tableclone-2.0.0-py3-none-any.whl

Total release size: 135.2 kB

Release files / tableclone-2.0.0.tar.gz

Download URL tableclone-2.0.0.tar.gz
Size 71.6 kB
Tags Source
SHA-256 checksum
How to use checksums
cba76330d48f2628349d71de3a789737fc5261234273def2e65dc02c688932f2
BLAKE2b-256 checksum
How to use checksums
6fd7d1da9360c466800894cd2151cb91b525749d09a8a834ca183988fee139d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.7

Release files / tableclone-2.0.0-py3-none-any.whl

Download URL tableclone-2.0.0-py3-none-any.whl
Size 63.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
161c0ad95a0cc653a38619f01abc00c2a2af7cc28fc4566619af897f805d7350
BLAKE2b-256 checksum
How to use checksums
349193aaa13abecaf7783eb1ab7989be32aa86a700039ee3f16b3b85dba873b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.7

Security for tableclone 2.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files No provenance

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