---
title: "sqlite-utils 4.0rc3 Released: Compound Foreign Keys and Case-Insensitive Column Names"
source: "Simon Willison 博客（Atom）"
source_tier: "t2"
url: "https://simonwillison.net/2026/Jul/6/sqlite-utils/#atom-everything"
permalink: "https://feed.astralor.com/items/itm_b437cfcb8f40c7d2ad80259f"
published: "2026-07-06T05:40:08.000Z"
score: 67
channel: "tech"
tags: ["Simon Willison","SQLite","sqlite-utils","compound foreign keys","case-insensitive","Release"]
---

# sqlite-utils 4.0rc3 Released: Compound Foreign Keys and Case-Insensitive Column Names

## AI commentary

> Although just a release candidate, the compound foreign key support solves a long-standing pain point—all sqlite-utils users should preview this and plan migration, especially those with multi-column foreign key designs that will benefit from reduced manual effort.

## At a glance

sqlite-utils 4.0rc3 is the latest release candidate before the stable 4.0 release by Simon Willison. Key features include introspection and creation of compound foreign keys (with a subtle breaking change to table.foreign_keys) and following SQLite's case-insensitive column name convention. The release leverages Claude Fable 5 and GPT-5.5 to process a backlog of issues and PRs.

## Key points

- sqlite-utils 4.0rc3 adds introspection and creation of compound foreign keys
- Introduces a subtle breaking change to the table.foreign_keys API
- Adopts SQLite's case-insensitive column name convention, affecting multiple code paths
- Leverages AI tools (Claude Fable 5 and GPT-5.5) to streamline release process

## Full text

Release: sqlite-utils 4.0rc3 I hoped to release sqlite-utils 4.0 stable this weekend, but as I worked through the backlog of issues and PRs with a combination of Claude Fable 5 and GPT-5.5 the changelog since rc2 kept getting bigger. The biggest new feature is support for introspecting and creating compound foreign keys - a feature that involves a subtle breaking change to table.foreign_keys and hence needed to land for the 4.0 stable release. sqlite-utils also now follows SQLite's convention for case insensitive column names, which turned out to touch a bunch of different places at once. Tags: projects, sqlite, sqlite-utils, annotated-release-notes, gpt, claude-mythos-fable

---

Verify against the original before citing; curated by Astral Feed: https://feed.astralor.com/items/itm_b437cfcb8f40c7d2ad80259f
