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.
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
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.
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.
Latest releases
5th November 2025
datasette 1.0a21 - An open source multi-tool for exploring and publishing data
- Fixes an open redirect security issue: Datasette instances would redirect to
example.com/foo/barif you accessed the path//example.com/foo/bar. Thanks to James Jefferies for the fix. (#2429) - Fixed
datasette publish cloudrunto work with changes to the underlying Cloud Run architecture. (#2511) - New
datasette --get /path --headersoption for inspecting the headers returned by a path. (#2578) - New
datasette.client.get(..., skip_permission_checks=True)parameter to bypass permission checks when making requests using the internal client. (#2583)
datasette 0.65.2
- Fixes an open redirect security issue: Datasette instances would redirect to
example.com/foo/barif you accessed the path//example.com/foo/bar. Thanks to James Jefferies for the fix. #2429 - Upgraded for compatibility with Python 3.14.
- Fixed
datasette publish cloudrunto work with changes to the underlying Cloud Run architecture. #2511 - Minor upgrades to fix warnings, including
pkg_resourcesdeprecation.
4th November 2025
datasette-events-forward 0.1a3 - Forward Datasette events to another instance
- Upgraded for compatibility with Datasette 1.0a20.
datasette-tail 0.1a2 - Tools for tailing your database
- Upgraded for compatibility with Datasette 1.0a20.
3rd November 2025
datasette-search-all 1.1.5a0 - Datasette plugin for searching all searchable tables at once
- Upgraded for compatibility with Datasette 1.0a20. #22
datasette 1.0a20 - An open source multi-tool for exploring and publishing data
This alpha introduces a major breaking change prior to the 1.0 release of Datasette concerning how Datasette's permission system works.
Permission system redesign
Previously the permission system worked using datasette.permission_allowed() checks which consulted all available plugins in turn to determine whether a given actor was allowed to perform a given action on a given resource.
This approach could become prohibitively expensive for large lists of items - for example to determine the list of tables that a user could view in a large Datasette instance each plugin implementation of that hook would be fired for every table.
The new design uses SQL queries against Datasette's internal catalog tables to derive the list of resources for which an actor has permission for a given action. This turns an N x M problem (N resources, M plugins) into a single SQL query.
Plugins can use the new permission_resources_sql(datasette, actor, action) hook to return SQL fragments which will be used as part of that query.
Plugins that use any of the following features will need to be updated to work with this and following alphas (and Datasette 1.0 stable itself):
- Checking permissions with
datasette.permission_allowed()- this method has been replaced with datasette.allowed(). - Implementing the
permission_allowed()plugin hook - this hook has been removed in favor of permission_resources_sql(). - Using
register_permissions()to register permissions - this hook has been removed in favor of register_actions().
Consult the v1.0a20 upgrade guide for further details on how to upgrade affected plugins.
Plugins can now make use of two new internal methods to help resolve permission checks:
- datasette.allowed_resources() returns a
PaginatedResourcesobject with a.resourceslist ofResourceinstances that an actor is allowed to access for a given action (and a.nexttoken for pagination). - datasette.allowed_resources_sql() returns the SQL and parameters that can be executed against the internal catalog tables to determine which resources an actor is allowed to access for a given action. This can be combined with further SQL to perform advanced custom filtering.
Related changes:
- The way
datasette --rootworks has changed. Running Datasette with this flag now causes the root actor to pass all permission checks. (#2521) - Permission debugging improvements:
- The
/-/allowedendpoint shows resources the user is allowed to interact with for different actions. /-/rulesshows the raw allow/deny rules that apply to different permission checks./-/actionslists every available action./-/checkcan be used to try out different permission checks for the current actor.
- The
Other changes
- The internal
catalog_viewstable now tracks SQLite views alongside tables in the introspection database. (#2495) - Hitting the
/brings up a search interface for navigating to tables that the current user can view. A new/-/tablesendpoint supports this functionality. (#2523) - Datasette attempts to detect some configuration errors on startup.
- Datasette now supports Python 3.14 and no longer tests against Python 3.9.
24th October 2025
datasette-pretty-traces 0.6 - Prettier formatting for ?_trace=1 traces
- Add total request time, total SQL time and number of SQL queries to trace display. #9
21st October 2025
datasette-events-forward 0.1a2 - Forward Datasette events to another instance
- Pin to datasette==1.0a19. datasette/#2516
datasette-visible-internal-db 0.1.1a1 - Datasette plugin for making the internal database visible for debugging
- Pin to datasette==1.0a19. datasette/#2516
datasette-create-view 0.1a1 - Create a SQL view from a query
- Pin to datasette==1.0a19. datasette/#2516
datasette-write-ui 0.0.1a13 - Datasette UI plugin for editing and inserting rows
- Pin to datasette==1.0a19. datasette/#2516
datasette-plot 0.1.0a1 - Observable Plot Datasette plugin
- Pin to datasette==1.0a19. datasette/#2516
datasette-import 0.1a6 - Tools for importing data into Datasette
- Pin to datasette==1.0a19. datasette/#2516
datasette-events-db 0.1a1 - Log Datasette events to a database table
- Pin to datasette==1.0a19. datasette/#2516
datasette-public 0.3a4 - Make specific Datasette tables visible to the public
- Pin to datasette==1.0a19. datasette/#2516