
Datasette Apps: мини-приложения внутри Datasette
Новый плагин datasette-apps позволяет запускать HTML+JS приложения прямо внутри Datasette — в безопасной iframe-песочнице с доступом к SQLite.
Datasette Apps: мини-приложения прямо внутри Datasette
18 июня 2026 года Саймон Уиллисон (Simon Willison) — создатель популярного инструмента для работы с данными Datasette — объявил о запуске нового плагина datasette-apps. Сегодня мы запустили новый плагин для Datasette — datasette-apps. Если официальный анонс на блоге проекта отвечает на вопрос «что это», то сам Уиллисон в своём посте хотел ответить на другой вопрос: «зачем это нужно».
Что такое Datasette Apps
Datasette Apps — это самодостаточные HTML+JavaScript приложения, которые работают в строго ограниченной <iframe>-песочнице (sandbox), размещённой внутри вашего экземпляра Datasette. Они могут использовать JavaScript для выполнения read-only SQL-запросов к данным в Datasette, а также запускать write-запросы, если вы настроите для них хранимые запросы (stored queries).
Проще говоря: вместо того чтобы поднимать отдельный бэкенд, писать API и разворачивать ещё один сервис — вы просто пишете один HTML-файл и размещаете его прямо в Datasette. Приложение получает доступ к вашим SQLite-базам данных через специальный JavaScript-мост.
Думайте об этом как о Claude Artifacts, переосмысленном для Datasette — со всей мощью артефактов, но с JSON API к полноценной реляционной базе данных.
Как это работает технически
Песочница на основе iframe
Datasette Apps работают в <iframe sandbox="allow-scripts allow-forms"> — тщательно настроенной песочнице, которая не позволяет приложениям совершать вредоносные действия, влияющие на родительскую страницу.
Атрибут sandbox= позволяет запускать ненадёжный код таким образом, что он не может взаимодействовать с родительским приложением — не может читать DOM, получать доступ к cookies или похищать данные из localStorage.
Для передачи данных между приложением и Datasette используется механизм postMessage:
Хранимые приложения могут запрашивать данные Datasette с помощью встроенного помощника datasette.query(database, sql, params). Также можно выполнять разрешённые хранимые запросы через datasette.storedQuery(database, query, params). iframe отправляет эти запросы на родительскую страницу через postMessage, а та пересылает их к специальному query-эндпоинту приложения.
Пример простого приложения
Вот как выглядит минимальное Datasette App — оно просто показывает количество строк в двух таблицах:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
body { font-family: Helvetica }
</style>
</head>
<body>
<div id="output"></div>
<script>
async function main() {
const SQL = `
select 'blog_posts' as t, count(*) as c from blog_posts
union
select 'datasette_repos', count(*) from datasette_repos
`;
const results = await datasette.query("content", SQL);
const html = results.rows.map(row =>
`<strong>${row.t}</strong>: ${row.c}`
).join("");
document.getElementById('output').innerHTML = html;
}
main();
</script>
</body>
</html>
JavaScript выполняет read-only SQL-запрос с помощью метода await datasette.query() и затем отображает результаты в <div> на странице.
Защита от утечки данных через CSP
Одна из ключевых угроз — утечка данных наружу. Настройки CSP (Content Security Policy — политика безопасности контента) внутри iframe запрещают загрузку контента из любых внешних доменов. Администраторы сайта могут настроить список разрешённых доменов для отдельного приложения.
Уиллисон исправил потенциальную уязвимость, ограничив возможность добавлять домены в белый список новым разрешением apps-set-csp, предназначенным только для доверенных сотрудников. Администраторы сайта также могут задать список allowed_csp_origins, из которого обычные пользователи смогут выбирать. Это позволяет, например, разрешить cdnjs.cloudflare.com, и пользователи смогут подключать дополнительные JavaScript-библиотеки из этого CDN.
Система прав доступа
Плагин регистрирует следующие права Datasette: create-app, view-app, edit-app, delete-app, manage-app-access и apps-set-csp. Владельцы хранимых приложений всегда могут просматривать, редактировать, удалять свои приложения и управлять доступом к ним. Приложения, помеченные как приватные, видны только их владельцу, даже если другие пользователи имеют широкие права view-app. Для создания хранимых приложений требуется явное предоставление права create-app.
graph TD
A[Пользователь создаёт приложение] --> B{Проверка прав create-app}
B -- Есть право --> C[Редактор кода HTML/JS/CSS]
B -- Нет права --> X[Отказ в доступе]
C --> D[Приложение сохраняется в internal.db]
D --> E[Рендеринг в iframe sandbox]
E --> F{Запрос данных}
F -- datasette.query() --> G[Read-only SQL]
F -- datasette.storedQuery() --> H[Разрешённые write-запросы]
G --> I[Данные возвращаются через postMessage]
H --> I
I --> J[Отображение в приложении]
Отладка и разработка
Одна из приятных особенностей — встроенный механизм отладки:
iframe-мост сообщает об ошибках JavaScript, необработанных Promise-rejection, нарушениях CSP, сбоях при загрузке ресурсов, ошибках fetch, вызовах console.error() и неудачных запросах к данным Datasette обратно на родительскую страницу. Страница приложения показывает их в небольшой раскрывающейся панели ошибок над iframe. Также захватываются сообщения console.log() и вызовы data-хелперов Datasette в сворачиваемой панели логов под iframe.
Интеграция с LLM: приложения, написанные ИИ
Вот где начинается настоящая магия. Плагин Datasette Apps не зависит от LLM вообще, но эти самодостаточные приложения идеально подходят для написания современными LLM-моделями.
Форма создания приложения включает копируемый промпт. Этот промпт содержит всё, что модели нужно знать для создания нового приложения, включая схему выбранных баз данных. Это означает, что вы можете нажать «копировать», вставить в ChatGPT, Claude или Gemini, объяснить задачу — и есть хороший шанс, что модель выдаст код для создания приложения.
Если у вас установлен Datasette Agent, ваш ИИ-ассистент также получит инструменты для создания новых приложений и редактирования существующих — в стиле Claude Artifacts.
Вы можете опробовать Datasette Apps, войдя через GitHub на демо-инстанс agent.datasette.io.
Или запустите локально с помощью одной команды через uv:
uvx --prerelease=allow --with datasette-apps \
datasette --internal internal.db --root
При желании сразу подключить собственную базу данных — просто добавьте путь к .db-файлу в конец команды.
Предыстория: от экспериментов к ключевой фиче
Datasette Apps начался как попытка Уиллисона создать механизм Claude Artifacts для Datasette Agent, но он быстро понял, что паттерн с песочницей интересен гораздо шире, чем просто добавление кастомных приложений в чат-интерфейс, и превратил его в самостоятельную концепцию верхнего уровня в экосистеме Datasette.
С самого первого релиза Datasette предлагал гибкий бэкенд для создания кастомных HTML-приложений через свой JSON API. Один из первых проектов Уиллисона на Datasette — внутренний поисковик по документации во время его работы в Eventbrite: он импортировал документы из разных систем в SQLite по крону и раздавал их через экземпляр Datasette с кастомным HTML+JavaScript интерфейсом поиска.
Сравнение подходов: Datasette App vs. традиционное приложение
| Критерий | Datasette App | Традиционное приложение |
|---|---|---|
| Бэкенд | Встроен в Datasette | Отдельный сервис (Flask, FastAPI…) |
| База данных | SQLite через JSON API | Любая СУБД, отдельная настройка |
| Деплой | Один HTML-файл | Контейнер / сервер / CI-CD |
| Безопасность | iframe sandbox + CSP | Зависит от разработчика |
| Генерация через LLM | Готовый промпт из интерфейса | Нужно писать промпт вручную |
| Поддержка write-запросов | Через stored queries | Полная свобода |
| Статус | Alpha (0.1a2) | Stable |
Зачем это важно: мощь простоты
Опыт создания собственной коллекции HTML-инструментов и эксперименты с Claude Artifacts убедили Уиллисона в том, что добавление Datasette-бэкенда к самодостаточному HTML-фронтенду — это поразительно мощная комбинация. Представьте, насколько более полезными могли бы быть Claude Artifacts, если бы у них был доступ к постоянной реляционной базе данных. Именно это строится в Datasette Apps.
Запуск приложений в песочнице означает, что можно позволить большему числу людей создавать и делиться ими, и использовать ИИ-инструменты для их разработки без страха, что ошибки ИИ приведут к утечке или повреждению данных.
Итог
Datasette Apps — это не просто ещё один плагин. Это новая парадигма работы с данными, где граница между «посмотреть данные» и «сделать приложение поверх данных» практически исчезает. Саймон Уиллисон умело объединил три тренда: sandboxed execution (изолированное выполнение кода), SQLite как универсальная база данных и LLM-генерация кода — в один инструмент, который можно запустить одной командой в терминале.
Пока это альфа, но направление задано чётко: будущее — за приложениями, которые живут рядом с данными, а не отдельно от них.