html_url,id,node_id,tag_name,target_commitish,name,draft,author,author_label,prerelease,created_at,published_at,body,repo,repo_label,reactions 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.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.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.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.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.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.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/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.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.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.31,21426008,MDc6UmVsZWFzZTIxNDI2MDA4,0.31,master,Datasette 0.31,0,9599,simonw,0,2019-11-12T05:33:51Z,2019-11-13T02:16:15Z,"This version adds compatibility with Python 3.8 and breaks compatibility with Python 3.5. Full release notes: https://datasette.readthedocs.io/en/stable/changelog.html#v0-31",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.32,21492068,MDc6UmVsZWFzZTIxNDkyMDY4,0.32,master,Datasette 0.32,0,9599,simonw,0,2019-11-14T23:20:21Z,2019-11-14T23:42:14Z,"Datasette now renders templates using [Jinja async mode](https://jinja.palletsprojects.com/en/2.10.x/api/#async-support). This makes it easy for plugins to provide custom template functions that perform asynchronous actions, for example the new [datasette-template-sql](https://github.com/simonw/datasette-template-sql) plugin which allows custom templates to directly execute SQL queries and render their results. (#628) https://datasette.readthedocs.io/en/latest/changelog.html#v0-32",107914493,datasette, https://github.com/simonw/datasette/releases/tag/0.33,22415542,MDc6UmVsZWFzZTIyNDE1NTQy,0.33,master,Datasette 0.33,0,9599,simonw,0,2019-12-22T16:27:04Z,2019-12-22T16:43:31Z,"* `rowid` is now included in dropdown menus for filtering tables (#636) * Columns are now only suggested for faceting if they have at least one value with more than one record (#638) * Queries with no results now display “0 results” (#637) * Improved documentation for the `--static` option (#641) * asyncio task information is now included on the `/-/threads` debug page * Bumped Uvicorn dependency 0.11 * You can now use `--port 0` to listen on an available port * New `template_debug` setting for debugging templates, e.g. https://latest.datasette.io/fixtures/roadside_attractions?_context=1 (#654) https://datasette.readthedocs.io/en/latest/changelog.html#v0-33",107914493,datasette, https://github.com/simonw/datasette/releases/tag/0.34,23239304,MDc6UmVsZWFzZTIzMjM5MzA0,0.34,master,Datasette 0.34,0,9599,simonw,0,2020-01-30T00:09:01Z,2020-01-30T00:29:21Z,"- `_search=` queries are now correctly escaped using a new `escape_fts()` custom SQL function. This means you can now run searches for strings like `park.` without seeing errors. (#651) - Google Cloud Run is no longer in beta, so `datasette publish cloudrun` has been updated to work even if the user has not installed the `gcloud` beta components package. Thanks, Katie McLaughlin (#660) - `datasette package` now accepts a `--port` option for specifying which port the resulting Docker container should listen on. (#661) https://datasette.readthedocs.io/en/stable/changelog.html#v0-34 ",107914493,datasette, https://github.com/simonw/datasette/releases/tag/0.35,23395622,MDc6UmVsZWFzZTIzMzk1NjIy,0.35,master,Datasette 0.35,0,9599,simonw,0,2020-02-05T02:17:47Z,2020-02-05T02:32:34Z,"* Added five new plugins and one new conversion tool to the [The Datasette Ecosystem](https://datasette.readthedocs.io/en/latest/ecosystem.html#ecosystem). * The `Datasette` class has a new `render_template()` method which can be used by plugins to render templates using Datasette’s pre-configured [Jinja](https://jinja.palletsprojects.com/) templating library. * You can now execute SQL queries that start with a `-- comment` - thanks, Jay Graves (#653) https://datasette.readthedocs.io/en/latest/changelog.html#v0-35",107914493,datasette, https://github.com/simonw/datasette/releases/tag/0.36,23896184,MDc6UmVsZWFzZTIzODk2MTg0,0.36,master,Datasette 0.36,0,9599,simonw,0,2020-02-22T03:04:46Z,2020-02-22T03:24:50Z,"* The `datasette` object passed to plugins now has API documentation: [Datasette class](https://datasette.readthedocs.io/en/latest/datasette.html#datasette). (#576) * New methods on `datasette`: `.add_database()` and `.remove_database()` - [documentation](https://datasette.readthedocs.io/en/latest/datasette.html#datasette-add-database). (#671) * `prepare_connection()` plugin hook now takes optional `datasette` and `database` arguments - [prepare_connection(conn, database, datasette)](https://datasette.readthedocs.io/en/latest/plugins.html#plugin-hook-prepare-connection). (#678) * Added three new plugins and one new conversion tool to the [The Datasette Ecosystem](https://datasette.readthedocs.io/en/latest/ecosystem.html#ecosystem). https://datasette.readthedocs.io/en/latest/changelog.html#v0-36",107914493,datasette, https://github.com/simonw/datasette/releases/tag/0.37,23986460,MDc6UmVsZWFzZTIzOTg2NDYw,0.37,master,Datasette 0.37,0,9599,simonw,0,2020-02-26T01:22:02Z,2020-02-26T03:44:07Z,"* Plugins now have a supported mechanism for writing to a database, using the new `.execute_write()` and `.execute_write_fn()` methods. [Documentation](https://datasette.readthedocs.io/en/stable/internals.html#database-execute-write). (#682) * Immutable databases that have had their rows counted using the `inspect` command now use the calculated count more effectively - thanks, Kevin Keogh. (#666) * `--reload` no longer restarts the server if a database file is modified, unless that database was opened immutable mode with `-i`. (#494) * New `?_searchmode=raw` option turns off escaping for FTS queries in `?_search=` allowing full use of SQLite’s [FTS5 query syntax](https://www.sqlite.org/fts5.html#full_text_query_syntax). (#676) ",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.54a0,36623336,MDc6UmVsZWFzZTM2NjIzMzM2,0.54a0,main,0.54a0,0,9599,simonw,1,2021-01-19T20:50:12Z,2021-01-19T20:51:13Z,"**Alpha release**. Release notes in progress. - Improved support for named in-memory databases. ([#1151](https://github.com/simonw/datasette/issues/1151)) - New `_internal` in-memory database tracking attached databases, tables and columns. ([#1150](https://github.com/simonw/datasette/issues/1150)) - Support for JavaScript modules. ([#1186](https://github.com/simonw/datasette/issues/1186), [#1187](https://github.com/simonw/datasette/issues/1187))",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 `