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 154 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.
Datasette Desktop is 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
15th April 2026 #
Datasette 1.0a27 changes how CSRF protection works in a way that simplifies form and API integration, and introduces a new RenameTableEvent for when a table is renamed by a SQL query.
18th March 2026 #
Datasette 1.0a26 adds a column_types system allowing columns to carry additional type information such as email or url, or extra types defined by plugins. This alpha also adds a UI for selecting and sorting visible columns on a table page.
25th February 2026 #
Datasette 1.0a25 adds write_wrapper() and register_token_handler() plugin hooks.
29th January 2026 #
Datasette 1.0a24 introduces a new await request.form(files=True) method for accepting file uploads, plus various other changes.
5th November 2025 #
Datasette 0.65.2 and Datasette 1.0a21 have been released with a security fix for an open redirect error, see this advisory. The latest Datasette alphas also include a breaking change to Datasette's permission system, described in detail in A new SQL-powered permissions system in Datasette 1.0a20.
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.
Latest releases
15th April 2026
datasette-export-database 0.3a1
- Upgraded for compatibility with Datasette 1.0a27.
datasette 1.0a27 - An open source multi-tool for exploring and publishing data
CSRF protection no longer uses CSRF tokens
Datasette's token-based CSRF protection has been replaced with a mechanism based on the Sec-Fetch-Site and Origin request headers, which are supported by all modern browsers. See this article by Filippo Valsorda for more details of this approach. This removes the need for CSRF tokens in forms and AJAX requests. (#2689)
RenameTableEvent when a table is renamed
Renaming a table within Datasette will now fire a new RenameTableEvent, which plugins can use to react by updating ACL records or re-assigning comments or other associated records to the new table name. (#2681)
This event will not be fired if the table is renamed by SQL running in some other process.
The datasette.track_event() method can now be called from within a write operation (using database.execute_write() and related methods) and the event will be fired after the write transaction has successfully committed. (#2682)
Other changes
- New actor= parameter for
datasette.clientmethods, allowing internal requests to be made as a specific actor. This is particularly useful for writing automated tests. (#2688) - New
Database(is_temp_disk=True)option, used internally for the internal database. This helps resolve intermittent database locked errors caused by the internal database being in-memory as opposed to on-disk. (#2683) (#2684) - The
/<database>/<table>/-/upsertAPI (docs) now rejects rows withnullprimary key values. (#1936) - Improved example in the API explorer for the
/-/upsertendpoint (docs). (#1936) - The
/<database>.jsonendpoint now includes an"ok": truekey, for consistency with other JSON API responses. - call_with_supported_arguments() is now documented as a supported public API. (#2678
9th April 2026
datasette-gzip 0.3 - Add gzip compression to Datasette
- Depend on asgi-gzip >= 0.3 to avoid compressing
text/event-stream.
8th April 2026
datasette-graphql 3.0a1 - Datasette plugin providing an automatic GraphQL API for your SQLite databases
- Upgrade for compatibility with
datasette>=1.0a20. #102, #103
datasette-atom 0.10a0 - Datasette plugin that adds a .atom output format
- Compatible with Datasette 1.0 alphas.
dogsheep-beta 0.11 - Build a search index across content from multiple SQLite database tables and run faceted searches against it using Datasette
- Upgrade for compatibility with Datasette 1.0 alphas.
datasette-template-sql 1.0.3 - Datasette plugin for executing SQL queries from templates
- Upgraded for compatibility with Datasette 1.0a26+
1st April 2026
datasette-extract 0.3a0 - Import unstructured data (text and images) into structured tables
- Now uses datasette-llm to manage model configuration, which means you can control which models are available for extraction tasks using the
extractpurpose and LLM model configuration. #38
31st March 2026
llm 0.30 - 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.
- The register_models() plugin hook now takes an optional
model_aliasesparameter listing all of the models, async models and aliases that have been registered so far by other plugins. A plugin with@hookimpl(trylast=True)can use this to take previously registered models into account. #1389 - Added docstrings to public classes and methods and included those directly in the documentation.
18th March 2026
datasette 1.0a26 - An open source multi-tool for exploring and publishing data
New column_types system
Table columns can now have custom column types assigned to them, using the new column_types table configuration option or at runtime using a new UI and POST /<database>/<table>/-/set-column-type JSON API.
Built-in column types include url, email, and json, and plugins can register additional types using the new register_column_types() plugin hook. (#2664, #2671)
Column types can customize HTML rendering, validate values written through the insert, update, and upsert APIs, and transform values returned by the JSON API. They can optionally restrict themselves to specific SQLite column types using sqlite_types. This feature also introduces a new set-column-type permission for assigning column types to a table. (#2672)
The render_cell() plugin hook now receives a column_type argument containing the assigned type instance, and a column type's own render_cell() method takes priority over the plugin hook chain.
The datasette-files plugin will be the first to use this new feature.
UI for selecting columns and their order
Table and view pages now include a dialog for selecting and re-ordering visible columns. (#2661)
Other changes
- Fixed
allowed_resources("view-query", actor)so actor-specific canned queries are returned correctly. Any plugin that defines aresources_sql()method on aResourcesubclass needs to update to the new signature, see the resources_sql() method documentation for details. - Column actions can now be accessed in mobile view via a new "Column actions" button. Previously they were not available on mobile because table headers are not displayed there. (#2669, #2670)
- Row pages now render foreign key values as links to the referenced row. (#1592)
- The
startup()plugin hook now fires after metadata and internal schema tables have been populated, so plugins can reliably inspect that state during startup. (#2666)
17th March 2026
llm 0.29 - 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.
- The
-t/--templateoption now works correctly with the-x/--extractand--xl/--extract-lastflags. llm logsnow shows any additional model options in the Markdown output. #1322- New OpenAI models:
gpt-5.4,gpt-5.4-mini,gpt-5.4-nano. #1376