<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Datasette Cloud</title><link href="https://www.datasette.cloud/blog/" rel="alternate"/><link href="https://www.datasette.cloud/blog/feed/" rel="self"/><id>https://www.datasette.cloud/blog/</id><updated>2026-05-01T20:24:42.428708+00:00</updated><entry><title>Introducing Datasette for Newsrooms</title><link href="https://www.datasette.cloud/blog/2025/datasette-for-newsrooms/" rel="alternate"/><author><name>Simon Willison, Alex Garcia</name></author><id>https://www.datasette.cloud/blog/2025/datasette-for-newsrooms/</id><summary type="html">&lt;p&gt;We’re excited to introduce &lt;strong&gt;&lt;a href="https://www.datasette.cloud/newsrooms/"&gt;Datasette for Newsrooms&lt;/a&gt;&lt;/strong&gt;, a new product suite from Datasette Cloud built specifically for investigative journalists and data teams. It's an all-in-one data store, search engine, and collaboration platform designed to make working with data in a newsroom easier, faster, and more transparent.&lt;/p&gt;
&lt;h2&gt;Built for how newsrooms work&lt;/h2&gt;
&lt;p&gt;News organizations today deal with troves of documents, spreadsheets, databases, and leaks. But too often, that data is siloed, hard to search, or dependent on a handful of experts to operate. Datasette for Newsrooms changes that.&lt;/p&gt;
&lt;p&gt;With Datasette Cloud you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Upload and organize&lt;/strong&gt; your data: CSVs, SQL dumps, document troves, and more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Process unstructured data with AI&lt;/strong&gt;, transforming messy data sources into searchable, filterable tables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search and filter&lt;/strong&gt; quickly with powerful full-text search, filters and facets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visualize&lt;/strong&gt; your data with built-in charts and maps, or export it to your favorite tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run SQL&lt;/strong&gt; directly in your browser, and share your queries with your team.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collaborate&lt;/strong&gt; with your team using comments and mentions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publish&lt;/strong&gt; your findings—entire tables or specific query results—transparently to your audience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Empower your data nerds&lt;/h2&gt;
&lt;p&gt;Does your newsroom have one over-worked data expert who everyone else depends on for pulling numbers, cleaning spreadsheets, and answering every question involving data?&lt;/p&gt;
&lt;p&gt;Datasette lets those data experts build a self-service portal for the rest of the team.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/newsrooms/1.png" alt="Screenshot of a database interface showing firearm background checks data. The page displays &amp;quot;home / nics-firearm-background-checks / background_checks&amp;quot; at the top with user &amp;quot;alex-staff&amp;quot; logged in. The table shows &amp;quot;&amp;gt;10,000 rows&amp;quot; of background check statistics by state for February 2025, with columns for permit, permit_recheck, handgun, long_gun, other, multiple, admin, and prepawn counts. States shown include Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, and Delaware with their corresponding numerical values." style="max-width: 80%; display: block; margin: 1em auto; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);"&gt;&lt;/p&gt;
&lt;p&gt;Reporters can search and filter data, run saved queries and visualize and export the results, independently or in collaboration with each other and the resident data nerds.&lt;/p&gt;
&lt;p&gt;Our goal is to making newsroom data workflows more collaborative and less reliant on gatekeepers.&lt;/p&gt;
&lt;p&gt;And when it’s time to go to press, you can publish the data behind the story for your readers, helping build trust and transparency in your reporting.&lt;/p&gt;
&lt;h2&gt;We'll help you get started&lt;/h2&gt;
&lt;p&gt;Sign up for our trial and we'll give you hands-on help getting started. We'll work with you to import your data and onboard your team. You can pay us in feedback!&lt;/p&gt;
&lt;p&gt;We’re offering &lt;strong&gt;one year of free access for nonprofit newsrooms&lt;/strong&gt;, and &lt;strong&gt;a two month trial for everyone else&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Reach us at &lt;strong&gt;&lt;a href="mailto:hello@datasette.cloud"&gt;hello@datasette.cloud&lt;/a&gt;&lt;/strong&gt; and we'll get you set up.&lt;/p&gt;</summary></entry><entry><title>datasette-pins — a new Datasette plugin for pinning tables and queries</title><link href="https://www.datasette.cloud/blog/2024/datasette-pins/" rel="alternate"/><author><name>Alex Garcia</name></author><id>https://www.datasette.cloud/blog/2024/datasette-pins/</id><summary type="html">&lt;p&gt;&lt;a href="https://github.com/datasette/datasette-pins"&gt;&lt;code&gt;datasette-pins&lt;/code&gt;&lt;/a&gt; is a new Datasette plugin that allows you to "pin" specific databases, tables, and queries to your Datasette homepage. It's part of a much larger redesign of the Datasette experience. Try it out!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2024/datasette-pins/hero.png"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/datasette/datasette-pins"&gt;&lt;code&gt;datasette-pins&lt;/code&gt;&lt;/a&gt; is a new open-source Datasette plugin that allows you to "pin" items like databases, tables, and queries to your Datasette homepage. &lt;/p&gt;
&lt;p&gt;Usually, the Datasette homepage only shows top-level databases and a few tables. But that's not very friendly or easy to use! Typically, you only care about a specific table or query at a time, so we hope these pins can act like shortcuts to get you where you want faster. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;datasette-pins&lt;/code&gt; can be configured to give specific users "write" permissions, allowing them to pin items. This option can be found in the database, table, and query action menus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2024/datasette-pins/table-example.png"/&gt;&lt;/p&gt;
&lt;h2&gt;How &lt;code&gt;datasette-pins&lt;/code&gt; works&lt;/h2&gt;
&lt;p&gt;This plugin uses the new &lt;a href="https://docs.datasette.io/en/latest/internals.html#internals-internal"&gt;internal database&lt;/a&gt; to store pinned items. This means pins persistent across restarts, as long as you provide a path to an internal database at startup like so:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bash
datasette my_data.db --internal internal.db&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pinned items will be stored in &lt;code&gt;datasette_pins_*&lt;/code&gt; tables inside &lt;code&gt;internal.db&lt;/code&gt;. You will never have to manually edit these tables, the plugin will do all the work for you! This &lt;a href="https://docs.datasette.io/en/latest/internals.html#internals-internal"&gt;internal database feature&lt;/a&gt; is only a part of Datasette 1.0 alpha releases. &lt;/p&gt;
&lt;p&gt;We use the new &lt;a href="https://docs.datasette.io/en/latest/plugin_hooks.html#top-homepage-datasette-request"&gt;&lt;code&gt;top_homepage()&lt;/code&gt;&lt;/a&gt; "template slot" to inject new content on top section of the homepage. This is a new plugin hook only available in recent Datasette 1.0 alpha releases.&lt;/p&gt;
&lt;h2&gt;Let us know what you think!&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/datasette/datasette-pins#installation"&gt;Try it out&lt;/a&gt; and tell us what you think! We eventually want to add more features, like "personal" pins and pinning plugin pages, and customizing how your pins appear. File an issue on GitHub with any bugs or ideas you come up with.&lt;/p&gt;</summary></entry><entry><title>Extracting data from unstructured text and images with Datasette and GPT-4 Turbo</title><link href="https://www.datasette.cloud/blog/2024/datasette-extract/" rel="alternate"/><author><name>Simon Willison</name></author><id>https://www.datasette.cloud/blog/2024/datasette-extract/</id><summary type="html">&lt;p&gt;Clean data, with well defined columns and rows, is a beautiful thing - the ideal starting point for any data analysis or visualization project. Sadly, very little of the world's interesting data is published in a structured format that we can start using straight away. &lt;a href="https://datasette.io/plugins/datasette-extract"&gt;datasette-extract&lt;/a&gt; is a new tool for Datasette that uses GPT-4 Turbo to create and populate database tables using data extracted from unstructured text and images.&lt;/p&gt;
&lt;p&gt;Processing unstructured data is one of the most directly useful applications of Large Language Models - the technology behind tools like ChatGPT and Google Gemini.&lt;/p&gt;
&lt;p&gt;OpenAI today made their GPT-4 Turbo with Vision model &lt;a href="https://twitter.com/OpenAIDevs/status/1777769463258988634"&gt;generally available via their API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://datasette.io/plugins/datasette-extract"&gt;Datasette Extract&lt;/a&gt; uses that API to convert text and images into structured table data. Here's &lt;a href="https://www.youtube.com/watch?v=g3NtJatmQR0"&gt;a demo video&lt;/a&gt; of the new plugin in action:&lt;/p&gt;
&lt;iframe src="https://www.youtube.com/embed/g3NtJatmQR0?si=OcLs6MqykLTFvZb3" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen style="aspect-ratio: 16 / 9; width: 100%; height: auto;"&gt;&lt;/iframe&gt;

