Skip to main content

PostgreSQL schema evolution with built-in multi-agent coordination 🍓

Project description

Confiture 🍓

PostgreSQL migrations, sweetly done.

Build fresh databases in <1 second. Apply incremental migrations. Sync production data with PII anonymization. Zero-downtime schema swaps via FDW. All from the same tool.

PyPI Quality Gate Python 3.11+ PostgreSQL 12+ License: MIT


Why Confiture?

  • DDL is the source of truth — your db/schema/ directory defines the database, not a chain of migrations. Fresh databases build in <1 second by executing DDL directly.
  • Timestamp-based versioning — migration filenames use YYYYMMDDHHMMSS, so parallel branches never collide. No more 003_add_users merge conflicts.
  • 4 strategies, one tool — build from DDL, incremental migrations, production sync with anonymization, and zero-downtime schema-to-schema via FDW. Pick the right one for each situation.
  • Multi-agent coordination — built-in intent registration and conflict detection so teams and AI agents don't step on each other's schema changes.
  • CI/CD-native — semantic exit codes, structured output (JSON/CSV/YAML), distributed locking, and dry-run with SAVEPOINT testing.

Quick Start

Installation

pip install fraiseql-confiture

# Recommended: include pglast for large-schema support
# (uses PostgreSQL's own C parser — no token limits)
pip install "fraiseql-confiture[ast]"

CLI

# Initialize project structure
confiture init

# Write your schema DDL files
vim db/schema/10_tables/users.sql

# Build database from DDL (<1 second)
confiture build --env local

# Generate and apply migrations
confiture migrate generate --name "add_bio"
confiture migrate up

Library API

from confiture import Migrator

with Migrator.from_config("db/environments/prod.yaml") as m:
    status = m.status()
    if status.has_pending:
        result = m.up()

The Four Strategies

Strategy Use Case Command
Build from DDL Fresh databases, testing, CI confiture build --env local
Incremental Migrations Existing databases, production confiture migrate up
Production Sync Copy data with PII anonymization confiture sync --from prod --anonymize users.email
Zero-Downtime Complex migrations via FDW confiture migrate schema-to-schema

Features

Migration Management

  • migrate preflight — pre-deploy safety gate: checks reversibility, non-transactional statements, duplicate versions, and checksum tampering. JSON output for CI/CD.
  • Semantic exit codes0 success, 2 validation error, 3 SQL failure, 6 lock contention. Script with confidence.
  • migrate rebuild — drop and recreate from DDL + replay migrations in one command. Fast environment reset.
  • migrate validate — naming convention checks, schema drift detection, function signature and body drift.
  • migrate fix-signatures — detect and atomically fix stale function overloads and body drift.
  • Dry-run with SAVEPOINT testing--dry-run-execute runs migrations inside a savepoint, then rolls back.
  • Checksum verification — detect tampered migration files before applying.
  • Distributed locking — safe concurrent deployments via PostgreSQL advisory locks.
  • Migration hooks — run custom logic before/after each migration.

