id,page,ref,title,content,breadcrumbs,references changelog:id18,changelog,id18,0.61 (2022-03-23),"In preparation for Datasette 1.0, this release includes two potentially backwards-incompatible changes. Hashed URL mode has been moved to a separate plugin, and the way Datasette generates URLs to databases and tables with special characters in their name such as / and . has changed. Datasette also now requires Python 3.7 or higher. URLs within Datasette now use a different encoding scheme for tables or databases that include ""special"" characters outside of the range of a-zA-Z0-9_- . This scheme is explained here: Tilde encoding . ( #1657 ) Removed hashed URL mode from Datasette. The new datasette-hashed-urls plugin can be used to achieve the same result, see datasette-hashed-urls for details. ( #1661 ) Databases can now have a custom path within the Datasette instance that is independent of the database name, using the db.route property. ( #1668 ) Datasette is now covered by a Code of Conduct . ( #1654 ) Python 3.6 is no longer supported. ( #1577 ) Tests now run against Python 3.11-dev. ( #1621 ) New datasette.ensure_permissions(actor, permissions) internal method for checking multiple permissions at once. ( #1675 ) New datasette.check_visibility(actor, action, resource=None) internal method for checking if a user can see a resource that would otherwise be invisible to unauthenticated users. ( #1678 ) Table and row HTML pages now include a element and return a Link: URL; rel=""alternate""; type=""application/json+datasette"" HTTP header pointing to the JSON version of those pages. ( #1533 ) Access-Control-Expose-Headers: Link is now added to the CORS headers, allowing remote JavaScript to access that header. Canned queries are now shown at the top of the database page, directly below the SQL editor. Previously they were shown at the bottom, below the list of tables. ( #1612 ) Datasette now has a default favicon. ( #1603 ) sqlite_stat tables are now hidden by default. ( #1587 ) SpatiaLite tables data_licenses , KNN and KNN2 are now hidden by default. ( #1601 ) SQL query tracing mechanism now works for queries executed in asyncio sub-tasks, such as those created by asyncio.gather() . ( #1576 ) datasette.tracer mechanism is now documented. Common Datasette symbols can now be imported directly from the top-level datasette package, see Import shortcuts . Those symbols are Response , Forbidden , NotFound , hookimpl , actor_matches_allow . ( #957 ) /-/versions page now returns additional details for libraries used by SpatiaLite. ( #1607 ) Documentation now links to the Datasette Tutorials . Datasette will now also look for SpatiaLite in /opt/homebrew - thanks, Dan Peterson. ( #1649 ) Fixed bug where custom pages did not work on Windows. Thanks, Robert Christie. ( #1545 ) Fixed error caused when a table had a column named n . ( #1228 )","[""Changelog""]","[{""href"": ""https://github.com/simonw/datasette/issues/1657"", ""label"": ""#1657""}, {""href"": ""https://github.com/simonw/datasette/issues/1661"", ""label"": ""#1661""}, {""href"": ""https://github.com/simonw/datasette/issues/1668"", ""label"": ""#1668""}, {""href"": ""https://github.com/simonw/datasette/blob/main/CODE_OF_CONDUCT.md"", ""label"": ""Code of Conduct""}, {""href"": ""https://github.com/simonw/datasette/issues/1654"", ""label"": ""#1654""}, {""href"": ""https://github.com/simonw/datasette/issues/1577"", ""label"": ""#1577""}, {""href"": ""https://github.com/simonw/datasette/issues/1621"", ""label"": ""#1621""}, {""href"": ""https://github.com/simonw/datasette/issues/1675"", ""label"": ""#1675""}, {""href"": ""https://github.com/simonw/datasette/issues/1678"", ""label"": ""#1678""}, {""href"": ""https://github.com/simonw/datasette/issues/1533"", ""label"": ""#1533""}, {""href"": ""https://github.com/simonw/datasette/issues/1612"", ""label"": ""#1612""}, {""href"": ""https://github.com/simonw/datasette/issues/1603"", ""label"": ""#1603""}, {""href"": ""https://github.com/simonw/datasette/issues/1587"", ""label"": ""#1587""}, {""href"": ""https://github.com/simonw/datasette/issues/1601"", ""label"": ""#1601""}, {""href"": ""https://github.com/simonw/datasette/issues/1576"", ""label"": ""#1576""}, {""href"": ""https://github.com/simonw/datasette/issues/957"", ""label"": ""#957""}, {""href"": ""https://github.com/simonw/datasette/issues/1607"", ""label"": ""#1607""}, {""href"": ""https://datasette.io/tutorials"", ""label"": ""Datasette Tutorials""}, {""href"": ""https://github.com/simonw/datasette/pull/1649"", ""label"": ""#1649""}, {""href"": ""https://github.com/simonw/datasette/issues/1545"", ""label"": ""#1545""}, {""href"": ""https://github.com/simonw/datasette/issues/1228"", ""label"": ""#1228""}]" changelog:id19,changelog,id19,0.60.2 (2022-02-07),Fixed a bug where Datasette would open the same file twice with two different database names if you ran datasette file.db file.db . ( #1632 ),"[""Changelog""]","[{""href"": ""https://github.com/simonw/datasette/issues/1632"", ""label"": ""#1632""}]" changelog:id20,changelog,id20,0.60.1 (2022-01-20),"Fixed a bug where installation on Python 3.6 stopped working due to a change to an underlying dependency. This release can now be installed on Python 3.6, but is the last release of Datasette that will support anything less than Python 3.7. ( #1609 )","[""Changelog""]","[{""href"": ""https://github.com/simonw/datasette/issues/1609"", ""label"": ""#1609""}]" changelog:id21,changelog,id21,0.60 (2022-01-13),,"[""Changelog""]",[] changelog:id22,changelog,id22,0.59.4 (2021-11-29),"Fixed bug where columns with a leading underscore could not be removed from the interactive filters list. ( #1527 ) Fixed bug where columns with a leading underscore were not correctly linked to by the ""Links from other tables"" interface on the row page. ( #1525 ) Upgraded dependencies aiofiles , black and janus .","[""Changelog""]","[{""href"": ""https://github.com/simonw/datasette/issues/1527"", ""label"": ""#1527""}, {""href"": ""https://github.com/simonw/datasette/issues/1525"", ""label"": ""#1525""}]" changelog:id23,changelog,id23,0.59.3 (2021-11-20),"Fixed numerous bugs when running Datasette behind a proxy with a prefix URL path using the base_url setting. A live demo of this mode is now available at datasette-apache-proxy-demo.datasette.io/prefix/ . ( #1519 , #838 ) ?column__arraycontains= and ?column__arraynotcontains= table parameters now also work against SQL views. ( #448 ) ?_facet_array=column no longer returns incorrect counts if columns contain the same value more than once.","[""Changelog""]","[{""href"": ""https://datasette-apache-proxy-demo.datasette.io/prefix/"", ""label"": ""datasette-apache-proxy-demo.datasette.io/prefix/""}, {""href"": ""https://github.com/simonw/datasette/issues/1519"", ""label"": ""#1519""}, {""href"": ""https://github.com/simonw/datasette/issues/838"", ""label"": ""#838""}, {""href"": ""https://github.com/simonw/datasette/issues/448"", ""label"": ""#448""}]" changelog:id24,changelog,id24,0.59.2 (2021-11-13),"Column names with a leading underscore now work correctly when used as a facet. ( #1506 ) Applying ?_nocol= to a column no longer removes that column from the filtering interface. ( #1503 ) Official Datasette Docker container now uses Debian Bullseye as the base image. ( #1497 ) Datasette is four years old today! Here's the original release announcement from 2017.","[""Changelog""]","[{""href"": ""https://github.com/simonw/datasette/issues/1506"", ""label"": ""#1506""}, {""href"": ""https://github.com/simonw/datasette/issues/1503"", ""label"": ""#1503""}, {""href"": ""https://github.com/simonw/datasette/issues/1497"", ""label"": ""#1497""}, {""href"": ""https://simonwillison.net/2017/Nov/13/datasette/"", ""label"": ""original release announcement""}]" changelog:id25,changelog,id25,0.59.1 (2021-10-24),"Fix compatibility with Python 3.10. ( #1482 ) Documentation on how to use Named parameters with integer and floating point values. ( #1496 )","[""Changelog""]","[{""href"": ""https://github.com/simonw/datasette/issues/1482"", ""label"": ""#1482""}, {""href"": ""https://github.com/simonw/datasette/issues/1496"", ""label"": ""#1496""}]" changelog:id26,changelog,id26,0.59 (2021-10-14),"Columns can now have associated metadata descriptions in metadata.json , see Column descriptions . ( #942 ) New register_commands() plugin hook allows plugins to register additional Datasette CLI commands, e.g. datasette mycommand file.db . ( #1449 ) Adding ?_facet_size=max to a table page now shows the number of unique values in each facet. ( #1423 ) Upgraded dependency httpx 0.20 - the undocumented allow_redirects= parameter to datasette.client is now follow_redirects= , and defaults to False where it previously defaulted to True . ( #1488 ) The --cors option now causes Datasette to return the Access-Control-Allow-Headers: Authorization header, in addition to Access-Control-Allow-Origin: * . ( #1467 ) Code that figures out which named parameters a SQL query takes in order to display form fields for them is no longer confused by strings that contain colon characters. ( #1421 ) Renamed --help-config option to --help-settings . ( #1431 ) datasette.databases property is now a documented API. ( #1443 ) The base.html template now wraps everything other than the