&lt;h2&gt;How to use Datasette Extract&lt;/h2&gt;
&lt;p&gt;Once the &lt;code&gt;datasette-extract&lt;/code&gt; plugin is installed, Datasette will gain a new option in the Database action menu: "Create table with AI extracted data".&lt;/p&gt;
&lt;p&gt;&lt;img alt="A menu of options for a database - one of them reads Create table with AI extracted data" src="https://datasette-cloud-assets.s3.amazonaws.com/blog/datasette-extract-1.1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;This will take you to a page where you can configure the table you would like to create.&lt;/p&gt;
&lt;p&gt;Here I'm creating an &lt;code&gt;events&lt;/code&gt; table with &lt;code&gt;event_title&lt;/code&gt;, &lt;code&gt;event_date&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;venue_name&lt;/code&gt; and &lt;code&gt;start_time&lt;/code&gt; columns.&lt;/p&gt;
&lt;p&gt;All of these are text columns. I've set a hint of &lt;code&gt;YYYY-MM-DD&lt;/code&gt; for the &lt;code&gt;event_date&lt;/code&gt; column and &lt;code&gt;HH:MM 24hr&lt;/code&gt; for the &lt;code&gt;start_time&lt;/code&gt; column.&lt;/p&gt;
&lt;p&gt;&lt;img alt="The Extract data and create a new table form. The table name has been set and the five different columns have been configured." src="https://datasette-cloud-assets.s3.amazonaws.com/blog/datasette-extract-2.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Next, paste data into the box below. This can be completely unstructured - in this case I hit &lt;code&gt;Command-A&lt;/code&gt; and then &lt;code&gt;Command-C&lt;/code&gt; on the &lt;a href="https://bachddsoc.org/calendar/"&gt;upcoming events calendar&lt;/a&gt; for the &lt;a href="https://bachddsoc.org/"&gt;Bach Dancing &amp;amp; Dynamite Society&lt;/a&gt; jazz venue in Half Moon Bay.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Paste data here, or drag and drop text or PDF files: a bunch of text about events at the venue has been pasted in. There is an optional image upload field, a field for additional instructions containing Skip the events that are livestreams and an Extract button." src="https://datasette-cloud-assets.s3.amazonaws.com/blog/datasette-extract-3.1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Hit that "Extract" button an Datasette will send the text to OpenAI, along with the schema for the table you want to create.&lt;/p&gt;
&lt;p&gt;The next screen shows the extracted data as it flows in.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Extract progress - extracting to table content/events - a loading spinner, and then some JSON showing the first event with an event_title, event_date, description, venue_name and start_time." src="https://datasette-cloud-assets.s3.amazonaws.com/blog/datasette-extract-4.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Once the extraction is complete you'll be redirected to the newly created database table:&lt;/p&gt;
&lt;p&gt;&lt;img alt="A Datasette table called events, showing 15 rows sorted by rowid descending." src="https://datasette-cloud-assets.s3.amazonaws.com/blog/datasette-extract-5.jpg"&gt;&lt;/p&gt;
&lt;p&gt;In addition to pasted text, the plugin can handle images. Here's a screenshot image I took of event information from the &lt;a href="https://www.visithalfmoonbay.org/events/"&gt;Visit Half Moon Bay events calendar&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="A grid of nine images, each with a start time and a date and a venue." src="https://datasette-cloud-assets.s3.amazonaws.com/blog/datasette-extract-6.jpg"&gt;&lt;/p&gt;
&lt;p&gt;In the demo I uploaded this image using the "Extract data into this table with AI" table action menu, which meant I didn't have to configure the columns again.&lt;/p&gt;
&lt;p&gt;The first time I tried this it didn't quite work: the events in the image did not have a visible year, and GPT-4 Turbo defaulted to assuming they took place in 2019 for some reason.&lt;/p&gt;
&lt;p&gt;I fixed this by adding an extra hint to the &lt;code&gt;event_date&lt;/code&gt; column telling it to assume 2024. Running the import again successfully extracted the events with the correct dates.&lt;/p&gt;
&lt;h2&gt;Try this out yourself&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://datasette.io/plugins/datasette-extract"&gt;Datasette Extract plugin&lt;/a&gt; is available for you to use with the Datasette open source project right now, or &lt;a href="https://www.datasette.cloud/preview/"&gt;get in touch&lt;/a&gt; if you'd like to try It out on Datasette Cloud.&lt;/p&gt;</summary></entry><entry><title>datasette-plot - a new Datasette Plugin for building data visualizations</title><link href="https://www.datasette.cloud/blog/2023/datasette-plot/" rel="alternate"/><author><name>Alex Garcia</name></author><id>https://www.datasette.cloud/blog/2023/datasette-plot/</id><summary type="html">&lt;p&gt;&lt;a href="https://github.com/datasette/datasette-plot"&gt;&lt;code&gt;datasette-plot&lt;/code&gt;&lt;/a&gt; is a new Datasette plugin for making visualizations from tables and SQL queries inside of Datasette. It's a spiritual successor of &lt;a href="https://datasette.io/plugins/datasette-vega"&gt;datasette-vega&lt;/a&gt;, with the goal of supporting more data visualization types and better integration with new Datasette features. &lt;a href="https://demos.datasette.cloud/data/palmerpenguins"&gt;Try out the demo&lt;/a&gt;, or &lt;a href="https://github.com/datasette/datasette-plot?tab=readme-ov-file#installation"&gt;install it&lt;/a&gt; on your Datasette instances today!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-plot/hero.jpeg"/&gt;&lt;/p&gt;
&lt;p&gt;It seems like everyday there's a new frontend JavaScript framework being invented, but JavaScript data visualization frameworks are a once-in-a-lifetime phenomenon. Sure, there are the famous ones like &lt;a href="https://vega.github.io/vega/"&gt;Vega&lt;/a&gt;, &lt;a href="https://recharts.org/en-US/"&gt;Recharts&lt;/a&gt;, and &lt;a href="https://github.com/plotly/plotly.js/"&gt;Plotly.js&lt;/a&gt;, all of which depend on some way on &lt;a href="https://d3js.org/"&gt;D3&lt;/a&gt;, the quintessential low-level JavaScript visualization library. But building re-usable data viz libraries and components is hard, so novel data viz frameworks are rare.&lt;/p&gt;
&lt;p&gt;Which is why I was shocked when &lt;a href="https://observablehq.com/plot/"&gt;Observable Plot&lt;/a&gt; was released in 2021! Created by the original D3 creator Mike Bostock, maintained by the &lt;a href="https://observablehq.com/"&gt;Observable&lt;/a&gt; team. Even if you spend just a few minutes &lt;a href="https://observablehq.com/@observablehq/plot-gallery"&gt;scrolling through the Plot Gallery&lt;/a&gt;, you'll soon understand how intricate and beautiful data visualization can be in Plot.&lt;/p&gt;
&lt;p&gt;But more importantly - the code used to create these visualization is short! Take for example the &lt;a href="https://observablehq.com/@observablehq/plot-stacked-area-chart"&gt;Stacked area chart&lt;/a&gt; example in Plot. Normally, building stacked area charts in pure D3 would typically be a painful and long experience, filled with bugs are sadness (trust me on this). But in Plot, it basically boils down to a single line:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Plot.areaY(unemployment,  {
    x: &amp;quot;date&amp;quot;, 
    y: &amp;quot;unemployed&amp;quot;, 
    fill: &amp;quot;industry&amp;quot;, 
    title: &amp;quot;industry&amp;quot;
}).plot()
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So, as we reviewed what data visualizations options we have in Datasette, we decided to combine Plot's expressive, simple charts with Datasette's collaborative and explorative interface. &lt;/p&gt;
&lt;p&gt;The result — &lt;a href="https://github.com/datasette/datasette-plot"&gt;&lt;code&gt;datasette-plot&lt;/code&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;h2&gt;How datasette-plot works&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;datasette-plot&lt;/code&gt; is a Datasette plugin that can be install with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;datasette install datasette-plot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once installed, navigate to a table or SQL query in Datasette (or &lt;a href="https://demos.datasette.cloud/data/palmerpenguins"&gt;try this demo&lt;/a&gt;), and you'll see a new "Show plot" option like so:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-plot/table-1.jpeg"/&gt;&lt;/p&gt;
&lt;p&gt;Once clicked, you'll be greeted with a default chart with some columns pre-configured.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-plot/table-2.jpeg"/&gt;&lt;/p&gt;
&lt;p&gt;In this case, the default "visualization mark" is a single &lt;a href="https://observablehq.com/plot/marks/dot"&gt;Dot plot&lt;/a&gt;. The first two numerical columns are used as X and Y, with default black dots. &lt;/p&gt;
&lt;p&gt;Let's make it pop with some color! In this &lt;a href="https://allisonhorst.github.io/palmerpenguins/articles/intro.html"&gt;Palmer Penguins dataset&lt;/a&gt;, we'll change the color of the dots based on which island the penguin lives on.&lt;/p&gt;
&lt;video width=600 controls autoplay type="video/mp4" style="display: block; margin: 0 auto" &gt;
  &lt;source src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-plot/dsc-plot-01.mp4" type="video/mp4"&gt;
    Your browser does not support the video tag.
