An open source multi-tool for exploring and publishing data

PyPI Changelog Python 3.x License

Annotated version of this introductory video

Datasette is a tool for exploring and publishing data. It helps people take data of any shape or size, 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 38 tools and 89 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 May 2022 #

Datasette Lite is a new way to run Datasette: entirely in your browser, thanks to the Pyodide project which provides a full Python environment compiled to WebAssembly. You can use it to explore any SQLite database file hosted on a CORS-enabled static hosting provider, which includes GitHub and GitHub Pages. Read more about this project in Datasette Lite: a server-side Python web application running in a browser.

12th April 2022 #

Datasette for geospatial analysis describes how Datasette can be used in conjunction with SpatiaLite to work with geospatial data, including details of several geospatial plugins and tools from the Datasette ecosystem.

23rd March 2022 #

Datasette 0.61 introduces two potentially backwards-incompatible changes in preparation for the forthcoming 1.0 release: hashed URL mode has been moved to a new plugin, and the way URLs are generated to tables or databases containing special characters such as . or / has changed. Datasette 0.61.1 fixes a small bug in that release. See also the annotated release notes for these two versions.

27th February 2022 #

The first two of an ongoing series of official Datasette tutorials are now available: Exploring a database with Datasette introduces the Datasette web interface and shows how it can be used to explore a new database, and Learn SQL with Datasette provides an introduction to SQL using Datasette as a learning environment.

13th January 2022 #

Datasette 0.60 adds a new filters_from_request plugin hook, new internal methods for writing to the database, better performance and various faceting improvements. See also the annotated release notes.

5th December 2021 #

Observable notebooks recently added a SQL cell type, allowing SQL queries to be executed as part of an interactive notebook workflow. Alex Garcia built a Datasette Client for these which allows you to excute queries against any Datasette instance and explore and visualize the results using JavaScript code running in a notebook.

14th October 2021 #

Datasette 0.59 adds column descriptions in metadata, a new register_command plugin hook, enhanced --cors support and a bunch of other fixes and documentation improvements. See also the annotated release notes.

8th September 2021 #

Datasette Desktop is a new macOS desktop application version of Datasette, which supports opening SQLite files on your computer, importing CSV files and installing plugins. I wrote more about how it works in Datasette Desktop—a macOS desktop application for Datasette.

28th July 2021 #

The Baked Data architectural pattern describes a pattern commonly used with Datasette where the content for a site is bundled inside a SQLite database file and included alongside templates and application code in a deployment to a serverless hosting provider.

15th July 2021 #

Datasette 0.58 has new plugin hooks, a huge performance improvement for faceting, support for Unix domain sockets and several other improvements. Read the annotated release notes for extra background and context on the release.

5th June 2021 #

Datasette 0.57 is out with an important security patch plus a number of new features and bug fixes. Datasette 0.56.1, also out today, provides the security patch for users who are not yet ready to upgrade to the latest version.

10th May 2021 #

Django SQL Dashboard is a new tool that brings a useful authenticated subset of Datasette to Django projects that are built on top of PostgreSQL.

28th March 2021 #

Datasette 0.56 has bug fixes and documentation improvements, plus some new documented internal APIs for plugin authors and SpatiaLite 5 bundled with the official Datasette Docker container.

18th February 2021 #

Datasette 0.55 adds support for cross-database SQL queries. You can now run datasette --crossdb one.db two.db and then run queries that join data from tables in both of those database files - see cross-database queries in the documentation for more details.

sqlite-utils 3.6 adds similar features: a db.attach(alias, filepath) Python API method and --attach alias filepath.db command-line option, both for attaching additional databases in order to execute cross-database queries.

7th February 2021 #

This new Video introduction to Datasette and sqlite-utils provides a full introduction to both Datasette and sqlite-utils in 17 minutes, including a live demo of creating a database from a CSV file and publishing it to Google Cloud Run.

All news

Latest releases

17th May 2022

datasette-upload-dbs 0.1.1 - Upload SQLite database files to Datasette

  • Fixed bug where file name field continued to be displayed during the upload. #3
  • Fixed bug where errors displayed using JavaScript did not provide an easy path to trying the upload again. #4

datasette-upload-dbs 0.1

  • Initial release. Authorized users can upload new SQLite database files to Datasette - they will be stored, served and will persist across server restarts. #1

16th May 2022

datasette-insert 0.7 - Datasette plugin for inserting and updating data

  • New /-/upsert/db/table?pk=id API endpoint for performing upserts, where partial JSON documents can be provided and those keys will be updated on existing row or used to create new rows if a matching row does not exist. #9

2nd May 2022

datasette 0.62a0 - An open source multi-tool for exploring and publishing data

  • Datasette now runs some SQL queries in parallel. This has limited impact on performance, see this research issue for details.
  • Datasette should now be compatible with Pyodide. (#1733)
  • datasette publish cloudrun has a new --timeout option which can be used to increase the time limit applied by the Google Cloud build environment. Thanks, Tim Sherratt. (#1717)
  • Spaces in database names are now encoded as + rather than ~20. (#1701)
  • <Binary: 2427344 bytes> is now displayed as <Binary: 2,427,344 bytes> and is accompanied by tooltip showing "2.3MB". (#1712)
  • Don't show the facet option in the cog menu if faceting is not allowed. (#1683)
  • Code examples in the documentation are now all formatted using Black. (#1718)
  • Request.fake() method is now documented, see Request object.

sqlite-utils 3.26.1 - CLI tool and Python utility functions for manipulating SQLite databases

  • Now depends on click-default-group-wheel, a pure Python wheel package. This means you can install and use this package with Pyodide, which can run Python entirely in your browser using WebAssembly. (#429)

Try that out using the Pyodide REPL:

```pycon

import micropip await micropip.install("sqlite-utils") import sqlite_utils db = sqlite_utils.Database(memory=True) list(db.query("select 3 * 5")) [{'3 * 5': 15}] ```

1st May 2022

s3-credentials 0.11 - A tool for creating credentials for accessing S3 buckets

  • New set-cors-policy and get-cors-policy for altering the CORS policy for a bucket, documented here. #47
  • Each command now shows example usage in --help. #67
  • New documentation page listing the --help for every command.

30th April 2022

datasette-copy-to-memory 0.2 - Copy database files into an in-memory database on startup

  • New replace: true plugin configuration option for replacing the file database with the in-memory one, rather than adding a new /db_memory route that duplicates that database. #6

datasette-dashboards 0.2.0 - Datasette plugin providing data dashboards from metadata

28th April 2022

datasette-copy-to-memory 0.1a3 - Copy database files into an in-memory database on startup

datasette-copy-to-memory 0.1a2

  • Fixed crash when attempting to load an immutable database. #3

datasette-copy-to-memory 0.1a1

datasette-copy-to-memory 0.1a0

  • Initial prototype: copies each attached database file to an in-memory database on startup. #1

datasette-gzip 0.2 - Add gzip compression to Datasette

  • No longer includes Starlette as a dependency. Now uses asgi-gzip, a smaller package which extracts the GZipMiddleware class from Starlette. #2

27th April 2022

datasette-gzip 0.1

  • Initial release. Adds gzip support to Datasette, respecting the Accept-Encoding HTTP header. A thin wrapper around the GZipMiddleware from Starlette.

26th April 2022

datasette-total-page-time 0.1 - Add a note to the Datasette footer measuring the total page load time

  • Initial implementation. Installing this plugin adds a "Page took 38.310ms" note to the Datasette footer.

All releases