Datasette 1.0a32: минорный, но важный релиз

31 мая 2026 года Саймон Уиллисон (Simon Willison) выпустил Datasette 1.0a32 — очередной alpha-релиз (предварительная версия) популярного инструмента для исследования и публикации данных с открытым исходным кодом. Несмотря на то что сам автор охарактеризовал его как «небольшой патч», за скромным описанием скрываются исправления, которые важны для разработчиков, активно использующих новый Write API и экспериментирующих с Service Workers.

ℹ Что такое Datasette?
Datasette — это инструмент с открытым исходным кодом для исследования и публикации данных. Он позволяет превратить базы данных SQLite в интерактивные сайты с API. Подробнее — на datasette.io.

Контекст: что было до 1.0a32

Чтобы понять значимость исправлений в этом релизе, нужно знать, что произошло в предыдущих версиях.

Datasette 1.0a31: большой шаг вперёд

Всего за два дня до выхода 1.0a32, 29 мая 2026 года, вышла версия 1.0a31 — один из наиболее значимых альфа-релизов за последнее время. В нём появились сразу два ключевых нововведения:

  • SQL Write Queries (запросы на запись через SQL): пользователи с соответствующими правами теперь могут выполнять запросы INSERT, UPDATE, DELETE прямо через веб-интерфейс.
  • Stored Queries (сохранённые запросы, ранее «canned queries» — «консервированные запросы»): запросы теперь можно сохранять — как приватно, так и для совместного использования внутри экземпляра Datasette.

Именно появление endpoint (конечной точки API) /db/-/execute-write в версии 1.0a31 и стало источником бага, исправленного в 1.0a32.

Эксперименты с Service Workers

Параллельно с разработкой Datasette Саймон Уиллисон 30 мая 2026 года опубликовал исследование о запуске Python ASGI-приложений прямо в браузере с помощью Pyodide (Python-рантайм на WebAssembly) и Service Worker (фоновый скрипт браузера, перехватывающий сетевые запросы).

Идея состоит в том, чтобы Service Worker перехватывал все запросы к определённому URL-пути и передавал их Python-приложению прямо внутри браузера — без обращения к серверу. Это открывает путь к будущему обновлению Datasette Lite — браузерной версии Datasette, работающей целиком на стороне клиента.

Именно в ходе этих экспериментов был обнаружен ряд проблем с параметром base_url — базовым URL-адресом для формирования всех ссылок внутри Datasette.


Что исправлено в 1.0a32

Исправление 1: баг с INSERT ... RETURNING в /db/-/execute-write

Первое исправление касается SQL-синтаксиса INSERT ... RETURNING — конструкции, появившейся в SQLite версии 3.35.0 (март 2021 года). Она позволяет сразу после вставки строки получить значения добавленных полей — например, автоматически сгенерированный первичный ключ.

Пример такого запроса:

INSERT INTO articles (title, body)
VALUES ('Заголовок', 'Текст статьи')
RETURNING id, created_at;

При отправке подобного запроса через новый endpoint /db/-/execute-write возникала ошибка. Баг был обнаружен и оперативно устранён в 1.0a32.

⚠ Важно для разработчиков
Если вы использовали endpoint /db/-/execute-write с конструкцией INSERT ... RETURNING в версии 1.0a31 — обновитесь до 1.0a32. Запросы без RETURNING работали корректно.

Исправление 2: проблемы с base_url

Второй блок исправлений связан с параметром base_url — настройкой, задающей корневой путь, относительно которого Datasette формирует все внутренние ссылки, редиректы и пути к статическим файлам.

Проблемы проявились при экспериментах с Service Workers: когда приложение запускается не в корне домена (например, по адресу /app/datasette/), некорректный base_url приводит к поломке навигации, загрузки ресурсов и работы API.

Модель работы base_url в Datasette:


graph TD
    A[Входящий запрос] --> B{base_url задан?}
    B -- Нет --> C[Используется корень /]
    B -- Да --> D[Формируется путь относительно base_url]
    D --> E[Навигация и ссылки]
    D --> F[Статические файлы CSS/JS]
    D --> G[API endpoints /db/-/execute-write и др.]
    C --> E
    C --> F
    C --> G

Исправления охватывают несколько сценариев, когда base_url учитывался неправильно или игнорировался при формировании ответов.


Почему Service Workers — это важно для Datasette

Эксперимент Саймона Уиллисона с запуском Python ASGI-приложений в браузере через Service Workers — это не просто академическое упражнение. Его практическая цель — обновить Datasette Lite, браузерную версию Datasette.

Старый подход Datasette Lite (используемый уже около четырёх лет) работал через Web Workers и перехват навигационных операций. Он имел критический недостаток: JavaScript внутри тегов <script> не выполнялся, что нарушало часть функциональности Datasette и большинство плагинов.

Новый подход на основе Service Workers лишён этого ограничения: браузер получает полноценные HTML-страницы, которые обрабатываются штатным движком, включая все скрипты.

💡 Как это работает
Service Worker регистрируется в браузере один раз и перехватывает все HTTP-запросы к определённому пути. Вместо обращения к серверу он передаёт запрос Python-приложению, работающему в WebAssembly (через Pyodide). Ответ возвращается браузеру — как если бы за ним стоял настоящий сервер.

Сравнение: старый и новый подход в Datasette Lite

ХарактеристикаWeb Workers (старый)Service Workers (новый)
Выполнение <script> тегов❌ Не работает✅ Работает
Поддержка плагинов⚠️ Частичная✅ Полная
Совместимость с ASGI✅ Да✅ Да
Работа с base_url⚠️ Проблемы✅ Исправлено в 1.0a32
Нужен сервер?❌ Нет❌ Нет
Зрелость подходаПроверено 4+ годаЭкспериментальный

Как обновиться

Установка или обновление Datasette до версии 1.0a32 выполняется стандартно через pip:

# Установка с нуля
pip install datasette==1.0a32

# Обновление существующей установки
pip install --upgrade datasette==1.0a32

# Проверка версии
datasette --version
📝 Быстрый старт с Datasette

Чтобы быстро попробовать Datasette на своих данных, достаточно трёх команд:

pip install datasette==1.0a32
sqlite3 mydata.db "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);"
datasette mydata.db

После этого откройте браузер по адресу http://localhost:8001.


Итог

Datasette 1.0a32 — типичный пример «технического долга в движении»: активная разработка крупных возможностей (Write API, Service Workers) неизбежно порождает мелкие баги, которые так же оперативно исправляются. Исправление INSERT ... RETURNING в новом endpoint и серия патчей для base_url — небольшие, но принципиально важные шаги на пути к стабильному релизу 1.0.

Проект активно развивается: только за последнюю неделю мая 2026 года вышли версии 1.0a30, 1.0a31 и 1.0a32. Следить за обновлениями можно в блоге Саймона Уиллисона и на странице релизов GitHub.

Если вы используете Datasette в production или активно тестируете alpha-версии — 1.0a32 стоит установить уже сейчас, особенно если в вашем стеке есть запросы с INSERT ... RETURNING или нестандартный base_url.