&lt;/video&gt;

&lt;p&gt;And &lt;code&gt;datasette-plot&lt;/code&gt; doesn't just allow one visualization mark, we can have multiple! Let's add a &lt;a href="https://observablehq.com/plot/marks/linear-regression"&gt;linear regression mark&lt;/a&gt; for each island group.&lt;/p&gt;
&lt;video width=600 controls autoplay type="video/mp4" style="display: block; margin: 0 auto" &gt;
  &lt;source src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-plot/dsc-plot-02.mp4" type="video/mp4"&gt;
    Your browser does not support the video tag.
&lt;/video&gt;

&lt;p&gt;And for good measure, one more linear regression mark for the entire dataset.&lt;/p&gt;
&lt;video width=600 controls autoplay type="video/mp4" style="display: block; margin: 0 auto" &gt;
  &lt;source src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-plot/dsc-plot-03.mp4" type="video/mp4"&gt;
    Your browser does not support the video tag.
&lt;/video&gt;

&lt;p&gt;Once you have configured your visualization to your liking, you can share your creation with friends and coworkers with the &lt;code&gt;Link to this plot&lt;/code&gt; option right below your chart. That link will encode your visualization options in the URL like so:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;http://localhost:8000/test/unemployment?_plot-mark=%7B%22mark%22%3A%22area-y%22%2C%22options%22%3A%7B%22x%22%3A%22date%22%2C%22y%22%3A%22unemployed%22%2C%22fill%22%3A%22industry%22%2C%22tip%22%3Atrue%7D%7D&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It's a bit long and unwieldily (&lt;a href="https://github.com/datasette/datasette-short-links"&gt;may change&lt;/a&gt; in the future  👀), but it will link directly back to the same table/SQL query and visualization that you have configured.&lt;/p&gt;
&lt;h2&gt;Future datasette-plot features&lt;/h2&gt;
&lt;p&gt;This is initial release of &lt;code&gt;datasette-plot&lt;/code&gt; is a small proof-of-concept experiment to see if Plot was a good choice for Datasette. And so far, it is! We plan on making incremental improvements to this plugin to make it an integral part of your workflows. Some of our planned improvements include:&lt;/p&gt;
&lt;h3&gt;More visualization marks&lt;/h3&gt;
&lt;p&gt;Observable Plot supports &lt;a href="https://observablehq.com/plot/features/marks"&gt;dozens of different visualzation marks&lt;/a&gt;, but &lt;code&gt;datasette-plot&lt;/code&gt; only uses 4 of them so far! We plan to add more, so &lt;a href="https://github.com/datasette/datasette-plot/issues/1"&gt;let us know which you'd like to see&lt;/a&gt;!&lt;/p&gt;
&lt;h3&gt;Better sharing options&lt;/h3&gt;
&lt;p&gt;Sharing by URL is great, it would be nice to create re-usable data visualization for use across your tables. Maybe you have a chart that you want to re-use every month, or on different tables with similar schemas. Currently you'd have to rebuild the chart from scratch on every new table, which isn't very fun. &lt;a href="https://github.com/datasette/datasette-plot/issues/2"&gt;Let us know what you think&lt;/a&gt;!&lt;/p&gt;
&lt;h3&gt;Richer data types&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;datasette-plot&lt;/code&gt; defaults to only strings/numbers/nulls when plotting data. The downside: no dates! Observable Plot requires JavaScript &lt;code&gt;Date()&lt;/code&gt; objects to properly plot time-series data. &lt;a href="https://github.com/datasette/datasette-plot/issues/3"&gt;Follow #3&lt;/a&gt; for updates on this!&lt;/p&gt;</summary></entry><entry><title>Annotate and explore your data with datasette-comments</title><link href="https://www.datasette.cloud/blog/2023/datasette-comments/" rel="alternate"/><author><name>Alex Garcia</name></author><id>https://www.datasette.cloud/blog/2023/datasette-comments/</id><summary type="html">&lt;p&gt;&lt;a href="https://datasette.io/plugins/datasette-comments"&gt;datasette-comments&lt;/a&gt; is a new Datasette plugin for collaborative discussions on your Datasette. You can leave comments on specific rows of your SQLite tables, @mention your collaborators and coworkers, track your work with hashtags, and more. Check out our &lt;a href="https://demos.datasette.cloud/data/documents"&gt;demo read-only instance&lt;/a&gt;, and try it out today with &lt;a href="https://www.datasette.cloud/"&gt;Datasette Cloud&lt;/a&gt; or &lt;a href="https://datasette.io/plugins/datasette-comments"&gt;self-host it yourself&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-comments/hero.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Data exploration is an inherently collaborative and social process. Rarely do you ever work with data by yourself: eventually you need to bring in a coworker, manager, or rubber duck to make sense of it all. &lt;/p&gt;
&lt;p&gt;Datasette, &lt;a href="https://datasette.io/"&gt;a tool for exploring and publishing data&lt;/a&gt;, is already social, to some degree. You can share URLs that link directly to specific tables, rows, and SQL queries of your database. But that requires a "3rd party" platform to share those messages, like a separate Slack, Teams chat, or email thread.&lt;/p&gt;
&lt;p&gt;Until now!&lt;/p&gt;
&lt;h2&gt;datasette-comments for collaborative exploration&lt;/h2&gt;
&lt;p&gt;datasette-comments is a new Datasette plugin that allows you to communicate with your coworkers or teammates all inside Datasette, without the back-and-forth of Slack or emails. It is free, open-source software that you can run yourself, and an integral feature to &lt;a href="https://www.datasette.cloud/"&gt;Datasette Cloud&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once setup, you can leave comments on individual rows inside the Datasette UI. Comments live in threads on specific rows, and can be accessed from table or row pages.&lt;/p&gt;
&lt;video width=600 controls autoplay style="display: block; margin: 0 auto" &gt;
  &lt;source src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-comments/basic.mp4" type="video/mp4"&gt;
    Your browser does not support the video tag.
