Find stories in data

PyPI Changelog Python 3.x License discord mastodon: @datasette

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.

All news

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 previous INSERT OR IGNORE followed by UPDATE behavior. (#652)
  • Python library users can opt-in to the previous implementation by passing use_old_upsert=True to the Database() 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

  • New feature: --all --exclude name_of_table lets you import all tables but exclude one or more by name. Thanks, giuli007. #11
  • Migrated from setup.py to pyproject.toml.

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 and LLM_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. #973
  • llm 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

  • Now depends on LLM and supports any model that has both async and schema support. You can also limit it to a subset of models using the new plugins.datasette-extract.models configuration list. #27

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 use mypy without a warning. #887
  • $ characters can now be used in templates by escaping them as $$. Thanks, @guspix. #904
  • LLM now uses pyproject.toml instead of setup.py. #908

10th April 2025

csvs-to-sqlite 1.3.1 - Convert CSV files into a SQLite database

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

All releases