Annotated version of this introductory video
Datasette is a tool for exploring and publishing data. It helps people take data of any shape, analyze and explore it, and publish it as an interactive website and accompanying API.
Datasette is aimed at data journalists, museum curators, archivists, local governments, scientists, researchers and anyone else who has data that they wish to share with the world. It is part of a wider ecosystem of 44 tools and 153 plugins dedicated to making working with structured data as productive as possible.
Try a demo and explore 33,000 power plants around the world, then follow the tutorial or take a look at some other examples of Datasette in action.
Then read how to get started with Datasette, subscribe to the monthly-ish newsletter and consider signing up for office hours for an in-person conversation about the project.
New: Datasette Desktop - a macOS desktop application for easily running Datasette on your own computer!
Exploratory data analysis
Import data from CSVs, JSON, database connections and more. Datasette will automatically show you patterns in your data and help you share your findings with your colleagues.
Instant data publishing
datasette publish
lets you instantly publish your data to hosting providers like Google Cloud Run, Heroku or Vercel.
Rapid prototyping
Spin up a JSON API for any data in minutes. Use it to prototype and prove your ideas without building a custom backend.
Latest news
6th February 2025 #
Datasette 1.0a17 is the latest Datasette 1.0 alpha release, with bug fixes and small feature improvements from the last few months.
7th October 2024 #
Python 3.13 was released today. Datasette 1.0a16 is compatible with Python 3.13, but Datasette 0.64.8 was not. The new Datasette 0.65 release fixes compatibility with the new version of Python.
5th August 2024 #
Datasette 1.0a14 includes some breaking changes to how metadata works for plugins, described in detail in the new upgrade guide. See also the annotated release notes that accompany this release.
18th February 2024 #
Datasette 1.0a10 is a focused alpha that changes some internal details about how Datasette handles transactions. The datasette.execute_write_fn()
internal method now wraps the function in a database transaction unless you pass transaction=False
.
16th February 2024 #
Datasette 1.0a9 adds basic alter table support to the JSON API, tweaks how permissions works and introduces some new plugin debugging utilities.
7th February 2024 #
Datasette 1.0a8 introduces several new plugin hooks, a JavaScript plugin system and moves plugin configuration from metadata.yaml
to datasette.yaml
. Read more about the release in the annotated release notes for 1.0a8.
1st December 2023 #
Datasette Enrichments is a new feature for Datasette that supports enriching data by running custom code against every selected row in a table. Read Datasette Enrichments: a new plugin framework for augmenting your data for more details, plus a video demo of enrichments for geocoding addresses and processing text and images using GPT-4.
30th November 2023 #
datasette-comments is a new plugin by Alex Garcia which adds collaborative commenting to Datasette. Alex built the plugin for Datasette Cloud, but it's also available as an open source package for people who are hosting their own Datasette instances. See Annotate and explore your data with datasette-comments on the Datasette Cloud blog for more details.
22nd August 2023 #
Datasette 1.0a4 has a fix for a security vulnerability in the Datasette 1.0 alpha series: the API explorer interface exposed the names of private databases and tables in public instances that were protected by a plugin such as datasette-auth-passwords, though not the actual content of those tables. See the security advisory for more details and workarounds for if you can't upgrade immediately. The latest edition of the Datasette Newsletter also talks about this issue.
15th August 2023 #
datasette-write-ui: a Datasette plugin for editing, inserting, and deleting rows introduces a new plugin adding add/edit/delete functionality to Datasette, developed by Alex Garcia. Alex built this for Datasette Cloud, and this post is the first announcement made on the new Datasette Cloud blog - see also Welcome to Datasette Cloud.
9th August 2023 #
Datasette 1.0a3 is an alpha release of Datasette that previews the new default JSON API design that’s coming in version 1.0 - the single most significant change planned for that 1.0 release.
1st July 2023 #
New tutorial: Data analysis with SQLite and Python. This tutorial, originally presented at PyCon 2023, includes a 2h45m video and an extensive handout that should be useful with or without the video. Topics covered include Python's sqlite3
module, sqlite-utils
, Datasette, Datasette Lite, advanced SQL patterns and more.
24th March 2023 #
I built a ChatGPT plugin to answer questions about data hosted in Datasette describes a new experimental Datasette plugin to enable people to query data hosted in a Datasette interface via ChatGPT, asking human language questions that are automatically converted to SQL and used to generate a readable response.
23rd February 2023 #
Using Datasette in GitHub Codespaces is a new tutorial showing how Datasette can be run in GitHub's free Codespaces browser-based development environments, using the new datasette-codespaces plugin.
28th January 2023 #
Examples of sites built using Datasette now includes screenshots of Datasette deployments that illustrate a variety of problems that can be addressed using Datasette and its plugins.
Latest releases
14th May 2025
llm 0.26a0 - CLI utility and Python library for interacting with Large Language Models from organizations like OpenAI, Anthropic and Gemini plus local models installed on your own machine.
This is the first alpha to introduce support for tools! Models with tool capability (which includes the default OpenAI model family) can now be granted access to execute Python functions as part of responding to a prompt.
Tools are supported by the command-line interface:
llm --functions '
def multiply(x: int, y: int) -> int:
"""Multiply two numbers."""
return x * y
' 'what is 34234 * 213345'
And in the Python API, using a new model.chain()
method for executing multiple prompts in a sequence:
import llm
def multiply(x: int, y: int) -> int:
"""Multiply two numbers."""
return x * y
model = llm.get_model("gpt-4.1-mini")
response = model.chain(
"What is 34234 * 213345?",
tools=[multiply]
)
print(response.text())
New tools can also be defined using the register_tools() plugin hook. They can then be called by name from the command-line like this:
llm -T multiply 'What is 34234 * 213345?'
Tool support is currently under active development. Consult this milestone for the latest status.
13th May 2025
datasette-chronicle 0.3 - Use sqlite-chronicle with tables in Datasette
- New trigger design, using sqlite-chronicle 0.4. #4
- Existing chronicle tables are automatically upgraded to the new design, maintaining version and timestamp data.
- Now uses the text "Enable row version tracking for this table" in the UI. #5
9th May 2025
sqlite-utils 4.0a0 - CLI tool and Python library for manipulating SQLite databases
- Upsert operations now use SQLite's
INSERT ... ON CONFLICT SET
syntax on all SQLite versions later than 3.23.1. This is a very slight breaking change for apps that depend on the previousINSERT OR IGNORE
followed byUPDATE
behavior. (#652) - Python library users can opt-in to the previous implementation by passing
use_old_upsert=True
to theDatabase()
constructor, see Alternative upserts using INSERT OR IGNORE. - Dropped support for Python 3.8, added support for Python 3.13. (#646)
sqlite-utils tui
is now provided by the sqlite-utils-tui plugin. (#648)- Test suite now also runs against SQLite 3.23.1, the last version (from 2018-04-10) before the new
INSERT ... ON CONFLICT SET
syntax was added. (#654)
5th May 2025
datasette-enrichments 0.5.1 - Tools for running enrichments against data stored in Datasette
- Fixed error about a missing table on server startup for some environments. #58
sqlite-diffable 0.6 - Tools for dumping/loading a SQLite database to diffable directory structure
llm 0.25 - CLI utility and Python library for interacting with Large Language Models from organizations like OpenAI, Anthropic and Gemini plus local models installed on your own machine.
- New plugin feature: register_fragment_loaders(register) plugins can now return a mixture of fragments and attachments. The llm-video-frames plugin is the first to take advantage of this mechanism. #972
- New OpenAI models:
gpt-4.1
,gpt-4.1-mini
,gpt-41-nano
,o3
,o4-mini
. #945, #965, #976. - New environment variables:
LLM_MODEL
andLLM_EMBEDDING_MODEL
for setting the model to use without needing to specify-m model_id
every time. #932 - New command:
llm fragments loaders
, to list all currently available fragment loader prefixes provided by plugins. #941 llm fragments
command now shows fragments ordered by the date they were first used. #973llm chat
now includes a!edit
command for editing a prompt using your default terminal text editor. Thanks, Benedikt Willi. #969- Allow
-t
and--system
to be used at the same time. #916 - Fixed a bug where accessing a model via its alias would fail to respect any default options set for that model. #968
- Improved documentation for extra-openai-models.yaml. Thanks, Rahim Nathwani and Dan Guido. #950, #957
llm -c/--continue
now works correctly with the-d/--database
option.llm chat
now accepts that-d/--database
option. Thanks, Sukhbinder Singh. #933
1st May 2025
datasette-query-assistant 0.1a3 - Query databases and tables with AI assistance
- Now depends on LLM to support multiple models, not just Anthropic. #13
22nd April 2025
datasette 1.0a19 - An open source multi-tool for exploring and publishing data
- Tiny cosmetic bug fix for mobile display of table rows. #2479
21st April 2025
datasette-comments 0.1.1.a2 - A Datasette plugin for commenting on tables, rows, and values
- Update plugin to work with latest Datasette 1.0 alpha
- Various UI improvements for comment icon on table view, bug fixes
17th April 2025
datasette-extract 0.1a10 - Import unstructured data (text and images) into structured tables
- Fixed bugs with floating point columns. #34
- Now strips unicode null characters entirely (GPT-4.1-mini returned these for an image). #35
datasette 1.0a18 - An open source multi-tool for exploring and publishing data
- Fix for incorrect foreign key references in the internal database schema. #2466
- The
prepare_connection()
hook no longer runs for the internal database. #2468 - Fixed bug where
link:
HTTP headers used invalid syntax. #2470 - No longer tested against Python 3.8. Now tests against Python 3.13.
- FTS tables are now hidden by default if they correspond to a content table. #2477
- Fixed bug with foreign key links to rows in databases with filenames containing a special character. Thanks, Jack Stratton. #2476
16th April 2025
datasette-extract 0.1a9 - Import unstructured data (text and images) into structured tables
11th April 2025
llm 0.25a0 - CLI utility and Python library for interacting with Large Language Models from organizations like OpenAI, Anthropic and Gemini plus local models installed on your own machine.
llm models --options
now shows keys and environment variables for models that use API keys. Thanks, Steve Morin. #903- Added
py.typed
marker file so LLM can now be used as a dependency in projects that usemypy
without a warning. #887 $
characters can now be used in templates by escaping them as$$
. Thanks, @guspix. #904- LLM now uses
pyproject.toml
instead ofsetup.py
. #908
10th April 2025
csvs-to-sqlite 1.3.1 - Convert CSV files into a SQLite database
- Upgraded for compatibility with recent Pandas and Click libraries. Thanks, Luighi Viton-Zorrilla. #99
9th April 2025
llm 0.24.2 - CLI utility and Python library for interacting with Large Language Models from organizations like OpenAI, Anthropic and Gemini plus local models installed on your own machine.
- Fixed a bug on Windows with the new
llm -t path/to/file.yaml
feature. #901