` element, to help with advanced CSS customization. ([#1446](https://github.com/simonw/datasette/issues/1446))",107914493,datasette,
https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.1,19669553,MDc6UmVsZWFzZTE5NjY5NTUz,0.1,master,0.1,0,9599,simonw,0,2019-08-31T02:46:58Z,2019-08-31T02:58:32Z,First usable release.,205429375,swarm-to-sqlite,
https://github.com/dogsheep/genome-to-sqlite/releases/tag/0.1,20114205,MDc6UmVsZWFzZTIwMTE0MjA1,0.1,master,0.1,0,9599,simonw,0,2019-09-19T15:38:10Z,2019-09-19T15:41:17Z,First release,209590345,genome-to-sqlite,
https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.1,20506896,MDc6UmVsZWFzZTIwNTA2ODk2,0.1,master,0.1,0,9599,simonw,0,2019-10-07T05:07:37Z,2019-10-07T05:18:20Z,Initial release,213286752,pocket-to-sqlite,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1,30481804,MDc6UmVsZWFzZTMwNDgxODA0,0.1,main,0.1,0,9599,simonw,0,2020-09-01T06:10:44Z,2020-09-01T06:12:05Z,"- Optimize the FTS table and vacuum the database. #4
- First non-alpha release",197431109,dogsheep-beta,
https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.1,32428098,MDc6UmVsZWFzZTMyNDI4MDk4,0.1,main,0.1,0,9599,simonw,0,2020-10-11T21:46:09Z,2020-10-11T21:47:39Z,"- Initial release, with support for importing ENEX files.",303218369,evernote-to-sqlite,
https://github.com/dogsheep/apple-notes-to-sqlite/releases/tag/0.1,95017974,RE_kwDOJHON9s4Fqdv2,0.1,main,0.1,0,9599,simonw,0,2023-03-09T05:11:00Z,2023-03-09T05:12:12Z,"- Initial working version. `apple-notes-to-sqlite notes.db` dumps your notes out to a SQLite database. [#2](https://github.com/dogsheep/apple-notes-to-sqlite/issues/2)
- `apple-notes-to-sqlite --dump` outputs them to standard output as newline-delimited JSON. [#3](https://github.com/dogsheep/apple-notes-to-sqlite/issues/3)",611552758,apple-notes-to-sqlite,
https://github.com/dogsheep/github-to-sqlite/releases/tag/0.1.1,19993251,MDc6UmVsZWFzZTE5OTkzMjUx,0.1.1,master,0.1.1,0,9599,simonw,0,2019-09-14T19:19:33Z,2019-09-14T19:42:08Z,* Fix bug in authentication handling code,207052882,github-to-sqlite,
https://github.com/simonw/sqlite-utils/releases/tag/0.10,15439849,MDc6UmVsZWFzZTE1NDM5ODQ5,0.10,master,0.10,0,9599,simonw,0,2019-02-07T05:17:52Z,2019-02-08T05:19:33Z,https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v0-10,140912432,sqlite-utils,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.10,20721291,MDc6UmVsZWFzZTIwNzIxMjkx,0.10,master,0.10,0,9599,simonw,0,2019-10-15T18:53:53Z,2019-10-15T18:56:09Z,"* favorites command now populates `favorited_by` table - #14
* favorites `--stop_after` option - #20
* Store unescaped `full_text` of Tweet - #21 ",206156866,twitter-to-sqlite,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.10,35382391,MDc6UmVsZWFzZTM1MzgyMzkx,0.10,main,0.10,0,9599,simonw,0,2020-12-16T21:27:04Z,2020-12-16T21:28:13Z,"- Now depends on [sqlite-utils](https://github.com/simonw/sqlite-utils) >= 3.0. #30
- The user's original search term is now passed to the `display_sql` SQL query as the `:q` parameter. #29
",197431109,dogsheep-beta,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.10.1,35520026,MDc6UmVsZWFzZTM1NTIwMDI2,0.10.1,main,0.10.1,0,9599,simonw,0,2020-12-19T06:18:01Z,2020-12-19T06:19:13Z,- Fix for error if search query contains hyphens such as `github-to-sqlite`. #31 ,197431109,dogsheep-beta,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.10.2,44537329,MDc6UmVsZWFzZTQ0NTM3MzI5,0.10.2,main,0.10.2,0,9599,simonw,0,2021-06-13T14:37:17Z,2021-06-13T14:38:09Z,- Fixed bug where searches consisting only of whitespace caused a server error. [#33](https://github.com/dogsheep/dogsheep-beta/issues/33),197431109,dogsheep-beta,
https://github.com/simonw/sqlite-utils/releases/tag/0.11,15731282,MDc6UmVsZWFzZTE1NzMxMjgy,0.11,master,0.11,0,9599,simonw,0,2019-02-08T05:23:50Z,2019-02-23T02:15:34Z,https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v0-11,140912432,sqlite-utils,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.11,20754277,MDc6UmVsZWFzZTIwNzU0Mjc3,0.11,master,0.11,0,9599,simonw,0,2019-10-16T19:37:10Z,2019-10-16T19:38:42Z,"* Added `--since_id` and `--since` to `user-timeline` command, refs #20
* `--since` and `--since_id` options for `home-timeline`, closes #19
* `import` command now works on files and directories, closes #22 ",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.11.1,20758324,MDc6UmVsZWFzZTIwNzU4MzI0,0.11.1,master,0.11.1,0,9599,simonw,0,2019-10-16T19:46:35Z,2019-10-16T22:31:51Z,"* Fix bugs running `home-timeline --since` from scratch. If tables were missing, script would throw an error.",206156866,twitter-to-sqlite,
https://github.com/simonw/sqlite-utils/releases/tag/0.12,15731354,MDc6UmVsZWFzZTE1NzMxMzU0,0.12,master,0.12,0,9599,simonw,0,2019-02-23T02:22:28Z,2019-02-23T02:31:29Z,https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v0-12,140912432,sqlite-utils,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.12,20783590,MDc6UmVsZWFzZTIwNzgzNTkw,0.12,master,0.12,0,9599,simonw,0,2019-10-17T17:57:33Z,2019-10-17T18:00:28Z,"* The `source` column for a tweet is now a foreign key to a new `sources` table - #12
* New migrations system to upgrade existing databases to handle the new `source` column extraction - #23
* Experimental implementation of new `twitter-to-sqlite search tweets.db search-term` command, which runs a search and saves the tweets from that search - #3
* Fixed bug where sometimes a user record for the authenticated user was not persisted to the `users` table",206156866,twitter-to-sqlite,
https://github.com/simonw/sqlite-utils/releases/tag/0.13,15739051,MDc6UmVsZWFzZTE1NzM5MDUx,0.13,master,0.13,0,9599,simonw,0,2019-02-24T06:54:43Z,2019-02-24T07:00:14Z,https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v0-13,140912432,sqlite-utils,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.13,21073645,MDc6UmVsZWFzZTIxMDczNjQ1,0.13,master,0.13,0,9599,simonw,0,2019-10-30T02:20:09Z,2019-10-30T02:22:30Z,- New `mentions-timeline` command (#26),206156866,twitter-to-sqlite,
https://github.com/simonw/sqlite-utils/releases/tag/0.14,15744513,MDc6UmVsZWFzZTE1NzQ0NTEz,0.14,master,0.14,0,9599,simonw,0,2019-02-24T23:11:51Z,2019-02-24T23:15:16Z,https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v0-14,140912432,sqlite-utils,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.14,21180989,MDc6UmVsZWFzZTIxMTgwOTg5,0.14,master,0.14,0,9599,simonw,0,2019-11-04T05:32:37Z,2019-11-04T05:33:56Z,"* `search` command gained `--since_id` and `--since` options, for retrieving tweets since the last time the search was run
* `search` command is [now documented](https://github.com/dogsheep/twitter-to-sqlite/blob/0.14/README.md#running-searches). Closes #3.",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.15,21342008,MDc6UmVsZWFzZTIxMzQyMDA4,0.15,master,0.15,0,9599,simonw,0,2019-11-09T20:12:32Z,2019-11-09T20:13:07Z,"- Import command no longer fails on empty files - #29
- Fixed bug in `followers` command - #30
- `following` table now has indexes - #28",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.16,23471420,MDc6UmVsZWFzZTIzNDcxNDIw,0.16,master,0.16,0,9599,simonw,0,2020-02-07T07:42:45Z,2020-02-07T07:44:53Z,New `friends` command for importing accounts that a specific user follows.,206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.17,24722801,MDc6UmVsZWFzZTI0NzIyODAx,0.17,master,0.17,0,9599,simonw,0,2020-03-20T19:22:37Z,2020-03-20T19:23:40Z,"* Upgraded to latest `sqlite-utils` (currently 2.4.2)
* This fixed a bug with `user-timeline` - #34",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.18,24724394,MDc6UmVsZWFzZTI0NzI0Mzk0,0.18,master,0.18,0,9599,simonw,0,2020-03-20T20:16:46Z,2020-03-20T20:19:42Z,"* `twitter-to-sqlite user-timeline` command now accepts `--sql` and `--attach` and `--ids` options, and can also accept multiple screen names or user IDs as command arguments. #35",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.19,24728163,MDc6UmVsZWFzZTI0NzI4MTYz,0.19,master,0.19,0,9599,simonw,0,2020-03-20T23:14:02Z,2020-03-20T23:16:53Z,"* The `twitter-to-sqlite friends` and `twitter-to-sqlite followers` commands now accept the `--sql` and `--attach` options. #36
* Improved the display of the progress bar for the `user-timeline` command. #38",206156866,twitter-to-sqlite,
https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.1a,24731201,MDc6UmVsZWFzZTI0NzMxMjAx,0.1a,master,0.1a,0,9599,simonw,0,2020-03-21T04:19:07Z,2020-03-21T04:26:28Z,* `user` and `trees` commands.,248903544,hacker-news-to-sqlite,
https://github.com/dogsheep/dogsheep-photos/releases/tag/0.1a,25832422,MDc6UmVsZWFzZTI1ODMyNDIy,0.1a,master,0.1a,0,9599,simonw,0,2020-04-19T00:15:55Z,2020-04-24T00:40:57Z,* First alpha release,256834907,dogsheep-photos,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1a,30477968,MDc6UmVsZWFzZTMwNDc3OTY4,0.1a,main,0.1a,0,9599,simonw,1,2020-09-01T04:16:59Z,2020-09-01T04:19:00Z,- First working version,197431109,dogsheep-beta,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1a2,30478994,MDc6UmVsZWFzZTMwNDc4OTk0,0.1a2,main,0.1a2,0,9599,simonw,1,2020-09-01T04:49:41Z,2020-09-01T04:50:01Z,- Now creates an index on the `timestamp` column. #1,197431109,dogsheep-beta,
https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.2,18750559,MDc6UmVsZWFzZTE4NzUwNTU5,0.2,master,0.2,0,9599,simonw,0,2019-07-20T16:44:05Z,2019-07-20T16:44:41Z,Fixed a bug where duplicate records could crash the import.,197882382,healthkit-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.2,19763185,MDc6UmVsZWFzZTE5NzYzMTg1,0.2,master,0.2,0,9599,simonw,0,2019-09-04T21:17:34Z,2019-09-04T22:09:46Z,Full text search for tweets table,206156866,twitter-to-sqlite,
https://github.com/dogsheep/github-to-sqlite/releases/tag/0.2,19993751,MDc6UmVsZWFzZTE5OTkzNzUx,0.2,master,0.2,0,9599,simonw,0,2019-09-14T21:31:17Z,2019-09-14T21:32:34Z,"* Added the `github-to-sqlite starred` command for retrieving starred repos, #1 ",207052882,github-to-sqlite,
https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.2,20755954,MDc6UmVsZWFzZTIwNzU1OTU0,0.2,master,0.2,0,9599,simonw,0,2019-10-16T20:40:25Z,2019-10-16T20:40:55Z,"* Added --since option, closes #3 ",205429375,swarm-to-sqlite,
https://github.com/dogsheep/inaturalist-to-sqlite/releases/tag/0.2,24793032,MDc6UmVsZWFzZTI0NzkzMDMy,0.2,master,0.2,0,9599,simonw,0,2020-03-24T00:35:44Z,2020-03-24T00:36:40Z,"* Upgraded to `sqlite-utils` 2.x
* First non-alpha release",206202864,inaturalist-to-sqlite,
https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2,24950669,MDc6UmVsZWFzZTI0OTUwNjY5,0.2,master,0.2,0,9599,simonw,0,2020-03-27T22:23:16Z,2020-03-27T22:26:30Z,"* Defaults to only retrieving updated items, unless you use `--all`. #2
* Now displays a progress bar for initial data import and `--all`.
* Data is now fetched 500 items at a time using API pagination. #1
* Now depends on `sqlite-utils 2.x`.
* `auth.json` now uses `pocket_` prefix on each stored key. #4",213286752,pocket-to-sqlite,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.2,30536189,MDc6UmVsZWFzZTMwNTM2MTg5,0.2,main,0.2,0,9599,simonw,0,2020-09-01T20:40:52Z,2020-09-01T20:41:31Z,"- Use Porter stemming by default, allow that to be over-ridden with the new `--tokenize=` option. #2",197431109,dogsheep-beta,
https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.2,32429687,MDc6UmVsZWFzZTMyNDI5Njg3,0.2,main,0.2,0,9599,simonw,0,2020-10-12T00:05:21Z,2020-10-12T00:07:24Z,"- Notes now use an ID derived from a hash of their contents. #3
- Date columns are now in ISO format, and indexd. #4
- Notes and resources table now have full-text search configured. #4
- Improved how OCR is stored in the database, only storing the most confident matches. #6",303218369,evernote-to-sqlite,
https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2.1,32891952,MDc6UmVsZWFzZTMyODkxOTUy,0.2.1,master,0.2.1,0,9599,simonw,0,2020-10-22T00:06:50Z,2020-10-22T00:08:24Z,- Tweaked dependencies for compatibility with new PyPI resolver.,213286752,pocket-to-sqlite,
https://github.com/dogsheep/inaturalist-to-sqlite/releases/tag/0.2.1,32891966,MDc6UmVsZWFzZTMyODkxOTY2,0.2.1,master,0.2.1,0,9599,simonw,0,2020-10-22T00:08:29Z,2020-10-22T00:08:58Z,"- Tweaked dependencies for compatibility with new PyPI resolver.
",206202864,inaturalist-to-sqlite,
https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2.2,75010827,RE_kwDODLZ_YM4EeJML,0.2.2,main,0.2.2,0,9599,simonw,0,2022-08-22T16:18:16Z,2022-08-22T16:21:34Z,"- `-a` is now the shortcut for `--auth` - previously it was duplicated as a shortcut for `--all`. Thanks, [Thomas Lockney](https://github.com/tlockney). [#7](https://github.com/dogsheep/pocket-to-sqlite/issues/7)
- `pocket-to-sqlite auth` command now updates the existing `auth.json` file rather than over-writing it. [#10](https://github.com/dogsheep/pocket-to-sqlite/issues/10)",213286752,pocket-to-sqlite,
https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2.3,111513749,RE_kwDODLZ_YM4GpZCV,0.2.3,main,0.2.3,0,9599,simonw,0,2023-07-09T01:14:06Z,2023-07-09T01:15:03Z,"- Progress bar now includes a count of the total number of items to fetch.
- Now packaged using `pyproject.toml`. [#12](https://github.com/dogsheep/pocket-to-sqlite/issues/12)",213286752,pocket-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.20,25070766,MDc6UmVsZWFzZTI1MDcwNzY2,0.20,master,0.20,0,9599,simonw,0,2020-04-01T04:18:17Z,2020-04-01T04:18:53Z,"* Reworked how `--since` works to fix a bug spotted in #39. The most recently seen tweet ID for various commands is now stored in a new `since_ids` table.
* New feature: the friends, followers and listed counts for each user are now stored in a `count_history` table and updated any time we spot that the counts in that user's profile have changed. #40",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.20.1,25070964,MDc6UmVsZWFzZTI1MDcwOTY0,0.20.1,master,0.20.1,0,9599,simonw,0,2020-04-01T04:31:23Z,2020-04-01T04:33:35Z,"* Buf fix: `since_id` table no longer records a record for `None`, `None`. #41",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21,25632029,MDc6UmVsZWFzZTI1NjMyMDI5,0.21,master,0.21,0,9599,simonw,0,2020-04-17T23:44:31Z,2020-04-17T23:46:51Z,"* New command: `twitter-to-sqlite lists username` fetches lists owned by the specified users. #43
* Handle tweets with a blank `source`. #44
* Fixed error with `twitter-to-sqlite user-timeline --sql=... --ids`. #42
* Better error messages for non-existing users. #37
",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.1,26059149,MDc6UmVsZWFzZTI2MDU5MTQ5,0.21.1,master,0.21.1,0,9599,simonw,0,2020-04-30T18:20:43Z,2020-04-30T18:21:46Z,* Fixed bug that occurred when the `since_ids` table had not yet been created. #46,206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.2,28705982,MDc6UmVsZWFzZTI4NzA1OTgy,0.21.2,master,0.21.2,0,9599,simonw,0,2020-07-18T22:42:54Z,2020-07-18T22:43:20Z,- Added changelog badge,206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.3,28876263,MDc6UmVsZWFzZTI4ODc2MjYz,0.21.3,master,0.21.3,0,9599,simonw,0,2020-07-23T14:56:02Z,2020-07-23T14:57:11Z,* Added table of contents to the documentation,206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.4,48150315,MDc6UmVsZWFzZTQ4MTUwMzE1,0.21.4,main,0.21.4,0,9599,simonw,0,2021-08-20T00:14:08Z,2021-08-20T00:14:30Z,"- Fix for `since_id` error with `user-timeline`. [#57](https://github.com/dogsheep/twitter-to-sqlite/issues/57)
- Document the use of `--stop_after` with favorites - thanks, Mike Lee Williams. [#49](https://github.com/dogsheep/twitter-to-sqlite/pull/49)
- Fixes for Twitter archive imports, thanks Jacob Kaplan-Moss. [#55](https://github.com/dogsheep/twitter-to-sqlite/pull/55)
",206156866,twitter-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.22,50003635,RE_kwDODEm0Qs4C-v6z,0.22,main,0.22,0,9599,simonw,0,2021-09-21T17:39:08Z,2021-09-21T17:41:05Z,"- `twitter-to-sqlite import` now imports `app.js` to `archive_app` table.
- Small fixes for `twitter-to-sqlite import` reflecting changed filenames in the Twitter export.
- Fix for remaining `since_id` bug, thanks Ruben Vermeersch! [#58](https://github.com/dogsheep/twitter-to-sqlite/issues/58)",206156866,twitter-to-sqlite,"{""url"": ""https://api.github.com/repos/dogsheep/twitter-to-sqlite/releases/50003635/reactions"", ""total_count"": 1, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 1, ""rocket"": 0, ""eyes"": 0}"
https://github.com/simonw/datasette/releases/tag/0.29.1,18598489,MDc6UmVsZWFzZTE4NTk4NDg5,0.29.1,master,0.29.1,0,9599,simonw,0,2019-07-11T16:17:55Z,2019-07-14T01:43:44Z,"- Fixed bug with static mounts using relative paths which could lead to traversal exploits (#555) - thanks Abdussamet Kocak!
https://datasette.readthedocs.io/en/stable/changelog.html#v0-29-1",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.29.2,19704661,MDc6UmVsZWFzZTE5NzA0NjYx,0.29.2,master,0.29.2,0,9599,simonw,0,2019-07-14T03:04:05Z,2019-09-03T00:33:35Z,"* Bumped Uvicorn to 0.8.4, fixing a bug where the querystring was not included in the server logs. (#559)
* Fixed bug where the navigation breadcrumbs were not displayed correctly on the page for a custom query. (#558)
* Fixed bug where custom query names containing unicode characters caused errors.
https://datasette.readthedocs.io/en/stable/changelog.html#v0-29-2",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.29.3,20795250,MDc6UmVsZWFzZTIwNzk1MjUw,0.29.3,master,0.29.3,0,9599,simonw,0,2019-09-03T00:40:53Z,2019-10-18T05:24:54Z,https://datasette.readthedocs.io/en/stable/changelog.html#v0-29-3,107914493,datasette,
https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.2a,24738954,MDc6UmVsZWFzZTI0NzM4OTU0,0.2a,master,0.2a,0,9599,simonw,0,2020-03-21T15:27:15Z,2020-03-21T19:46:58Z,Compatibility with sqlite-utils 1.x,248903544,hacker-news-to-sqlite,
https://github.com/dogsheep/dogsheep-photos/releases/tag/0.2a,25832475,MDc6UmVsZWFzZTI1ODMyNDc1,0.2a,master,0.2a,0,9599,simonw,0,2020-04-24T00:42:43Z,2020-04-24T00:44:21Z,* Only upload photos not already in S3. #9 ,256834907,dogsheep-photos,
https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.3,18762495,MDc6UmVsZWFzZTE4NzYyNDk1,0.3,master,0.3,0,9599,simonw,0,2019-07-22T03:31:54Z,2019-07-22T03:33:32Z,"- Tool now displays a progress bar during import - you can disable it with `--silent` #5
- You can pass a path to a decompressed XML file instead of a zip file, using `--xml`
- Records table is now broken up into different tables for each type of recorded data #6",197882382,healthkit-to-sqlite,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.3,19763200,MDc6UmVsZWFzZTE5NzYzMjAw,0.3,master,0.3,0,9599,simonw,0,2019-09-04T22:10:07Z,2019-09-04T22:11:01Z,"Extract places and media into separate tables
Demo: https://twitter-to-sqlite-demo.now.sh/",206156866,twitter-to-sqlite,
https://github.com/dogsheep/github-to-sqlite/releases/tag/0.3,19993820,MDc6UmVsZWFzZTE5OTkzODIw,0.3,master,0.3,0,9599,simonw,0,2019-09-14T21:49:27Z,2019-09-14T21:50:01Z,"* `license` is now extracted from the `repos` table into a separate `licenses` table with a foreign key, #2
",207052882,github-to-sqlite,
https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.3,24738963,MDc6UmVsZWFzZTI0NzM4OTYz,0.3,master,0.3,0,9599,simonw,0,2020-03-21T19:46:08Z,2020-03-21T19:47:36Z,First non-alpha release. Now configures full-text search for the `users` and `items` tables. #1,248903544,hacker-news-to-sqlite,
https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3,24954042,MDc6UmVsZWFzZTI0OTU0MDQy,0.3,master,0.3,0,9599,simonw,0,2020-03-28T02:25:29Z,2020-03-28T02:28:35Z,* Upgraded to sqlite-utils 2.x,205429375,swarm-to-sqlite,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.3,30613603,MDc6UmVsZWFzZTMwNjEzNjAz,0.3,main,0.3,0,9599,simonw,0,2020-09-02T21:07:13Z,2020-09-02T21:07:44Z,- New `category` column plus default `categories` table. #7,197431109,dogsheep-beta,
https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.3,37946829,MDc6UmVsZWFzZTM3OTQ2ODI5,0.3,main,0.3,0,9599,simonw,0,2021-02-11T22:14:01Z,2021-02-11T22:16:20Z,"- Correctly handle entities in XHTML notes. [#9](https://github.com/dogsheep/evernote-to-sqlite/issues/9)
- Fixed a bug importing ENEX files on Windows. Thanks, [dskrad](https://github.com/dskrad). [#11](https://github.com/dogsheep/evernote-to-sqlite/issues/11)
",303218369,evernote-to-sqlite,
https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.3.1,18823859,MDc6UmVsZWFzZTE4ODIzODU5,0.3.1,master,0.3.1,0,9599,simonw,0,2019-07-24T06:33:22Z,2019-07-24T06:38:36Z,Uses less RAM - see #7 ,197882382,healthkit-to-sqlite,
https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.3.1,24740687,MDc6UmVsZWFzZTI0NzQwNjg3,0.3.1,master,0.3.1,0,9599,simonw,0,2020-03-21T22:39:34Z,2020-03-21T22:41:16Z,Added documentation on [Browsing your data with Datasette](https://github.com/dogsheep/hacker-news-to-sqlite/blob/0.3.1/README.md#browsing-your-data-with-datasette).,248903544,hacker-news-to-sqlite,
https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3.1,24954053,MDc6UmVsZWFzZTI0OTU0MDUz,0.3.1,master,0.3.1,0,9599,simonw,0,2020-03-28T02:29:41Z,2020-03-28T02:30:10Z,"* Fixed bug with very old checkins that were missing their source - thanks, @mfa! #6",205429375,swarm-to-sqlite,
https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.3.1,37947725,MDc6UmVsZWFzZTM3OTQ3NzI1,0.3.1,main,0.3.1,0,9599,simonw,0,2021-02-11T22:38:21Z,2021-02-11T22:40:40Z,"- Explicitly open file using utf-8 encoding - thanks, RiverZhou. [#10](https://github.com/dogsheep/evernote-to-sqlite/pull/10)
- Fix import error if note has no ""updated"" element - thanks, Matej Korosec. [#8](https://github.com/dogsheep/evernote-to-sqlite/pull/8)
",303218369,evernote-to-sqlite,
https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.3.2,18881253,MDc6UmVsZWFzZTE4ODgxMjUz,0.3.2,master,0.3.2,0,9599,simonw,0,2019-07-26T06:02:30Z,2019-07-26T06:12:12Z,Fix for #9 - Too many SQL variables bug,197882382,healthkit-to-sqlite,
https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3.2,32470830,MDc6UmVsZWFzZTMyNDcwODMw,0.3.2,main,0.3.2,0,9599,simonw,0,2020-10-12T20:31:24Z,2020-10-12T20:33:48Z,"- Fix for ""table photos has no column named hasSticker"" bug, thanks @mattiaborsoi. #10
- Switched CI to GitHub Actions.",205429375,swarm-to-sqlite,
https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.3.2,48523966,MDc6UmVsZWFzZTQ4NTIzOTY2,0.3.2,main,0.3.2,0,9599,simonw,0,2021-08-26T19:01:49Z,2021-08-26T19:02:47Z,- Fixed error when encountering `
` documents that were not well-formed XML. [#13](https://github.com/dogsheep/evernote-to-sqlite/issues/13),303218369,evernote-to-sqlite,
https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3.3,36530359,MDc6UmVsZWFzZTM2NTMwMzU5,0.3.3,main,0.3.3,0,9599,simonw,0,2021-01-18T04:34:56Z,2021-01-18T04:36:03Z,- Fixed bug where tool could crash with an error about missing columns. #11,205429375,swarm-to-sqlite,
https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3.4,98864081,RE_kwDODD6af84F5IvR,0.3.4,main,0.3.4,0,9599,simonw,0,2023-04-11T03:17:35Z,2023-04-11T03:18:16Z,- Fixed an error in the `checkins_detail` view. [#15](https://github.com/dogsheep/swarm-to-sqlite/issues/15),205429375,swarm-to-sqlite,
https://github.com/simonw/datasette/releases/tag/0.30,21098052,MDc6UmVsZWFzZTIxMDk4MDUy,0.30,master,0.30,0,9599,simonw,0,2019-10-19T01:08:04Z,2019-10-30T18:51:30Z,https://datasette.readthedocs.io/en/stable/changelog.html#v0-30,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.30.1,21162064,MDc6UmVsZWFzZTIxMTYyMDY0,0.30.1,master,0.30.1,0,9599,simonw,0,2019-10-30T19:00:21Z,2019-11-02T00:06:02Z,https://datasette.readthedocs.io/en/stable/changelog.html#v0-30-1,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.30.2,21169835,MDc6UmVsZWFzZTIxMTY5ODM1,0.30.2,master,0.30.2,0,9599,simonw,0,2019-11-02T23:12:46Z,2019-11-02T23:33:13Z,https://datasette.readthedocs.io/en/latest/changelog.html#v0-30-2,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.31.1,21426299,MDc6UmVsZWFzZTIxNDI2Mjk5,0.31.1,master,0.31.1,0,9599,simonw,0,2019-11-13T02:18:39Z,2019-11-13T02:40:53Z,"- Deployments created using `datasette publish` now use `python:3.8` base Docker image (#629)
https://datasette.readthedocs.io/en/latest/changelog.html#v0-31-1",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.31.2,21449006,MDc6UmVsZWFzZTIxNDQ5MDA2,0.31.2,master,0.31.2,0,9599,simonw,0,2019-11-13T16:48:36Z,2019-11-13T17:38:59Z,"- Fixed a bug where datasette publish heroku applications failed to start (#633)
- Fix for datasette publish with just --source_url - thanks, Stanley Zheng (#572)
- Deployments to Heroku now use Python 3.8.0 (#632)
https://datasette.readthedocs.io/en/latest/changelog.html#v0-31-2",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.38,24330942,MDc6UmVsZWFzZTI0MzMwOTQy,0.38,master,0.38,0,9599,simonw,0,2020-03-08T23:26:50Z,2020-03-08T23:42:36Z,"* The [Docker build](https://hub.docker.com/r/datasetteproject/datasette) of Datasette now uses SQLite 3.31.1, upgraded from 3.26. (#695)
* `datasette publish cloudrun` now accepts an optional `--memory=2Gi` flag for setting the Cloud Run allocated memory to a value other than the default (256Mi). (#694)
* Fixed bug where templates that shipped with plugins were sometimes not being correctly loaded. (#697)
",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.39,24836140,MDc6UmVsZWFzZTI0ODM2MTQw,0.39,master,0.39,0,9599,simonw,0,2020-03-25T04:02:37Z,2020-03-25T04:11:35Z,"* New [base_url](https://datasette.readthedocs.io/en/latest/config.html#config-base-url) configuration setting for serving up the correct links while running Datasette under a different URL prefix. (#394)
* New metadata settings `""sort""` and `""sort_desc""` for setting the default sort order for a table. See [Setting a default sort order](https://datasette.readthedocs.io/en/latest/metadata.html#metadata-default-sort). (#702)
* Sort direction arrow now displays by default on the primary key. This means you only have to click once (not twice) to sort in reverse order. (#677)
* New `await Request(scope, receive).post_vars()` method for accessing POST form variables. (#700)
* Plugin hooks documentation now links to example uses of each plugin. (#709)
",107914493,datasette,
https://github.com/dogsheep/dogsheep-photos/releases/tag/0.3a,26199348,MDc6UmVsZWFzZTI2MTk5MzQ4,0.3a,master,0.3a,0,9599,simonw,0,2020-05-05T20:16:53Z,2020-05-05T20:17:00Z,"* Upload photos to S3 in a thread pool #11
* New `--dry-run` option to `upload` command
* New `photos-to-sqlite apple-photos` command for importing Apple Photos metadata #1
* Apple Photos quality scores are imported into `apple_photos_scores` table #15
* Machine learning labels imported from Apple Photos into `labels` table #16",256834907,dogsheep-photos,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.4,19865891,MDc6UmVsZWFzZTE5ODY1ODkx,0.4,master,0.4,0,9599,simonw,0,2019-09-09T22:41:25Z,2019-09-09T22:43:05Z,"* New `users-lookup` command for fetching multiple user profiles, including using new `--sql` and `--attach` options
* New `list-members` subcommand for fetching members of a list
* Added `stop_after` option to `user-timeline` command",206156866,twitter-to-sqlite,
https://github.com/dogsheep/github-to-sqlite/releases/tag/0.4,20031553,MDc6UmVsZWFzZTIwMDMxNTUz,0.4,master,0.4,0,9599,simonw,0,2019-09-17T00:18:37Z,2019-09-17T00:19:42Z,"* Added `github-to-sqlite repos` command, #3 ",207052882,github-to-sqlite,
https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.4,21306693,MDc6UmVsZWFzZTIxMzA2Njkz,0.4,master,0.4,0,9599,simonw,0,2019-11-08T01:19:23Z,2019-11-08T01:19:51Z,* Fixed workout latitude/longitude points import for iOS 13 - #10,197882382,healthkit-to-sqlite,
https://github.com/dogsheep/dogsheep-photos/releases/tag/0.4,26698662,MDc6UmVsZWFzZTI2Njk4NjYy,0.4,master,0.4,0,9599,simonw,0,2020-05-20T04:22:26Z,2020-05-20T04:24:28Z,"- Renamed this project to `dogsheep-photos`. #26
- `apple-photos` command now works even if you haven't yet run `upload`. #19
- `--image-url-prefix` and `--image-url-suffix` options to `apple-photos`. #24
- New `create-subset` command. #23 ",256834907,dogsheep-photos,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4,30688677,MDc6UmVsZWFzZTMwNjg4Njc3,0.4,main,0.4,0,9599,simonw,0,2020-09-03T21:09:50Z,2020-09-03T21:11:28Z,"- Working faceted search interface at `/-/beta` #3
- `is_public` column for filtering between public and private data. #11
- New `received` category. #10",197431109,dogsheep-beta,
https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.4,39765751,MDc6UmVsZWFzZTM5NzY1NzUx,0.4,main,0.4,0,9599,simonw,0,2021-03-13T19:11:12Z,2021-03-13T19:15:06Z,"Progress display now shows the total as well as the number currently in the queue.
```
% hacker-news-to-sqlite trees hn.db 26440397
done: 1, in queue: 0, total: 1
done: 2, in queue: 28, total: 30
done: 3, in queue: 27, total: 30
```",248903544,hacker-news-to-sqlite,
https://github.com/dogsheep/dogsheep-photos/releases/tag/0.4.1,26873698,MDc6UmVsZWFzZTI2ODczNjk4,0.4.1,master,0.4.1,0,9599,simonw,0,2020-05-25T20:11:20Z,2020-05-25T20:13:23Z,"- Documentation now explains how to use this with the [datasette-media](https://github.com/simonw/datasette-media), [datasette-json-html](https://github.com/simonw/datasette-json-html) and [datasette-template-sql](https://github.com/simonw/datasette-template-sql) plugins. #20",256834907,dogsheep-photos,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4.1,30690154,MDc6UmVsZWFzZTMwNjkwMTU0,0.4.1,main,0.4.1,0,9599,simonw,0,2020-09-03T21:40:40Z,2020-09-03T21:41:52Z,- Fixed support for [advanced FTS query syntax](https://www.sqlite.org/fts5.html#full_text_query_syntax). #13,197431109,dogsheep-beta,
https://github.com/simonw/datasette/releases/tag/0.40,25748264,MDc6UmVsZWFzZTI1NzQ4MjY0,0.40,master,0.40,0,9599,simonw,0,2020-04-22T04:06:39Z,2020-04-22T04:06:51Z,"* Datasette [Metadata](https://datasette.readthedocs.io/en/latest/metadata.html) can now be provided as a YAML file as an optional alternative to JSON. See [Using YAML for metadata](https://datasette.readthedocs.io/en/latest/metadata.html#metadata-yaml). (#713)
* Removed support for `datasette publish now`, which used the the now-retired Zeit Now v1 hosting platform. A new plugin, [datasette-publish-now](https://github.com/simonw/datasette-publish-now), can be installed to publish data to Zeit ([now Vercel](https://vercel.com/blog/zeit-is-now-vercel)) Now v2. (#710)
* Fixed a bug where the `extra_template_vars(request, view_name)` plugin hook was not receiving the correct `view_name`. (#716)
* Variables added to the template context by the `extra_template_vars()` plugin hook are now shown in the `?_context=1` debugging mode (see [template_debug](https://datasette.readthedocs.io/en/latest/config.html#config-template-debug)). (#693)
* Fixed a bug where the “templates considered” HTML comment was no longer being displayed. (#689)
* Fixed a `datasette publish` bug where `--plugin-secret` would over-ride plugin configuration in the provided `metadata.json` file. (#724)
* Added a new CSS class for customizing the canned query page. (#727)",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.41,26240662,MDc6UmVsZWFzZTI2MjQwNjYy,0.41,master,0.41,0,9599,simonw,0,2020-05-06T18:20:58Z,2020-05-06T18:30:03Z,"You can now create [custom pages](https://datasette.readthedocs.io/en/0.41/custom_templates.html#custom-pages) within your Datasette instance using a custom template file. For example, adding a template file called `templates/pages/about.html` will result in a new page being served at `/about` on your instance. See the [custom pages documentation](https://datasette.readthedocs.io/en/0.41/custom_templates.html#custom-pages) for full details, including how to return custom HTTP headers, redirects and status codes. (#648)
[Configuration directory mode](https://datasette.readthedocs.io/en/0.41/config.html#config-dir) (#731) allows you to define a custom Datasette instance as a directory. So instead of running the following:
$ datasette one.db two.db \
--metadata.json \
--template-dir=templates/ \
--plugins-dir=plugins \
--static css:css
You can instead arrange your files in a single directory called `my-project` and run this:
$ datasette my-project/
Also in this release:
- New `NOT LIKE` table filter: `?colname__notlike=expression`. (#750)
- Datasette now has a *pattern portfolio* at `/-/patterns` - e.g. . This is a page that shows every Datasette user interface component in one place, to aid core development and people building custom CSS themes. (#151)
- SQLite [PRAGMA functions](https://www.sqlite.org/pragma.html#pragfunc) such as `pragma_table_info(tablename)` are now allowed in Datasette SQL queries. (#761)
- Datasette pages now consistently return a `content-type` of `text/html; charset=utf-8""`. (#752)
- Datasette now handles an ASGI `raw_path` value of `None`, which should allow compatibilty with the [Mangum](https://github.com/erm/mangum) adapter for running ASGI apps on AWS Lambda. Thanks, Colin Dellow. (#719)
- Installation documentation now covers how to [Install using pipx](https://datasette.readthedocs.io/en/0.41/installation.html#installation-pipx). (#756)
- Improved the documentation for [Full-text search](https://datasette.readthedocs.io/en/0.41/full_text_search.html#full-text-search).",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.42,26320774,MDc6UmVsZWFzZTI2MzIwNzc0,0.42,master,0.42,0,9599,simonw,0,2020-05-08T17:38:27Z,2020-05-08T17:56:36Z,"A small release which provides improved internal methods for use in plugins, along with documentation. See #685.
* Added documentation for `db.execute()`, see [await db.execute(sql, ...)](https://datasette.readthedocs.io/en/stable/internals.html#database-execute).
* Renamed `db.execute_against_connection_in_thread()` to `db.execute_fn()` and made it a documented method, see [await db.execute_fn(fn)](https://datasette.readthedocs.io/en/stable/internals.html#database-execute-fn).
* New `results.first()` and `results.single_value()` methods, plus documentation for the `Results` class - see [Results](https://datasette.readthedocs.io/en/stable/internals.html#database-results).
",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.43,26994005,MDc6UmVsZWFzZTI2OTk0MDA1,0.43,master,0.43,0,9599,simonw,0,2020-05-28T14:11:06Z,2020-05-28T14:39:18Z,"The main focus of this release is a major upgrade to the [register_output_renderer(datasette)](https://datasette.readthedocs.io/en/stable/plugins.html#plugin-register-output-renderer) plugin hook, which allows plugins to provide new output formats for Datasette such as [datasette-atom](https://github.com/simonw/datasette-atom) and [datasette-ics](https://github.com/simonw/datasette-ics).
- Redesign of [register_output_renderer(datasette)](https://datasette.readthedocs.io/en/stable/plugins.html#plugin-register-output-renderer) to provide more context to the render callback and support an optional `""can_render""` callback that controls if a suggested link to the output format is provided. ([#581](https://github.com/simonw/datasette/issues/581), [#770](https://github.com/simonw/datasette/issues/770))
- Visually distinguish float and integer columns - useful for figuring out why order-by-column might be returning unexpected results. ([#729](https://github.com/simonw/datasette/issues/729))
- The [Request object](https://datasette.readthedocs.io/en/stable/internals.html#internals-request), which is passed to several plugin hooks, is now documented. ([#706](https://github.com/simonw/datasette/issues/706))
- New `metadata.json` option for setting a custom default page size for specific tables and views, see [Setting a custom page size](https://datasette.readthedocs.io/en/stable/metadata.html#metadata-page-size). ([#751](https://github.com/simonw/datasette/issues/751))
- Canned queries can now be configured with a default URL fragment hash, useful when working with plugins such as [datasette-vega](https://github.com/simonw/datasette-vega), see [Setting a default fragment](https://datasette.readthedocs.io/en/stable/sql_queries.html#canned-queries-default-fragment). ([#706](https://github.com/simonw/datasette/issues/706))
- Fixed a bug in `datasette publish` when running on operating systems where the `/tmp` directory lives in a different volume, using a backport of the Python 3.8 `shutil.copytree()` function. ([#744](https://github.com/simonw/datasette/issues/744))
- Every plugin hook is now covered by the unit tests, and a new unit test checks that each plugin hook has at least one corresponding test. ([#771](https://github.com/simonw/datasette/issues/771), [#773](https://github.com/simonw/datasette/issues/773))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.44,27483276,MDc6UmVsZWFzZTI3NDgzMjc2,0.44,master,0.44,0,9599,simonw,0,2020-06-12T01:19:30Z,2020-06-12T07:10:38Z,"Authentication and permissions, writable canned queries, flash messages, new plugin hooks and more. [Full release notes](https://datasette.readthedocs.io/en/stable/changelog.html#v0-44). See also [Datasette 0.44: the annotated release notes](https://simonwillison.net/2020/Jun/12/annotated-release-notes/).",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.45,28134124,MDc6UmVsZWFzZTI4MTM0MTI0,0.45,master,0.45,0,9599,simonw,0,2020-07-01T21:43:07Z,2020-07-01T21:46:07Z,"Magic parameters for canned queries, a log out feature, improved plugin documentation and four new plugin hooks.
### Magic parameters for canned queries
Canned queries now support [Magic parameters](https://docs.datasette.io/en/stable/sql_queries.html#canned-queries-magic-parameters), which can be used to insert or select automatically generated values. For example:
```sql
insert into logs
(user_id, timestamp)
values
(:_actor_id, :_now_datetime_utc)
```
This inserts the currently authenticated actor ID and the current datetime. ([#842](https://github.com/simonw/datasette/issues/842))
### Log out
The [ds_actor cookie](https://docs.datasette.io/en/stable/authentication.html#authentication-ds-actor) can be used by plugins (or by Datasette's [--root mechanism](https://docs.datasette.io/en/stable/authentication.html#authentication-root)) to authenticate users. The new `/-/logout` page provides a way to clear that cookie.
A ""Log out"" button now shows in the global navigation provided the user is authenticated using the `ds_actor` cookie. ([#840](https://github.com/simonw/datasette/issues/840))
### Better plugin documentation
The plugin documentation has been re-arranged into four sections, including a brand new section on testing plugins. ([#687](https://github.com/simonw/datasette/issues/687))
- [Plugins](https://docs.datasette.io/en/stable/plugins.html#plugins) introduces Datasette's plugin system and describes how to install and configure plugins.
- [Writing plugins](https://docs.datasette.io/en/stable/writing_plugins.html#writing-plugins) describes how to author plugins, from simple one-off plugins to packaged plugins that can be published to PyPI. It also describes how to start a plugin using the new [datasette-plugin](https://github.com/simonw/datasette-plugin) cookiecutter template.
- [Plugin hooks](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hooks) is a full list of detailed documentation for every Datasette plugin hook.
- [Testing plugins](https://docs.datasette.io/en/stable/testing_plugins.html#testing-plugins) describes how to write tests for Datasette plugins, using [pytest](https://docs.pytest.org/) and [HTTPX](https://www.python-httpx.org/).
### New plugin hooks
- [register_magic_parameters(datasette)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-register-magic-parameters) can be used to define new types of magic canned query parameters.
- [startup(datasette)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-startup) can run custom code when Datasette first starts up. [datasette-init](https://github.com/simonw/datasette-init) is a new plugin that uses this hook to create database tables and views on startup if they have not yet been created. ([#834](https://github.com/simonw/datasette/issues/834))
- [canned_queries(datasette, database, actor)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-canned-queries) lets plugins provide additional canned queries beyond those defined in Datasette's metadata. See [datasette-saved-queries](https://github.com/simonw/datasette-saved-queries) for an example of this hook in action. ([#852](https://github.com/simonw/datasette/issues/852))
- [forbidden(datasette, request, message)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-forbidden) is a hook for customizing how Datasette responds to 403 forbidden errors. ([#812](https://github.com/simonw/datasette/issues/812))
### Smaller changes
- Cascading view permissons - so if a user has `view-table` they can view the table page even if they do not have `view-database` or `view-instance`. ([#832](https://github.com/simonw/datasette/issues/832))
- CSRF protection no longer applies to `Authentication: Bearer token` requests or requests without cookies. ([#835](https://github.com/simonw/datasette/issues/835))
- `datasette.add_message()` now works inside plugins. ([#864](https://github.com/simonw/datasette/issues/864))
- Workaround for ""Too many open files"" error in test runs. ([#846](https://github.com/simonw/datasette/issues/846))
- Respect existing `scope[""actor""]` if already set by ASGI middleware. ([#854](https://github.com/simonw/datasette/issues/854))
- New process for shipping [Alpha and beta releases](https://docs.datasette.io/en/stable/contributing.html#contributing-alpha-beta). ([#807](https://github.com/simonw/datasette/issues/807))
- `{{ csrftoken() }}` now works when plugins render a template using `datasette.render_template(..., request=request)`. ([#863](https://github.com/simonw/datasette/issues/863))
- Datasette now creates a single [Request object](https://docs.datasette.io/en/stable/internals.html#internals-request) and uses it throughout the lifetime of the current HTTP request. ([#870](https://github.com/simonw/datasette/issues/870))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.45a0,27703093,MDc6UmVsZWFzZTI3NzAzMDkz,0.45a0,master,0.45a0,0,9599,simonw,1,2020-06-18T20:58:09Z,2020-06-18T21:14:00Z,,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.45a1,27707079,MDc6UmVsZWFzZTI3NzA3MDc5,0.45a1,master,0.45a1,0,9599,simonw,1,2020-06-18T23:52:16Z,2020-06-19T00:02:29Z,,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.45a2,27856779,MDc6UmVsZWFzZTI3ODU2Nzc5,0.45a2,master,0.45a2,0,9599,simonw,1,2020-06-24T04:17:30Z,2020-06-24T04:32:12Z,,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.45a3,27994774,MDc6UmVsZWFzZTI3OTk0Nzc0,0.45a3,master,0.45a3,0,9599,simonw,1,2020-06-28T03:22:49Z,2020-06-28T03:27:12Z,,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.45a4,28008549,MDc6UmVsZWFzZTI4MDA4NTQ5,0.45a4,master,0.45a4,0,9599,simonw,1,2020-06-29T02:31:16Z,2020-06-29T02:33:02Z,,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.45a5,28097766,MDc6UmVsZWFzZTI4MDk3NzY2,0.45a5,master,0.45a5,0,9599,simonw,1,2020-07-01T04:25:35Z,2020-07-01T04:27:08Z,,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.46,29489364,MDc6UmVsZWFzZTI5NDg5MzY0,0.46,main,0.46,0,9599,simonw,0,2020-08-09T16:09:07Z,2020-08-09T16:10:47Z,"**Warning:** This release contains a security fix related to authenticated writable canned queries. If you are using this feature you should upgrade as soon as possible.
- **Security fix:** CSRF tokens were incorrectly included in read-only canned query forms, which could allow them to be leaked to a sophisticated attacker. See [issue 918](https://github.com/simonw/datasette/issues/918) for details.
- Datasette now supports GraphQL via the new [datasette-graphql](https://github.com/simonw/datasette-graphql) plugin - see [GraphQL in Datasette with the new datasette-graphql plugin](https://simonwillison.net/2020/Aug/7/datasette-graphql/).
- Principle git branch has been renamed from `master` to `main`. ([#849](https://github.com/simonw/datasette/issues/849))
- New debugging tool: `/-/allow-debug tool` ([demo here](https://latest.datasette.io/-/allow-debug)) helps test allow blocks against actors, as described in [Defining permissions with ""allow"" blocks](https://datasette.readthedocs.io/en/stable/authentication.html#authentication-permissions-allow). ([#908](https://github.com/simonw/datasette/issues/908))
- New logo for the documentation, and a new project tagline: ""An open source multi-tool for exploring and publishing data"".
- Whitespace in column values is now respected on display, using `white-space: pre-wrap`. ([#896](https://github.com/simonw/datasette/issues/896))
- New `await request.post_body()` method for accessing the raw POST body, see [Request object](https://datasette.readthedocs.io/en/stable/internals.html#internals-request). ([#897](https://github.com/simonw/datasette/issues/897))
- Database file downloads now include a `content-length` HTTP header, enabling download progress bars. ([#905](https://github.com/simonw/datasette/issues/905))
- File downloads now also correctly set the suggested file name using a `content-disposition` HTTP header. ([#909](https://github.com/simonw/datasette/issues/909))
- `tests` are now excluded from the Datasette package properly - thanks, abeyerpath. ([#456](https://github.com/simonw/datasette/issues/456))
- The Datasette package published to PyPI now includes `sdist` as well as `bdist_wheel`.
- Better titles for canned query pages. ([#887](https://github.com/simonw/datasette/issues/887))
- Now only loads Python files from a directory passed using the `--plugins-dir` option - thanks, Amjith Ramanujam. ([#890](https://github.com/simonw/datasette/pull/890))
- New documentation section on [Publishing to Vercel](https://datasette.readthedocs.io/en/stable/publish.html#publish-vercel).",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.47,29585154,MDc6UmVsZWFzZTI5NTg1MTU0,0.47,main,0.47,0,9599,simonw,0,2020-08-12T00:42:47Z,2020-08-12T00:44:52Z,"- Datasette now has [a GitHub discussions forum](https://github.com/simonw/datasette/discussions) for conversations about the project that go beyond just bug reports and issues.
- Datasette can now be installed on macOS using Homebrew! Run `brew install simonw/datasette/datasette`. See [Using Homebrew](https://datasette.readthedocs.io/en/stable/installation.html#installation-homebrew). ([#335](https://github.com/simonw/datasette/issues/335))
- Two new commands: `datasette install name-of-plugin` and `datasette uninstall name-of-plugin`. These are equivalent to `pip install` and `pip uninstall` but automatically run in the same virtual environment as Datasette, so users don't have to figure out where that virtual environment is - useful for installations created using Homebrew or `pipx`. See [Installing plugins](https://datasette.readthedocs.io/en/stable/plugins.html#plugins-installing). ([#925](https://github.com/simonw/datasette/issues/925))
- A new command-line option, `datasette --get`, accepts a path to a URL within the Datasette instance. It will run that request through Datasette (without starting a web server) and print out the repsonse. See [datasette --get](https://datasette.readthedocs.io/en/stable/getting_started.html#getting-started-datasette-get) for an example. ([#926](https://github.com/simonw/datasette/issues/926))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.47.1,29587652,MDc6UmVsZWFzZTI5NTg3NjUy,0.47.1,main,0.47.1,0,9599,simonw,0,2020-08-12T02:37:24Z,2020-08-12T02:38:00Z,- Fixed a bug where the `sdist` distribution of Datasette was not correctly including the template files. ([#930](https://github.com/simonw/datasette/issues/930)),107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.47.2,29625082,MDc6UmVsZWFzZTI5NjI1MDgy,0.47.2,main,0.47.2,0,9599,simonw,0,2020-08-12T20:54:33Z,2020-08-12T20:55:28Z,- Fixed an issue with the Docker image [published to Docker Hub](https://hub.docker.com/r/datasetteproject/datasette). ([#931](https://github.com/simonw/datasette/issues/931)),107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.47.3,29738457,MDc6UmVsZWFzZTI5NzM4NDU3,0.47.3,main,0.47.3,0,9599,simonw,0,2020-08-15T20:56:08Z,2020-08-15T21:03:58Z,- The `datasette --get` command-line mechanism now ensures any plugins using the `startup()` hook are correctly executed. ([#934](https://github.com/simonw/datasette/issues/934)),107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.48,29749566,MDc6UmVsZWFzZTI5NzQ5NTY2,0.48,main,0.48,0,9599,simonw,0,2020-08-16T18:56:31Z,2020-08-16T18:58:34Z,"- Datasette documentation now lives at [docs.datasette.io](https://docs.datasette.io/).
- `db.is_mutable` property is now documented and tested, see [Database introspection](https://docs.datasette.io/en/stable/internals.html#internals-database-introspection).
- The `extra_template_vars`, `extra_css_urls`, `extra_js_urls` and `extra_body_script` plugin hooks now all accept the same arguments. See [extra_template_vars(template, database, table, columns, view_name, request, datasette)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-extra-template-vars) for details. ([#939](https://github.com/simonw/datasette/issues/939))
- Those hooks now accept a new `columns` argument detailing the table columns that will be rendered on that page. ([#938](https://github.com/simonw/datasette/issues/938))
- Fixed bug where plugins calling `db.execute_write_fn()` could hang Datasette if the connection failed. ([#935](https://github.com/simonw/datasette/issues/935))
- Fixed bug with the `?_nl=on` output option and binary data. ([#914](https://github.com/simonw/datasette/issues/914))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.49,31288240,MDc6UmVsZWFzZTMxMjg4MjQw,0.49,main,0.49,0,9599,simonw,0,2020-09-14T21:38:24Z,2020-09-14T21:40:11Z,"- Writable canned queries now expose a JSON API, see [JSON API for writable canned queries](https://docs.datasette.io/en/stable/sql_queries.html#canned-queries-json-api). ([#880](https://github.com/simonw/datasette/issues/880))
- New mechanism for defining page templates with custom path parameters - a template file called `pages/about/{slug}.html` will be used to render any requests to `/about/something`. See [Path parameters for pages](https://docs.datasette.io/en/stable/custom_templates.html#custom-pages-parameters). ([#944](https://github.com/simonw/datasette/issues/944))
- `register_output_renderer()` render functions can now return a `Response`. ([#953](https://github.com/simonw/datasette/issues/953))
- New `--upgrade` option for `datasette install`. ([#945](https://github.com/simonw/datasette/issues/945))
- New `datasette --pdb` option. ([#962](https://github.com/simonw/datasette/issues/962))
- `datasette --get` exit code now reflects the internal HTTP status code. ([#947](https://github.com/simonw/datasette/issues/947))
- New `raise_404()` template function for returning 404 errors. ([#964](https://github.com/simonw/datasette/issues/964))
- `datasette publish heroku` now deploys using Python 3.8.5
- Upgraded [CodeMirror](https://codemirror.net/) to 5.57.0. ([#948](https://github.com/simonw/datasette/issues/948))
- Upgraded code style to Black 20.8b1. ([#958](https://github.com/simonw/datasette/issues/958))
- Fixed bug where selected facets were not correctly persisted in hidden form fields on the table page. ([#963](https://github.com/simonw/datasette/issues/963))
- Renamed the default error template from `500.html` to `error.html`.
- Custom error pages are now documented, see [Custom error pages](https://docs.datasette.io/en/stable/custom_templates.html#custom-pages-errors). ([#965](https://github.com/simonw/datasette/issues/965))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.49.1,31354944,MDc6UmVsZWFzZTMxMzU0OTQ0,0.49.1,main,0.49.1,0,9599,simonw,0,2020-09-15T20:20:15Z,2020-09-15T20:21:16Z,"- Fixed a bug with writable canned queries that use magic parameters but accept no non-magic arguments. (#967)
",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.49a0,30353073,MDc6UmVsZWFzZTMwMzUzMDcz,0.49a0,main,0.49a0,0,9599,simonw,1,2020-08-28T23:12:47Z,2020-08-28T23:18:09Z,"- `register_output_renderer()` render functions can now return a `Response`. ([#953](https://github.com/simonw/datasette/issues/953))
- New `--upgrade` option for `datasette install`. ([#945](https://github.com/simonw/datasette/issues/945))
- `datasette publish heroku` now deploys using Python 3.8.5",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.49a1,31227999,MDc6UmVsZWFzZTMxMjI3OTk5,0.49a1,main,0.49a1,0,9599,simonw,1,2020-09-14T02:47:21Z,2020-09-14T02:48:19Z,"- Upgraded [CodeMirror](https://codemirror.net/) to 5.57.0. ([#948](https://github.com/simonw/datasette/issues/948))
- Upgraded code style to Black 20.8b1. ([#958](https://github.com/simonw/datasette/issues/958))
- New `datasette --pdb` option. ([#962](https://github.com/simonw/datasette/issues/962))
- `datasette --get` exit code now reflects the internal HTTP status code. ([#947](https://github.com/simonw/datasette/issues/947))
- Fixed bug where selected facets were not correctly persisted in hidden form fields on the table page. ([#963](https://github.com/simonw/datasette/issues/963))
- New mechanism for defining page templates with custom path parameters. ([#944](https://github.com/simonw/datasette/issues/944))",107914493,datasette,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4a0,30632372,MDc6UmVsZWFzZTMwNjMyMzcy,0.4a0,main,0.4a0,0,9599,simonw,1,2020-09-03T03:53:29Z,2020-09-03T03:54:23Z,"- Incomplete preview of the `/-/beta` search interface. #3 #9
",197431109,dogsheep-beta,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4a1,30678449,MDc6UmVsZWFzZTMwNjc4NDQ5,0.4a1,main,0.4a1,0,9599,simonw,1,2020-09-03T18:03:15Z,2020-09-03T18:03:50Z,"- Added `received` category. #10
- New `is_public` column. #11",197431109,dogsheep-beta,
https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.5,19889174,MDc6UmVsZWFzZTE5ODg5MTc0,0.5,master,0.5,0,9599,simonw,0,2019-09-10T17:38:46Z,2019-09-10T17:39:47Z,* Added `followers-ids` and `friends-ids` subcommands,206156866,twitter-to-sqlite,
https://github.com/dogsheep/github-to-sqlite/releases/tag/0.5,20663605,MDc6UmVsZWFzZTIwNjYzNjA1,0.5,master,0.5,0,9599,simonw,0,2019-10-13T05:28:24Z,2019-10-13T05:30:05Z,"* New command: `github-to-sqlite issue-comments` for importing comments on issues - #7
* `github-to-sqlite issues` now accepts optional `--issue=1` argument
* Fixed bug inserting users into already-created table with wrong columns - #6",207052882,github-to-sqlite,
https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.5,24953710,MDc6UmVsZWFzZTI0OTUzNzEw,0.5,master,0.5,0,9599,simonw,0,2020-03-28T01:50:51Z,2020-03-28T01:55:19Z,* Upgraded to latest sqlite-utils,197882382,healthkit-to-sqlite,
https://github.com/dogsheep/dogsheep-beta/releases/tag/0.5,30699190,MDc6UmVsZWFzZTMwNjk5MTkw,0.5,main,0.5,0,9599,simonw,0,2020-09-04T01:45:35Z,2020-09-04T01:46:16Z,- Custom template displays can now render a point on a map. #12,197431109,dogsheep-beta,
https://github.com/simonw/datasette/releases/tag/0.50,32384200,MDc6UmVsZWFzZTMyMzg0MjAw,0.50,main,0.50,0,9599,simonw,0,2020-10-09T17:57:55Z,2020-10-09T17:58:27Z,"The key new feature in this release is the **column actions** menu on the table page ([#891](https://github.com/simonw/datasette/issues/891)). This can be used to sort a column in ascending or descending order, facet data by that column or filter the table to just rows that have a value for that column.
Plugin authors can use the new [datasette.client](https://docs.datasette.io/en/stable/internals.html#internals-datasette-client) object to make internal HTTP requests from their plugins, allowing them to make use of Datasette's JSON API. ([#943](https://github.com/simonw/datasette/issues/943))
New [Deploying Datasette](https://docs.datasette.io/en/stable/deploying.html#deploying) documentation with guides for deploying Datasette on a Linux server [using systemd](https://docs.datasette.io/en/stable/deploying.html#deploying-systemd) or to hosting providers [that support buildpacks](https://docs.datasette.io/en/stable/deploying.html#deploying-buildpacks). ([#514](https://github.com/simonw/datasette/issues/514), [#997](https://github.com/simonw/datasette/issues/997))
Other improvements in this release:
- [Publishing to Google Cloud Run](https://docs.datasette.io/en/stable/publish.html#publish-cloud-run) documentation now covers Google Cloud SDK options. Thanks, Geoffrey Hing. ([#995](https://github.com/simonw/datasette/pull/995))
- New `datasette -o` option which opens your browser as soon as Datasette starts up. ([#970](https://github.com/simonw/datasette/issues/970))
- Datasette now sets `sqlite3.enable_callback_tracebacks(True)` so that errors in custom SQL functions will display tracebacks. ([#891](https://github.com/simonw/datasette/issues/891))
- Fixed two rendering bugs with column headers in portrait mobile view. ([#978](https://github.com/simonw/datasette/issues/978), [#980](https://github.com/simonw/datasette/issues/980))
- New `db.table_column_details(table)` introspection method for retrieving full details of the columns in a specific table, see [Database introspection](https://docs.datasette.io/en/stable/internals.html#internals-database-introspection).
- Fixed a routing bug with custom page wildcard templates. ([#996](https://github.com/simonw/datasette/issues/996))
- `datasette publish heroku` now deploys using Python 3.8.6.
- New `datasette publish heroku --tar=` option. ([#969](https://github.com/simonw/datasette/issues/969))
- `OPTIONS` requests against HTML pages no longer return a 500 error. ([#1001](https://github.com/simonw/datasette/issues/1001))
- Datasette now supports Python 3.9.",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.50.1,32395303,MDc6UmVsZWFzZTMyMzk1MzAz,0.50.1,main,0.50.1,0,9599,simonw,0,2020-10-10T00:41:35Z,2020-10-10T00:44:23Z,"- Fixed a bug introduced in 0.50 where the export as JSON/CSV links on the table, row and query pages were broken. (#1010)
",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.50.2,32397338,MDc6UmVsZWFzZTMyMzk3MzM4,0.50.2,main,0.50.2,0,9599,simonw,0,2020-10-10T03:53:47Z,2020-10-10T03:59:18Z,"* Fixed another bug introduced in 0.50 where column header links on the table page were broken. (#1011)
",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.50a0,32072114,MDc6UmVsZWFzZTMyMDcyMTE0,0.50a0,main,0.50a0,0,9599,simonw,1,2020-10-01T23:35:04Z,2020-10-01T23:35:54Z,"- New column action menu - table columns now show a cog icon which provides a contextual menu for that column. ([#981](https://github.com/simonw/datasette/issues/981))
- New `datasette -o` option which opens your browser as soon as Datasette starts up. ([#970](https://github.com/simonw/datasette/issues/970)
- `sqlite3.enable_callback_tracebacks(True)` so errors in custom SQL functions will now display tracebacks. ([#891](https://github.com/simonw/datasette/issues/891))
- Fixed two rendering bugs with column headers in portrait mobile view. ([#978](https://github.com/simonw/datasette/issues/978), [#980](https://github.com/simonw/datasette/issues/980))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.50a1,32238807,MDc6UmVsZWFzZTMyMjM4ODA3,0.50a1,main,0.50a1,0,9599,simonw,1,2020-10-06T20:50:54Z,2020-10-06T20:52:49Z,"- Column action menu now shows the column type. ([#993](https://github.com/simonw/datasette/issues/993))
- Column action sort links now correctly link to the first page of sorted results. ([#989](https://github.com/simonw/datasette/issues/989))
- [Publishing to Google Cloud Run](https://docs.datasette.io/en/latest/publish.html#publish-cloud-run) documentation now covers Google Cloud SDK options. Thanks, Geoffrey Hing. ([#995](https://github.com/simonw/datasette/pull/995))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.51,33311677,MDc6UmVsZWFzZTMzMzExNjc3,0.51,main,0.51,0,9599,simonw,0,2020-10-31T22:24:54Z,2020-10-31T22:29:33Z,"A new visual design, plugin hooks for adding navigation options, better handling of binary data, URL building utility methods and better support for running Datasette behind a proxy.
### New visual design
Datasette is no longer white and grey with blue and purple links! [Natalie Downe](https://twitter.com/natbat) has been working on a visual refresh, the first iteration of which is included in this release. ([#1056](https://github.com/simonw/datasette/pull/1056))
![datasette-0 51](https://user-images.githubusercontent.com/9599/97791267-d9011e80-1b8d-11eb-9b1b-42908266f36f.png)
### Plugins can now add links within Datasette
A number of existing Datasette plugins add new pages to the Datasette interface, providig tools for things like [uploading CSVs](https://github.com/simonw/datasette-upload-csvs), [editing table schemas](https://github.com/simonw/datasette-edit-schema) or [configuring full-text search](https://github.com/simonw/datasette-configure-fts).
Plugins like this can now link to themselves from other parts of Datasette interface. The [menu_links(datasette, actor)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-menu-links) hook ([#1064](https://github.com/simonw/datasette/issues/1064)) lets plugins add links to Datasette's new top-right application menu, and the [table_actions(datasette, actor, database, table)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-table-actions) hook ([#1066](https://github.com/simonw/datasette/issues/1066)) adds links to a new ""table actions"" menu on the table page.
The demo at [latest.datasette.io](https://latest.datasette.io/) now includes some example plugins. To see the new table actions menu first [sign into that demo as root](https://latest.datasette.io/login-as-root) and then visit the [facetable](https://latest.datasette.io/fixtures/facetable) table to see the new cog icon menu at the top of the page.
### Binary data
SQLite tables can contain binary data in `BLOB` columns. Datasette now provides links for users to download this data directly from Datasette, and uses those links to make binary data available from CSV exports. See [Binary data](https://docs.datasette.io/en/stable/binary_data.html#binary) for more details. ([#1036](https://github.com/simonw/datasette/issues/1036) and [#1034](https://github.com/simonw/datasette/issues/1034)).
### URL building
The new [datasette.urls](https://docs.datasette.io/en/stable/internals.html#internals-datasette-urls) family of methods can be used to generate URLs to key pages within the Datasette interface, both within custom templates and Datasette plugins. See [Building URLs within plugins](https://docs.datasette.io/en/stable/writing_plugins.html#writing-plugins-building-urls) for more details. ([#904](https://github.com/simonw/datasette/issues/904))
### Running Datasette behind a proxy
The [base_url](https://docs.datasette.io/en/stable/config.html#config-base-url) configuration option is designed to help run Datasette on a specific path behind a proxy - for example if you want to run an instance of Datasette at `/my-datasette/` within your existing site's URL hierarchy, proxied behind nginx or Apache.
Support for this configuration option has been greatly improved ([#1023](https://github.com/simonw/datasette/issues/1023)), and guidelines for using it are now available in a new documentation section on [Running Datasette behind a proxy](https://docs.datasette.io/en/stable/deploying.html#deploying-proxy). ([#1027](https://github.com/simonw/datasette/issues/1027))
### Smaller changes
- Wide tables shown within Datasette now scroll horizontally ([#998](https://github.com/simonw/datasette/issues/998)). This is achieved using a new `` element which may impact the implementation of some plugins (for example [this change to datasette-cluster-map](https://github.com/simonw/datasette-cluster-map/commit/fcb4abbe7df9071c5ab57defd39147de7145b34e)).
- New [debug-menu](https://docs.datasette.io/en/stable/authentication.html#permissions-debug-menu) permission. ([#1068](https://github.com/simonw/datasette/issues/1068))
- Removed `--debug` option, which didn't do anything. ([#814](https://github.com/simonw/datasette/issues/814))
- `Link:` HTTP header pagination. ([#1014](https://github.com/simonw/datasette/issues/1014))
- `x` button for clearing filters. ([#1016](https://github.com/simonw/datasette/issues/1016))
- Edit SQL button on canned queries, ([#1019](https://github.com/simonw/datasette/issues/1019))
- `--load-extension=spatialite` shortcut. ([#1028](https://github.com/simonw/datasette/issues/1028))
- scale-in animation for column action menu. ([#1039](https://github.com/simonw/datasette/issues/1039))
- Option to pass a list of templates to `.render_template()` is now documented. ([#1045](https://github.com/simonw/datasette/issues/1045))
- New `datasette.urls.static_plugins()` method. ([#1033](https://github.com/simonw/datasette/issues/1033))
- `datasette -o` option now opens the most relevant page. ([#976](https://github.com/simonw/datasette/issues/976))
- `datasette --cors` option now enables access to `/database.db` downloads. ([#1057](https://github.com/simonw/datasette/issues/1057))
- Database file downloads now implement cascading permissions, so you can download a database if you have `view-database-download` permission even if you do not have permission to access the Datasette instance. ([#1058](https://github.com/simonw/datasette/issues/1058))
- New documentation on [Designing URLs for your plugin](https://docs.datasette.io/en/stable/writing_plugins.html#writing-plugins-designing-urls). ([#1053](https://github.com/simonw/datasette/issues/1053))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.51.1,33314301,MDc6UmVsZWFzZTMzMzE0MzAx,0.51.1,main,0.51.1,0,9599,simonw,0,2020-11-01T03:33:47Z,2020-11-01T03:34:36Z,- Improvements to the new [Binary data](https://docs.datasette.io/en/stable/binary_data.html#binary) documentation page.,107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.51a0,32791115,MDc6UmVsZWFzZTMyNzkxMTE1,0.51a0,main,0.51a0,0,9599,simonw,1,2020-10-20T05:31:14Z,2020-10-20T05:33:01Z,"- Fixed a bunch of issues relating to the [base_url](https://docs.datasette.io/en/latest/config.html#config-base-url) setting. ([#1023](https://github.com/simonw/datasette/issues/1023))
- New `datasette.urls` URL builder for plugins, see [Building URLs within plugins](https://docs.datasette.io/en/latest/writing_plugins.html#writing-plugins-building-urls). ([#904](https://github.com/simonw/datasette/issues/904))
- Removed `--debug` option, which didn't do anything. ([#814](https://github.com/simonw/datasette/issues/814))
- `Link:` HTTP header pagination. ([#1014](https://github.com/simonw/datasette/issues/1014))
- `x` button for clearing filters. ([#1016](https://github.com/simonw/datasette/issues/1016))
- Edit SQL button on canned queries, ([#1019](https://github.com/simonw/datasette/issues/1019))
- `--load-extension=spatialite` shortcut. ([#1028](https://github.com/simonw/datasette/issues/1028))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.51a1,33253780,MDc6UmVsZWFzZTMzMjUzNzgw,0.51a1,main,0.51a1,0,9599,simonw,1,2020-10-30T05:35:23Z,2020-10-30T05:37:34Z,"- New colour scheme and improved visual design, courtesy of Natalie Downe. ([#1056](https://github.com/simonw/datasette/pull/1056))
- scale-in animation for column action menu. ([#1039](https://github.com/simonw/datasette/issues/1039))
- Wide tables now scroll horizontally. ([#998](https://github.com/simonw/datasette/issues/998))
- Option to pass a list of templates to `.render_template()` is now documented. ([#1045](https://github.com/simonw/datasette/issues/1045))
- New `datasette.urls.static_plugins()` method. ([#1033](https://github.com/simonw/datasette/issues/1033))
- `BLOB` column values can now be downloaded directly from the Datasette UI. ([#1036](https://github.com/simonw/datasette/issues/1036))
- `.csv` exports now link to direct `BLOB` downloads. ([#1034](https://github.com/simonw/datasette/issues/1034))
- `datasette -o` option now opens the most relevant page. ([#976](https://github.com/simonw/datasette/issues/976))
- `datasette --cors` option now enables access to `/database.db` downloads. ([#1057](https://github.com/simonw/datasette/issues/1057))
- Database file downloads now implement cascading permissions, so you can download a database if you have `view-database-download` permission even if you do not have permission to access the Datasette instance. ([#1058](https://github.com/simonw/datasette/issues/1058))
- New documentation on [Designing URLs for your plugin](https://docs.datasette.io/en/latest/writing_plugins.html#writing-plugins-designing-urls). ([#1053](https://github.com/simonw/datasette/issues/1053))
- New navigation menu plus a [menu_links(datasette, actor)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-menu-links) plugin hook to customize it. ([#1064](https://github.com/simonw/datasette/issues/1064))
- [table_actions(datasette, actor, database, table)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-table-actions) plugin hook for the new table actions menu. ([#1066](https://github.com/simonw/datasette/issues/1066))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.51a2,33284522,MDc6UmVsZWFzZTMzMjg0NTIy,0.51a2,main,0.51a2,0,9599,simonw,1,2020-10-30T17:56:02Z,2020-10-30T17:57:53Z,"- New [load_template(template, request, datasette)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-load-template) plugin hook. ([#1042](https://github.com/simonw/datasette/issues/1042))
- New [debug-menu](https://docs.datasette.io/en/latest/authentication.html#permissions-debug-menu) permission. ([#1068](https://github.com/simonw/datasette/issues/1068))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.52,34539374,MDc6UmVsZWFzZTM0NTM5Mzc0,0.52,main,0.52,0,9599,simonw,0,2020-11-28T23:54:35Z,2020-11-28T23:57:12Z,"This release includes a number of changes relating to an internal rebranding effort: Datasette's **configuration** mechanism (things like `datasette --config default_page_size:10`) has been renamed to **settings**.
- New `--setting default_page_size 10` option as a replacement for `--config default_page_size:10` (note the lack of a colon). The `--config` option is deprecated but will continue working until Datasette 1.0. ([#992](https://github.com/simonw/datasette/issues/992))
- The `/-/config` introspection page is now `/-/settings`, and the previous page redirects to the new one. ([#1103](https://github.com/simonw/datasette/issues/1103))
- The `config.json` file in [Configuration directory mode](https://docs.datasette.io/en/stable/settings.html#config-dir) is now called `settings.json`. ([#1104](https://github.com/simonw/datasette/issues/1104))
- The undocumented `datasette.config()` internal method has been replaced by a documented [.setting(key)](https://docs.datasette.io/en/stable/internals.html#datasette-setting) method. ([#1107](https://github.com/simonw/datasette/issues/1107))
Also in this release:
- New plugin hook: [database_actions(datasette, actor, database)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-database-actions), which adds menu items to a new cog menu shown at the top of the database page. ([#1077](https://github.com/simonw/datasette/issues/1077))
- `datasette publish cloudrun` has a new `--apt-get-install` option that can be used to install additional Ubuntu packages as part of the deployment. This is useful for deploying the new [datasette-ripgrep plugin](https://github.com/simonw/datasette-ripgrep). ([#1110](https://github.com/simonw/datasette/issues/1110))
- Swept the documentation to remove words that minimize involved difficulty. ([#1089](https://github.com/simonw/datasette/issues/1089))
And some bug fixes:
- Foreign keys linking to rows with blank label columns now display as a hyphen, allowing those links to be clicked. ([#1086](https://github.com/simonw/datasette/issues/1086))
- Fixed bug where row pages could sometimes 500 if the underlying queries exceeded a time limit. ([#1088](https://github.com/simonw/datasette/issues/1088))
- Fixed a bug where the table action menu could appear partially obscured by the edge of the page. ([#1084](https://github.com/simonw/datasette/issues/1084))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.52.1,34551688,MDc6UmVsZWFzZTM0NTUxNjg4,0.52.1,main,0.52.1,0,9599,simonw,0,2020-11-29T19:38:29Z,2020-11-29T19:39:52Z,"- Documentation on [Testing plugins](https://docs.datasette.io/en/stable/testing_plugins.html#testing-plugins) now recommends using [datasette.client](https://docs.datasette.io/en/stable/internals.html#internals-datasette-client). ([#1102](https://github.com/simonw/datasette/issues/1102))
- Fix bug where compound foreign keys produced broken links. ([#1098](https://github.com/simonw/datasette/issues/1098))
- `datasette --load-module=spatialite` now also checks for `/usr/local/lib/mod_spatialite.so`. Thanks, Dan Peterson. ([#1114](https://github.com/simonw/datasette/issues/1114))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.52.2,34725716,MDc6UmVsZWFzZTM0NzI1NzE2,0.52.2,main,0.52.2,0,9599,simonw,0,2020-12-03T00:57:40Z,2020-12-03T00:58:43Z,"- Generated columns from SQLite 3.31.0 or higher are now correctly displayed. ([#1116](https://github.com/simonw/datasette/issues/1116))
- Error message if you attempt to open a SpatiaLite database now suggests using `--load-extension=spatialite` if it detects that the extension is available in a common location. ([#1115](https://github.com/simonw/datasette/issues/1115))
- `OPTIONS` requests against the `/database` page no longer raise a 500 error. ([#1100](https://github.com/simonw/datasette/issues/1100))
- Databases larger than 32MB that are published to Cloud Run can now be downloaded. ([#749](https://github.com/simonw/datasette/issues/749))
- Fix for misaligned cog icon on table and database pages. Thanks, Abdussamet Koçak. ([#1121](https://github.com/simonw/datasette/issues/1121))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.52.3,34782337,MDc6UmVsZWFzZTM0NzgyMzM3,0.52.3,main,0.52.3,0,9599,simonw,0,2020-12-03T19:07:05Z,2020-12-03T19:08:29Z,- Fixed bug where static assets would 404 for Datasette installed on ARM Amazon Linux. ([#1124](https://github.com/simonw/datasette/issues/1124>)),107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.52.4,34882011,MDc6UmVsZWFzZTM0ODgyMDEx,0.52.4,main,0.52.4,0,9599,simonw,0,2020-12-05T19:42:42Z,2020-12-05T19:42:57Z,"- Show [pysqlite3](https://github.com/coleifer/pysqlite3) version on `/-/versions`, if installed. ([#1125](https://github.com/simonw/datasette/issues/1125))
- Errors output by Datasette (e.g. for invalid SQL queries) now go to `stderr`, not `stdout`. ([#1131](https://github.com/simonw/datasette/issues/1131))
- Fix for a startup error on windows caused by unnecessary `from os import EX_CANTCREAT` - thanks, Abdussamet Koçak. ([#1094](https://github.com/simonw/datasette/issues/1094))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.52.5,35063580,MDc6UmVsZWFzZTM1MDYzNTgw,0.52.5,0.52.x,0.52.5,0,9599,simonw,0,2020-12-09T20:03:44Z,2020-12-09T20:10:23Z,- Fix for error caused by combining the `_searchmode=raw` and `?_search_COLUMN` parameters. ([#1134](https://github.com/simonw/datasette/issues/1134)),107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.53,35131848,MDc6UmVsZWFzZTM1MTMxODQ4,0.53,main,0.53,0,9599,simonw,0,2020-12-11T01:44:36Z,2020-12-11T01:46:44Z,"Datasette has an official project website now, at . This release mainly updates the documentation to reflect the new site.
- New `?column__arraynotcontains=` table filter. ([#1132](https://github.com/simonw/datasette/issues/1132))
- `datasette serve` has a new `--create` option, which will create blank database files if they do not already exist rather than exiting with an error. ([#1135](https://github.com/simonw/datasette/issues/1135))
- New `?_header=off` option for CSV export which omits the CSV header row, [documented here](https://docs.datasette.io/en/stable/csv_export.html#csv-export-url-parameters). ([#1133](https://github.com/simonw/datasette/issues/1133))
- ""Powered by Datasette"" link in the footer now links to . ([#1138](https://github.com/simonw/datasette/issues/1138))
- Project news no longer lives in the README - it can now be found at . ([#1137](https://github.com/simonw/datasette/issues/1137))",107914493,datasette,
https://github.com/simonw/datasette/releases/tag/0.54,36871901,MDc6UmVsZWFzZTM2ODcxOTAx,0.54,main,0.54,0,9599,simonw,0,2021-01-25T17:35:06Z,2021-01-25T17:36:30Z,"The two big new features in this release are the `_internal` SQLite in-memory database storing details of all connected databases and tables, and support for JavaScript modules in plugins and additional scripts.
For additional commentary on this release, see [Datasette 0.54, the annotated release notes](https://simonwillison.net/2021/Jan/25/datasette/).
### The _internal database
As part of ongoing work to help Datasette handle much larger numbers of connected databases and tables (see [Datasette Library](https://github.com/simonw/datasette/issues/417)) Datasette now maintains an in-memory SQLite database with details of all of the attached databases, tables, columns, indexes and foreign keys. ([#1150](https://github.com/simonw/datasette/issues/1150))
This will support future improvements such as a searchable, paginated homepage of all available tables.
You can explore an example of this database by [signing in as root](https://latest.datasette.io/login-as-root) to the `latest.datasette.io` demo instance and then navigating to [latest.datasette.io/_internal](https://latest.datasette.io/_internal).
Plugins can use these tables to introspect attached data in an efficient way. Plugin authors should note that this is not yet considered a stable interface, so any plugins that use this may need to make changes prior to Datasette 1.0 if the `_internal` table schemas change.
### Named in-memory database support
As part of the work building the `_internal` database, Datasette now supports named in-memory databases that can be shared across multiple connections. This allows plugins to create in-memory databases which will persist data for the lifetime of the Datasette server process. ([#1151](https://github.com/simonw/datasette/issues/1151))
The new `memory_name=` parameter to the [Database class](https://docs.datasette.io/en/stable/internals.html#internals-database) can be used to create named, shared in-memory databases.
### JavaScript modules
[JavaScript modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) were introduced in ECMAScript 2015 and provide native browser support for the `import` and `export` keywords.
To use modules, JavaScript needs to be included in `