Schema Intelligence

  • Schema diff detection — two-tier parser: pglast (PostgreSQL's C parser) primary, sqlparse fallback.
  • Schema linting — configurable rules to catch common DDL mistakes.
  • Function introspectionFunctionIntrospector, TypeMapper, and DependencyGraph for deep schema analysis.
  • Grant accompaniment checker — detect permission changes without corresponding migrations.

Seed Data

  • Sequential execution — handles PostgreSQL parser limits on large seed files.
  • Per-file savepoint isolation — one bad seed file doesn't ruin the batch.
  • 5-level prep-seed validation — static analysis through full execution, pre-commit safe at levels 1-3.

Multi-Agent Coordination

  • Intent registration — declare which tables you're changing before you start.
  • Conflict detection — automatic alerts when agents touch overlapping tables.
  • JSON output — machine-readable for CI/CD pipelines.

Developer Experience

  • Structured output — JSON, CSV, and YAML for all commands.
  • Exception hierarchy — typed errors with error codes and resolution hints.
  • Git-aware validation — detect schema drift vs. main branch, enforce migrations for DDL changes.
  • PII anonymization — built-in strategies for production sync.
  • Optional Rust extension — drop-in performance boost for SQL parsing and hashing.
  • Python 3.11, 3.12, 3.13 — tested across all supported versions.
  • 4,480+ tests passing.

Documentation

Getting Started: docs/getting-started.md

Guides:

CLI Reference: docs/reference/cli.md

API Reference: docs/reference/

Examples: examples/


Contributing

git clone https://github.com/fraiseql/confiture.git
cd confiture
uv sync --all-extras
uv run pytest

See CONTRIBUTING.md and CLAUDE.md.


Author & License

Vibe-engineered by Lionel Hamayon 🍓

MIT License - Copyright (c) 2025 Lionel Hamayon


Making jam from strawberries, one migration at a time. 🍓→🍯

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

fraiseql_confiture-0.8.20.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fraiseql_confiture-0.8.20-cp314-cp314-win_amd64.whl (750.9 kB view details)

Uploaded CPython 3.14Windows x86-64

fraiseql_confiture-0.8.20-cp313-cp313-win_amd64.whl (750.9 kB view details)

Uploaded CPython 3.13Windows x86-64

fraiseql_confiture-0.8.20-cp313-cp313-manylinux_2_28_x86_64.whl (842.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

fraiseql_confiture-0.8.20-cp313-cp313-macosx_11_0_arm64.whl (796.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

fraiseql_confiture-0.8.20-cp312-cp312-win_amd64.whl (750.9 kB view details)

Uploaded CPython 3.12Windows x86-64

fraiseql_confiture-0.8.20-cp312-cp312-manylinux_2_28_x86_64.whl (842.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

fraiseql_confiture-0.8.20-cp312-cp312-macosx_11_0_arm64.whl (796.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

fraiseql_confiture-0.8.20-cp311-cp311-win_amd64.whl (750.6 kB view details)

Uploaded CPython 3.11Windows x86-64

fraiseql_confiture-0.8.20-cp311-cp311-manylinux_2_28_x86_64.whl (844.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

fraiseql_confiture-0.8.20-cp311-cp311-macosx_11_0_arm64.whl (797.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file fraiseql_confiture-0.8.20.tar.gz.

File metadata

  • Download URL: fraiseql_confiture-0.8.20.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20.tar.gz
Algorithm Hash digest
SHA256 f02c21c42e7b6b6fea9d98dc9292d1845b5dfe65a68a934ada97646405e657db
MD5 d36a6d82aeb1123d2887d32147d0c2c5
BLAKE2b-256 27eb3906356187e4b1791151ff3204dcea8a63245f02048744a51378cbcb74f7

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 750.9 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 4ce51b51abc1594b37a94bbfa0c738962d69744668ad51f497505acc216b661a
MD5 cf6499fa8f28fcfac4aa77a319f8671f
BLAKE2b-256 d51db1c881fa60f4e8d5ba6c47eb3bc068169d114818c1525f78f786f13b51fb

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 750.9 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0b3196e210c0dec8284f37cf2dfb58a8d2cc354dfb318f1dca28778913edccd9
MD5 c6e298af458b4d4a823a9c62e8f396b5
BLAKE2b-256 c0a3d53a139465c43a84e652a7dae704341a740ef7e21f75b1a667ea102a439e

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp313-cp313-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 842.7 kB
  • Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5694f2feac4f53d4603779851a80bb34fe7f495ab1feccd42664e8055ae5eaf6
MD5 d82742ae3c26ef0c8ca74215b97ffb72
BLAKE2b-256 ccab85180191325b14cad70f54ccb86a5dd51bf22ff7b6470bd418b8b150774a

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp313-cp313-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 796.8 kB
  • Tags: CPython 3.13, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bbe36f9a5e6543e640d4b29bdf103d2ea59e490931b1ccd77b96d6f48b7ddf96
MD5 57fea0329f57c2373a97335f10b48ad8
BLAKE2b-256 22b9faf94ff2fd4ad06efde97eef3cc4de477c3f9583fa1658f100dbbce9456c

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 750.9 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 373679dc0683c974895a254e899917398b6575674ff393e14dc9f443eed3c819
MD5 4010d7e1db2c639c52da23fbdaa18d87
BLAKE2b-256 81b258c6e65e3d9984009fd2fb4a4c5137fb759cb17b2148ae9b0259a98a0c9d

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp312-cp312-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 842.8 kB
  • Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fa6fd0d309702b0873c92f33a330045b1a64c3dd5b6d0184ef57feeac70063e8
MD5 9077332a42dc520fb5a9106b2a28280f
BLAKE2b-256 6243f1a18a2ab7e0337a6477ec4fcd303067d59fa63dbd671283e9d62cf82f6e

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 796.7 kB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 27519d619e1b2f3c11fec882a46003ef54ff22b45f222fbfce0022fcb3f7677e
MD5 4889970582f0f15fe4cfcbddda8e8c60
BLAKE2b-256 9396c5292927fcf4518504893d4cd2e3e4c9602b5d8c626f45ffe87bc4cf5fb5

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 750.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9faf874e550cf5a90f0877e505e74ec8cf4337304152660cb4b4150e2e91ae8f
MD5 1fec3c96b07542005bc32a8ba8ed97be
BLAKE2b-256 9bfa5e0824557e45b4baf7b7401eacfbef02e73869db52295bb2cf1705bc18e3

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp311-cp311-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 844.2 kB
  • Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fffa7b68cee35b8cc6c1eb3406966799682ef071d4247bfe7b17c4a70428240e
MD5 40166068eeb386ac905b74221eb478fb
BLAKE2b-256 fa48db874cd7052819447e0b2eac605460c4e0bbe55d4a7b4a427d7815ca36d7

See more details on using hashes here.

File details

Details for the file fraiseql_confiture-0.8.20-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: fraiseql_confiture-0.8.20-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 797.0 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fraiseql_confiture-0.8.20-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 acba05291f7e40619522ffcdfcbb44d04d1a1428926323f8c6b0eaf8f9d1944c
MD5 3c9ffb97cc78eaebbbab36edc3477f59
BLAKE2b-256 e90555b54ae8c5d7638f48b8057f2b364e0caaadac63e404097bc7e93e70fc66

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