&lt;/video&gt;

&lt;p&gt;You can "at mention" coworkers, to bring attention to issues, ask for help, or share new insights!&lt;/p&gt;
&lt;video width=600 controls autoplay type="video/mp4" style="display: block; margin: 0 auto" &gt;
  &lt;source src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-comments/mention.mp4" type="video/mp4"&gt;
    Your browser does not support the video tag.
&lt;/video&gt;

&lt;p&gt;And even "react" to others messages!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-comments/reactions.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Once your discussion ends, you can "resolve" the entire thread to keep everyone focused.&lt;/p&gt;
&lt;p&gt;You can even leave "tags" in comments, to organize your discussions!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-comments/table-inline.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Finally, the comments activity page allows you to search through all your discussions, while filtering by comment table location, authors, hashtags, and more. &lt;/p&gt;
&lt;div style="display: flex;"&gt;
&lt;img style="width: 50%; display: block;" src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-comments/activity.jpg"/&gt;

&lt;img style="width: 50%; display: block;" src="https://datasette-cloud-assets.s3.amazonaws.com/blog/2023/datasette-comments/activity-filter.jpg"/&gt;
&lt;/div&gt;

&lt;h2&gt;How datasette-comments works&lt;/h2&gt;
&lt;p&gt;datasette-comments is a good ol' fashion, open source &lt;a href="https://datasette.io/plugins"&gt;Datasette plugin&lt;/a&gt;. It extensively uses the new &lt;a href="https://docs.datasette.io/en/latest/internals.html#datasette-s-internal-database"&gt;internal database feature&lt;/a&gt; to store comments. If you make comments on rows inside of &lt;code&gt;your_data.db&lt;/code&gt;, the comments themselves are stored inside the separate &lt;code&gt;internal.db&lt;/code&gt; database.&lt;/p&gt;
&lt;p&gt;The "frontend" requires a lot of interaction, local state, and data updates. So instead of traditional &lt;a href="https://docs.datasette.io/en/latest/custom_templates.html"&gt;Datasette Jinja templates&lt;/a&gt;, we opted for using  &lt;a href="https://preactjs.com/"&gt;preact&lt;/a&gt;  to make the frontend components, and &lt;a href="https://esbuild.github.io/"&gt;esbuild&lt;/a&gt; as the build tool.&lt;/p&gt;
&lt;h2&gt;Future datasette-comments features&lt;/h2&gt;
&lt;p&gt;The current datasette-comments release is full of neat features, but is still in beta. We have many feature we want to include in the near future, including a user-facing API, notifications, and more.&lt;/p&gt;
&lt;h3&gt;An API to create comments&lt;/h3&gt;
&lt;p&gt;We plan on adding an API to programmatically create comments from outside workflows. For example, you may have a script that automatically create a comment on rows where a column meets a condition (ex &lt;code&gt;dollar_amount &amp;gt; 100.0&lt;/code&gt; or &lt;code&gt;status == 'overdue'&lt;/code&gt;). &lt;/p&gt;
&lt;p&gt;Additionally, you could use the comments API to defer manual triage to a ChatGPT-powered assistant. If it thinks a row has an interesting enough row for human intervention, leave a comment and @ mention you for further review.&lt;/p&gt;
&lt;h3&gt;Comment notifications&lt;/h3&gt;
&lt;p&gt;We also aim to improve "notifications" when comments are left, especially when you are mentioned by coworkers. A native inbox inside Datasette would be great, but also integrations with 3rd party services like Slack and emails, so you're always on-top of conversations you're a part of.&lt;/p&gt;
&lt;h3&gt;Your ideas!&lt;/h3&gt;
&lt;p&gt;Datasette Comments is open source and built in the public. If you have any feature request, ideas, or suggestion to improve Comments, feel free to &lt;a href="https://github.com/datasette/datasette-comments/discussions"&gt;start a discussion on Github&lt;/a&gt;, or &lt;a href="https://discord.gg/FkVK5mEMZ5"&gt;start a conversation in our Discord&lt;/a&gt;!&lt;/p&gt;</summary></entry></feed>