html_url,id,node_id,tag_name,target_commitish,name,draft,author,prerelease,created_at,published_at,body,repo,reactions https://github.com/simonw/sqlite-utils/releases/tag/3.1.1,35902315,MDc6UmVsZWFzZTM1OTAyMzE1,3.1.1,main,3.1.1,0,9599,0,2021-01-01T23:56:20Z,2021-01-01T23:57:07Z,"- Fixed failing test caused by `optimize` sometimes creating larger database files. ([#209](https://github.com/simonw/sqlite-utils/issues/209)) - Documentation now lives on - README now includes `brew install sqlite-utils` installation method.",140912432, https://github.com/simonw/datasette/releases/tag/0.59.3,53781549,RE_kwDOBm6k_c4DNKQt,0.59.3,main,0.59.3,0,9599,0,2021-11-20T23:40:21Z,2021-11-20T23:41:33Z,"- Fixed numerous bugs when running Datasette [behind a proxy](https://docs.datasette.io/en/stable/deploying.html#deploying-proxy) with a prefix URL path using the [base_url](https://docs.datasette.io/en/stable/settings.html#setting-base-url) setting. A live demo of this mode is now available at [datasette-apache-proxy-demo.datasette.io/prefix/](https://datasette-apache-proxy-demo.datasette.io/prefix/). ([#1519](https://github.com/simonw/datasette/issues/1519), [#838](https://github.com/simonw/datasette/issues/838)) - `?column__arraycontains=` and `?column__arraynotcontains=` table parameters now also work against SQL views. ([#448](https://github.com/simonw/datasette/issues/448)) - `?_facet_array=column` no longer returns incorrect counts if columns contain the same value more than once.",107914493, https://github.com/simonw/datasette/releases/tag/0.57.1,44292523,MDc6UmVsZWFzZTQ0MjkyNTIz,0.57.1,main,0.57.1,0,9599,0,2021-06-08T16:26:45Z,2021-06-08T16:28:31Z,"- Fixed visual display glitch with global navigation menu. ([#1367](https://github.com/simonw/datasette/issues/1367)) - No longer truncates the list of table columns displayed on the `/database` page. ([#1364](https://github.com/simonw/datasette/issues/1364))",107914493,"{""url"": ""https://api.github.com/repos/simonw/datasette/releases/44292523/reactions"", ""total_count"": 4, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 4, ""rocket"": 0, ""eyes"": 0}" https://github.com/simonw/datasette/releases/tag/0.52.2,34725716,MDc6UmVsZWFzZTM0NzI1NzE2,0.52.2,main,0.52.2,0,9599,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, https://github.com/simonw/sqlite-utils/releases/tag/3.22,56875206,RE_kwDOCGYnMM4DY9jG,3.22,main,3.22,0,9599,0,2022-01-11T23:44:48Z,2022-01-11T23:49:28Z,"- New [CLI reference](https://sqlite-utils.datasette.io/en/stable/cli-reference.html#cli-reference) documentation page, listing the output of `--help` for every one of the CLI commands. ([#383](https://github.com/simonw/sqlite-utils/issues/383)) - `sqlite-utils rows` now has `--limit` and `--offset` options for paginating through data. ([#381](https://github.com/simonw/sqlite-utils/issues/381)) - `sqlite-utils rows` now has `--where` and `-p` options for filtering the table using a `WHERE` query, see [Returning all rows in a table](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-rows). ([#382](https://github.com/simonw/sqlite-utils/issues/382))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.12,45251624,MDc6UmVsZWFzZTQ1MjUxNjI0,3.12,main,3.12,0,9599,0,2021-06-25T17:59:05Z,2021-06-25T18:00:18Z,"- New [db.query(sql, params)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-query) method, which executes a SQL query and returns the results as an iterator over Python dictionaries. ([#290](https://github.com/simonw/sqlite-utils/issues/290)) - This project now uses `flake8` and has started to use `mypy`. ([#291](https://github.com/simonw/sqlite-utils/issues/291)) - New documentation on [contributing](https://sqlite-utils.datasette.io/en/stable/contributing.html#contributing) to this project. ([#292](https://github.com/simonw/sqlite-utils/issues/292))",140912432, https://github.com/simonw/datasette/releases/tag/0.51a2,33284522,MDc6UmVsZWFzZTMzMjg0NTIy,0.51a2,main,0.51a2,0,9599,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, https://github.com/simonw/sqlite-utils/releases/tag/3.28,72130482,RE_kwDOCGYnMM4ETJ-y,3.28,main,3.28,0,9599,0,2022-07-15T22:56:01Z,2022-07-15T23:02:45Z,"- New [table.duplicate(new_name)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-duplicate) method for creating a copy of a table with a matching schema and row contents. Thanks, [David](https://github.com/davidleejy). ([#449](https://github.com/simonw/sqlite-utils/issues/449)) - New `sqlite-utils duplicate data.db table_name new_name` CLI command for [Duplicating tables](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-duplicate-table). ([#454](https://github.com/simonw/sqlite-utils/issues/454)) - `sqlite_utils.utils.rows_from_file()` is now a [documented API](https://sqlite-utils.datasette.io/en/stable/reference.html#reference-utils-rows-from-file). It can be used to read a sequence of dictionaries from a file-like object containing CSV, TSV, JSON or newline-delimited JSON. It can be passed an explicit format or can attempt to detect the format automatically. ([#443](https://github.com/simonw/sqlite-utils/issues/443)) - `sqlite_utils.utils.TypeTracker` is now a documented API for detecting the likely column types for a sequence of string rows, see [Detecting column types using TypeTracker](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-typetracker). ([#445](https://github.com/simonw/sqlite-utils/issues/445)) - `sqlite_utils.utils.chunks()` is now a documented API for [splitting an iterator into chunks](https://sqlite-utils.datasette.io/en/stable/reference.html#reference-utils-chunks). ([#451](https://github.com/simonw/sqlite-utils/issues/451)) - `sqlite-utils enable-fts` now has a `--replace` option for replacing the existing FTS configuration for a table. ([#450](https://github.com/simonw/sqlite-utils/issues/450)) - The `create-index`, `add-column` and `duplicate` commands all now take a `--ignore` option for ignoring errors should the database not be in the right state for them to operate. ([#450](https://github.com/simonw/sqlite-utils/issues/450))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.22,32688819,MDc6UmVsZWFzZTMyNjg4ODE5,2.22,main,2.22,0,9599,0,2020-10-16T19:30:25Z,2020-10-16T19:31:45Z,"- New `--encoding` option for processing CSV and TSV files that use a non-utf-8 encoding, for both the `insert` and `update` commands. ([#182](https://github.com/simonw/sqlite-utils/issues/182)) - The `--load-extension` option is now available to many more commands. ([#137](https://github.com/simonw/sqlite-utils/issues/137)) - `--load-extension=spatialite` can be used to load SpatiaLite from common installation locations, if it is available. ([#136](https://github.com/simonw/sqlite-utils/issues/136)) - Tests now also run against Python 3.9. ([#184](https://github.com/simonw/sqlite-utils/issues/184)) - Passing `pk=[""id""]` now has the same effect as passing `pk=""id""`. ([#181](https://github.com/simonw/sqlite-utils/issues/181))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.11,28369250,MDc6UmVsZWFzZTI4MzY5MjUw,2.11,master,2.11,0,9599,0,2020-07-08T17:36:07Z,2020-07-08T17:36:45Z,"- New `--truncate` option to `sqlite-utils insert`, and `truncate=True` argument to `.insert_all()`. Thanks, Thomas Sibley. ([#118](https://github.com/simonw/sqlite-utils/pull/118)) - The `sqlite-utils query` command now runs updates in a transaction. Thanks, Thomas Sibley. ([#120](https://github.com/simonw/sqlite-utils/pull/120))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.15,29529316,MDc6UmVsZWFzZTI5NTI5MzE2,2.15,master,2.15,0,9599,0,2020-08-10T19:06:02Z,2020-08-10T19:07:27Z,"- New `db.enable_wal()` and `db.disable_wal()` methods for enabling and disabling [Write-Ahead Logging](https://www.sqlite.org/wal.html) for a database file - see [WAL mode](https://sqlite-utils.readthedocs.io/en/stable//python-api.html#python-api-wal) in the Python API documentation. - Also `sqlite-utils enable-wal file.db` and `sqlite-utils disable-wal file.db` commands for doing the same thing on the command-line, see [WAL mode (CLI)](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-wal). ([#132](https://github.com/simonw/sqlite-utils/issues/132))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.26,64414802,RE_kwDOCGYnMM4D1uRS,3.26,main,3.26,0,9599,0,2022-04-13T22:51:48Z,2022-04-13T22:53:36Z,"- New `errors=r.IGNORE/r.SET_NULL` parameter for the `r.parsedatetime()` and `r.parsedate()` [convert recipes](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-convert-recipes). ([#416](https://github.com/simonw/sqlite-utils/issues/416)) - Fixed a bug where `--multi` could not be used in combination with `--dry-run` for the [convert](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-convert) command. ([#415](https://github.com/simonw/sqlite-utils/issues/415)) - New documentation: [Using a convert() function to execute initialization](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-convert-complex). ([#420](https://github.com/simonw/sqlite-utils/issues/420)) - More robust detection for whether or not `deterministic=True` is supported. ([#425](https://github.com/simonw/sqlite-utils/issues/425))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.25,60770975,RE_kwDOCGYnMM4Dn0qf,3.25,main,3.25,0,9599,0,2022-03-02T06:34:46Z,2022-03-02T06:35:18Z,"- New `hash_id_columns=` parameter for creating a primary key that's a hash of the content of specific columns - see [Setting an ID based on the hash of the row contents](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-hash) for details. ([#343](https://github.com/simonw/sqlite-utils/issues/343)) - New [db.sqlite_version](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-sqlite-version) property, returning a tuple of integers representing the version of SQLite, for example `(3, 38, 0)`. - Fixed a bug where [register_function(deterministic=True)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-register-function) caused errors on versions of SQLite prior to 3.8.3. ([#408](https://github.com/simonw/sqlite-utils/issues/408)) - New documented [hash_record(record, keys=...)](https://sqlite-utils.datasette.io/en/stable/reference.html#reference-utils-hash-record) function.",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.19,31581701,MDc6UmVsZWFzZTMxNTgxNzAx,2.19,main,2.19,0,9599,0,2020-09-20T22:22:56Z,2020-09-20T22:24:04Z,"- New `sqlite-utils add-foreign-keys` command for [Adding multiple foreign keys at once](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-add-foreign-keys). ([#157](https://github.com/simonw/sqlite-utils/issues/157)) - New `table.enable_fts(..., replace=True)` argument for replacing an existing FTS table with a new configuration. ([#160](https://github.com/simonw/sqlite-utils/issues/160)) - New `table.add_foreign_key(..., ignore=True)` argument for ignoring a foreign key if it already exists. ([#112](https://github.com/simonw/sqlite-utils/issues/112))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.9,26362623,MDc6UmVsZWFzZTI2MzYyNjIz,2.9,master,2.9,0,9599,0,2020-05-11T01:54:56Z,2020-05-11T01:57:11Z,"- New `sqlite-utils drop-table` command, see [Dropping tables](https://sqlite-utils.readthedocs.io/en/2.9/cli.html#cli-drop-table). ([#111](https://github.com/simonw/sqlite-utils/issues/111)) - New `sqlite-utils drop-view` command, see [Dropping views](https://sqlite-utils.readthedocs.io/en/2.9/cli.html#cli-drop-view). - Python `decimal.Decimal` objects are now stored as `FLOAT`. ([#110](https://github.com/simonw/sqlite-utils/issues/110))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.8,44019361,MDc6UmVsZWFzZTQ0MDE5MzYx,3.8,main,3.8,0,9599,0,2021-06-03T05:16:33Z,2021-06-03T05:17:33Z,"- New `sqlite-utils indexes` command to list indexes in a database, see [Listing indexes](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-indexes). ([#263](https://github.com/simonw/sqlite-utils/issues/263)) - `table.xindexes` introspection property returning more details about that table's indexes, see [.xindexes](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-introspection-xindexes). ([#261](https://github.com/simonw/sqlite-utils/issues/261))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.11,44927292,MDc6UmVsZWFzZTQ0OTI3Mjky,3.11,main,3.11,0,9599,0,2021-06-20T18:52:15Z,2021-06-20T18:53:09Z,"- New `sqlite-utils memory data.csv --schema` option, for outputting the schema of the in-memory database generated from one or more files. See [--schema, --dump and --save](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-memory-schema-dump-save). ([#288](https://github.com/simonw/sqlite-utils/issues/288)) - Added [installation instructions](https://sqlite-utils.datasette.io/en/stable/installation.html#installation). ([#286](https://github.com/simonw/sqlite-utils/issues/286))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.9,44511190,MDc6UmVsZWFzZTQ0NTExMTkw,3.9,main,3.9,0,9599,0,2021-06-12T02:07:18Z,2021-06-12T02:08:03Z,"- New `sqlite-utils schema` command showing the full SQL schema for a database, see [Showing the schema (CLI)](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-schema). ([#268](https://github.com/simonw/sqlite-utils/issues/268)) - `db.schema` introspection property exposing the same feature to the Python library, see [Showing the schema (Python library)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-schema).",140912432,"{""url"": ""https://api.github.com/repos/simonw/sqlite-utils/releases/44511190/reactions"", ""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}" https://github.com/simonw/sqlite-utils/releases/tag/3.7,43797212,MDc6UmVsZWFzZTQzNzk3MjEy,3.7,main,3.7,0,9599,0,2021-05-29T05:47:59Z,2021-05-29T05:49:59Z,"- New `table.pks_and_rows_where()` method returning `(primary_key, row_dictionary)` tuples - see [Listing rows with their primary keys](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-pks-and-rows-where). ([#240](https://github.com/simonw/sqlite-utils/issues/240)) - Fixed bug with *table.add_foreign_key()* against columns containing spaces. ([#238](https://github.com/simonw/sqlite-utils/issues/238)) - `table_or_view.drop(ignore=True)` option for avoiding errors if the table or view does not exist. ([#237](https://github.com/simonw/sqlite-utils/issues/237)) - `sqlite-utils drop-view --ignore` and `sqlite-utils drop-table --ignore` options. ([#237](https://github.com/simonw/sqlite-utils/issues/237)) - Fixed a bug with inserts of nested JSON containing non-ascii strings - thanks, Dylan Wu. ([#257](https://github.com/simonw/sqlite-utils/issues/257)) - Suggest `--alter` if an error occurs caused by a missing column. ([#259](https://github.com/simonw/sqlite-utils/issues/259)) - Support creating indexes with columns in descending order, see [API documentation](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-create-index) and [CLI documentation](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-create-index). ([#260](https://github.com/simonw/sqlite-utils/issues/260)) - Correctly handle CSV files that start with a UTF-8 BOM. ([#250](https://github.com/simonw/sqlite-utils/issues/250))",140912432, https://github.com/simonw/datasette/releases/tag/0.50a0,32072114,MDc6UmVsZWFzZTMyMDcyMTE0,0.50a0,main,0.50a0,0,9599,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, https://github.com/simonw/sqlite-utils/releases/tag/3.1,35200016,MDc6UmVsZWFzZTM1MjAwMDE2,3.1,main,3.1,0,9599,0,2020-12-13T07:30:59Z,2020-12-13T07:31:40Z,"- New command: `sqlite-utils analyze-tables my.db` outputs useful information about the table columns in the database, such as the number of distinct values and how many rows are null. See [Analyzing tables](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-analyze-tables) for documentation. ([#207](https://github.com/simonw/sqlite-utils/issues/207)) - New `table.analyze_column(column)` Python method used by the `analyze-tables` command - see [Analyzing a column](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-analyze-column). - The `table.update()` method now correctly handles values that should be stored as JSON. Thanks, Andreas Madsack. ([#204](https://github.com/simonw/sqlite-utils/pull/204))",140912432, https://github.com/simonw/datasette/releases/tag/0.60a0,55569404,RE_kwDOBm6k_c4DT-v8,0.60a0,main,0.60a0,0,9599,1,2021-12-17T19:13:51Z,2021-12-17T19:15:38Z,"- New plugin hook: [filters_from_request(request, database, table, datasette)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-filters-from-request), which runs on the table page and can be used to support new custom query string parameters that modify the SQL query. ([#473](https://github.com/simonw/datasette/issues/473)) - The number of unique values in a facet is now always displayed. Previously it was only displayed if the user specified `?_facet_size=max`. ([#1556](https://github.com/simonw/datasette/issues/1556)) - Fixed bug where `?_facet_array=tags&_facet=tags` would only display one of the two selected facets. ([#625](https://github.com/simonw/datasette/issues/625)) - Facets of type `date` or `array` can now be configured in `metadata.json`, see [Facets in metadata.json](https://docs.datasette.io/en/latest/facets.html#facets-metadata). Thanks, David Larlet. ([#1552](https://github.com/simonw/datasette/issues/1552)) - New `?_nosuggest=1` parameter for table views, which disables facet suggestion. ([#1557](https://github.com/simonw/datasette/issues/1557)) - Label columns detected for foreign keys are now case-insensitive, so `Name` or `TITLE` will be detected in the same way as `name` or `title`. ([#1544](https://github.com/simonw/datasette/issues/1544)) - The query string variables exposed by `request.args` will now include blank strings for arguments such as `foo` in `?foo=&bar=1` rather than ignoring those parameters entirely. ([#1551](https://github.com/simonw/datasette/issues/1551))",107914493, https://github.com/simonw/datasette/releases/tag/0.58a1,45182156,MDc6UmVsZWFzZTQ1MTgyMTU2,0.58a1,main,0.58a1,0,9599,1,2021-06-24T16:24:59Z,2021-06-24T16:29:09Z,"- New plugin hook: [skip_csrf(datasette, scope)](https://docs.datasette.io/en/latest//plugin_hooks.html#plugin-hook-skip-csrf), for opting out of CSRF protection based on the incoming request. ([#1377](https://github.com/simonw/datasette/issues/1377)) - `POST` requests to endpoints that do not support that HTTP verb now return a 405 error. - `db.path` can now be provided as a `pathlib.Path` object, useful when writing unit tests for plugins. Thanks, Chris Amico. ([#1365](https://github.com/simonw/datasette/issues/1365))",107914493,"{""url"": ""https://api.github.com/repos/simonw/datasette/releases/45182156/reactions"", ""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}" https://github.com/simonw/sqlite-utils/releases/tag/3.15.1,47636109,MDc6UmVsZWFzZTQ3NjM2MTA5,3.15.1,main,3.15.1,0,9599,0,2021-08-10T23:55:12Z,2021-08-10T23:55:38Z,"- Python library now includes type annotations on almost all of the methods, plus detailed docstrings describing each one. ([#311](https://github.com/simonw/sqlite-utils/issues/311)) - New [API Reference](https://sqlite-utils.datasette.io/en/stable/reference.html) documentation page, powered by those docstrings. - Fixed bug where `.add_foreign_keys()` failed to raise an error if called against a `View`. ([#313](https://github.com/simonw/sqlite-utils/issues/313)) - Fixed bug where `.delete_where()` returned a `[]` instead of returning `self` if called against a non-existant table. ([#315](https://github.com/simonw/sqlite-utils/issues/315))",140912432,"{""url"": ""https://api.github.com/repos/simonw/sqlite-utils/releases/47636109/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.61a0,62259800,RE_kwDOBm6k_c4DtgJY,0.61a0,main,0.61a0,0,9599,1,2022-03-20T01:14:40Z,2022-03-20T01:16:41Z,"- Removed hashed URL mode from Datasette. The new `datasette-hashed-urls` plugin can be used to achieve the same result, see [datasette-hashed-urls](https://docs.datasette.io/en/latest/performance.html#performance-hashed-urls) for details. ([#1661](https://github.com/simonw/datasette/issues/1661)) - Databases can now have a custom path within the Datasette instance that is indpendent of the database name, using the `db.route` property. ([#1668](https://github.com/simonw/datasette/issues/1668)) - 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](https://docs.datasette.io/en/latest/internals.html#internals-tilde-encoding). ([#1657](https://github.com/simonw/datasette/issues/1657)) - 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](https://github.com/simonw/datasette/issues/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](https://github.com/simonw/datasette/issues/1612)) - Datasette now has a default favicon. ([#1603](https://github.com/simonw/datasette/issues/1603)) - `sqlite_stat` tables are now hidden by default. ([#1587](https://github.com/simonw/datasette/issues/1587)) - SpatiaLite tables `data_licenses`, `KNN` and `KNN2` are now hidden by default. ([#1601](https://github.com/simonw/datasette/issues/1601)) - Python 3.6 is no longer supported. ([#1577](https://github.com/simonw/datasette/issues/1577)) - Tests now run against Python 3.11-dev. ([#1621](https://github.com/simonw/datasette/issues/1621)) - Fixed bug where [custom pages](https://docs.datasette.io/en/latest/custom_templates.html#custom-pages) did not work on Windows. Thanks, Robert Christie. ([#1545](https://github.com/simonw/datasette/issues/1545)) - SQL query tracing mechanism now works for queries executed in `asyncio` sub-tasks, such as those created by `asyncio.gather()`. ([#1576](https://github.com/simonw/datasette/issues/1576)) - [datasette.tracer](https://docs.datasette.io/en/latest/internals.html#internals-tracer) mechanism is now documented. - Common Datasette symbols can now be imported directly from the top-level `datasette` package, see [Import shortcuts](https://docs.datasette.io/en/latest/internals.html#internals-shortcuts). Those symbols are `Response`, `Forbidden`, `NotFound`, `hookimpl`, `actor_matches_allow`. ([#957](https://github.com/simonw/datasette/issues/957)) - `/-/versions` page now returns additional details for libraries used by SpatiaLite. ([#1607](https://github.com/simonw/datasette/issues/1607)) - Documentation now links to the [Datasette Tutorials](https://datasette.io/tutorials). - Datasette will now also look for SpatiaLite in `/opt/homebrew` - thanks, Dan Peterson. ([#1649](https://github.com/simonw/datasette/pull/1649)) - Datasette is now covered by a [Code of Conduct](https://github.com/simonw/datasette/blob/main/CODE_OF_CONDUCT.md). ([#1654](https://github.com/simonw/datasette/issues/1654))",107914493, https://github.com/simonw/datasette/releases/tag/0.52.4,34882011,MDc6UmVsZWFzZTM0ODgyMDEx,0.52.4,main,0.52.4,0,9599,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, https://github.com/simonw/sqlite-utils/releases/tag/3.24,59656694,RE_kwDOCGYnMM4Djkn2,3.24,main,3.24,0,9599,0,2022-02-16T01:39:13Z,2022-02-16T01:41:50Z,"- SpatiaLite helpers for the `sqlite-utils` command-line tool - thanks, Chris Amico. ([#398](https://github.com/simonw/sqlite-utils/issues/398)) - [sqlite-utils create-database](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-create-database) `--init-spatialite` option for initializing SpatiaLite on a newly created database. - [sqlite-utils add-geometry-column](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-spatialite) command for adding geometry columns. - [sqlite-utils create-spatial-index](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-spatialite-indexes) command for adding spatial indexes. - `db[table].create(..., if_not_exists=True)` option for [creating a table](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-explicit-create) only if it does not already exist. ([#397](https://github.com/simonw/sqlite-utils/issues/397)) - `Database(memory_name=""my_shared_database"")` parameter for creating a [named in-memory database](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-connect) that can be shared between multiple connections. ([#405](https://github.com/simonw/sqlite-utils/issues/405)) - Documentation now describes [how to add a primary key to a rowid table](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-transform-table-add-primary-key-to-rowid) using `sqlite-utils transform`. ([#403](https://github.com/simonw/sqlite-utils/issues/403))",140912432,"{""url"": ""https://api.github.com/repos/simonw/sqlite-utils/releases/59656694/reactions"", ""total_count"": 2, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 1, ""eyes"": 0}" https://github.com/simonw/sqlite-utils/releases/tag/2.14,29196241,MDc6UmVsZWFzZTI5MTk2MjQx,2.14,master,2.14,0,9599,0,2020-08-01T20:58:47Z,2020-08-01T21:00:31Z,"- The [insert-files command](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-insert-files) can now read from standard input: `cat dog.jpg | sqlite-utils insert-files dogs.db pics - --name=dog.jpg`. ([#127](https://github.com/simonw/sqlite-utils/issues/127)) - You can now specify a full-text search tokenizer using the new `tokenize=` parameter to [enable_fts()](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-fts). This means you can enable Porter stemming on a table by running `db[""articles""].enable_fts([""headline"", ""body""], tokenize=""porter"")`. ([#130](https://github.com/simonw/sqlite-utils/issues/130)) - You can also set a custom tokenizer using the [sqlite-utils enable-fts](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-fts) CLI command, via the new `--tokenize` option.",140912432, https://github.com/simonw/datasette/releases/tag/0.58a0,44388485,MDc6UmVsZWFzZTQ0Mzg4NDg1,0.58a0,main,0.58a0,0,9599,1,2021-06-10T04:51:14Z,2021-06-10T04:52:45Z,"- The [menu_links()](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-menu-links), [table_actions()](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-table-actions) and [database_actions()](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-database-actions) plugin hooks all gained a new optional `request` argument providing access to the current request. ([#1371](https://github.com/simonw/datasette/issues/1371))",107914493, https://github.com/simonw/datasette/releases/tag/0.59a1,47507174,MDc6UmVsZWFzZTQ3NTA3MTc0,0.59a1,main,0.59a1,0,9599,1,2021-08-09T01:13:03Z,2021-08-09T01:14:06Z,- The [render_cell()](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-render-cell) plugin hook can now return an awaitable function. This means the hook can execute SQL queries. ([#1425](https://github.com/simonw/datasette/issues/1425)),107914493,"{""url"": ""https://api.github.com/repos/simonw/datasette/releases/47507174/reactions"", ""total_count"": 1, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 1, ""rocket"": 0, ""eyes"": 0}" https://github.com/simonw/sqlite-utils/releases/tag/3.17,48389722,MDc6UmVsZWFzZTQ4Mzg5NzIy,3.17,main,3.17,0,9599,0,2021-08-24T23:40:18Z,2021-08-24T23:42:22Z,"- The [sqlite-utils memory](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-memory) command has a new `--analyze` option, which runs the equivalent of the [analyze-tables](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-analyze-tables) command directly against the in-memory database created from the incoming CSV or JSON data. ([#320](https://github.com/simonw/sqlite-utils/issues/320)) - [sqlite-utils insert-files](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-files) now has the ability to insert file contents in to `TEXT` columns in addition to the default `BLOB`. Pass the `--text` option or use `content_text` as a column specifier. ([#319](https://github.com/simonw/sqlite-utils/issues/319))",140912432,"{""url"": ""https://api.github.com/repos/simonw/sqlite-utils/releases/48389722/reactions"", ""total_count"": 1, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 1, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}" https://github.com/simonw/sqlite-utils/releases/tag/3.19,53785562,RE_kwDOCGYnMM4DNLPa,3.19,main,3.19,0,9599,0,2021-11-21T04:41:56Z,2021-11-21T04:42:24Z,"- The [table.lookup() method](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-lookup-tables) now accepts keyword arguments that match those on the underlying `table.insert()` method: `foreign_keys=`, `column_order=`, `not_null=`, `defaults=`, `extracts=`, `conversions=` and `columns=`. You can also now pass `pk=` to specify a different column name to use for the primary key. ([#342](https://github.com/simonw/sqlite-utils/issues/342))",140912432, https://github.com/simonw/datasette/releases/tag/0.47.3,29738457,MDc6UmVsZWFzZTI5NzM4NDU3,0.47.3,main,0.47.3,0,9599,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, https://github.com/simonw/sqlite-utils/releases/tag/3.3,36530216,MDc6UmVsZWFzZTM2NTMwMjE2,3.3,main,3.3,0,9599,0,2021-01-18T04:28:24Z,2021-01-18T04:29:48Z,- The `table.m2m()` method now accepts an optional `alter=True` argument to specify that any missing columns should be added to the referenced table. See [Working with many-to-many relationships](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-m2m). ([#222](https://github.com/simonw/sqlite-utils/issues/222)),140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.16,48077246,MDc6UmVsZWFzZTQ4MDc3MjQ2,3.16,main,3.16,0,9599,0,2021-08-18T22:36:32Z,2021-08-18T22:37:55Z,"- Type signatures added to more methods, including `table.resolve_foreign_keys()`, `db.create_table_sql()`, `db.create_table()` and `table.create()`. ([#314](https://github.com/simonw/sqlite-utils/issues/314)) - New `db.quote_fts(value)` method, see [Quoting characters for use in search](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-quote-fts) - thanks, Mark Neumann. ([#246](https://github.com/simonw/sqlite-utils/issues/246)) - `table.search()` now accepts an optional `quote=True` parameter. ([#296](https://github.com/simonw/sqlite-utils/issues/296)) - CLI command `sqlite-utils search` now accepts a `--quote` option. ([#296](https://github.com/simonw/sqlite-utils/issues/296)) - Fixed bug where `--no-headers` and `--tsv` options to [sqlite-utils insert](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-csv-tsv) could not be used together. ([#295](https://github.com/simonw/sqlite-utils/issues/295)) - Various small improvements to [API reference](https://sqlite-utils.datasette.io/en/stable/reference.html#reference) documentation.",140912432, https://github.com/simonw/datasette/releases/tag/0.49a1,31227999,MDc6UmVsZWFzZTMxMjI3OTk5,0.49a1,main,0.49a1,0,9599,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, https://github.com/simonw/datasette/releases/tag/0.49,31288240,MDc6UmVsZWFzZTMxMjg4MjQw,0.49,main,0.49,0,9599,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, https://github.com/simonw/datasette/releases/tag/0.59a0,47461737,MDc6UmVsZWFzZTQ3NDYxNzM3,0.59a0,main,0.59a0,0,9599,1,2021-08-07T05:40:07Z,2021-08-07T05:42:25Z,"- [register_routes(datasette)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-register-routes) plugin hook now accepts an optional `datasette` argument. ([#1404](https://github.com/simonw/datasette/issues/1404)) - New `hide_sql` canned query option for defaulting to hiding the SQL quey used by a canned query, see [Additional canned query options](https://docs.datasette.io/en/latest/sql_queries.html#canned-queries-options). ([#1422](https://github.com/simonw/datasette/issues/1422)) - New `--cpu` option for [datasette publish cloudrun](https://docs.datasette.io/en/latest/publish.html#publish-cloud-run). ([#1420](https://github.com/simonw/datasette/issues/1420)) - If [Rich](https://github.com/willmcgugan/rich) is installed in the same virtual environment as Datasette, it will be used to provide enhanced display of error tracebacks on the console. ([#1416](https://github.com/simonw/datasette/issues/1416)) - `datasette.utils` [parse_metadata(content)](https://docs.datasette.io/en/latest/internals.html#internals-utils-parse-metadata) function, used by the new [datasette-remote-metadata plugin](https://datasette.io/plugins/datasette-remote-metadata), is now a documented API. ([#1405](https://github.com/simonw/datasette/issues/1405))",107914493, https://github.com/simonw/sqlite-utils/releases/tag/3.17.1,50089123,RE_kwDOCGYnMM4C_Eyj,3.17.1,main,3.17.1,0,9599,0,2021-09-22T20:49:36Z,2021-09-22T20:51:04Z,"- [sqlite-utils memory](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-memory) now works if files passed to it share the same file name. ([#325](https://github.com/simonw/sqlite-utils/issues/325)) - [sqlite-utils query](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-query) now returns `[]` in JSON mode if no rows are returned. ([#328](https://github.com/simonw/sqlite-utils/issues/328))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.16,29999731,MDc6UmVsZWFzZTI5OTk5NzMx,2.16,main,2.16,0,9599,0,2020-08-21T21:02:29Z,2020-08-21T21:05:51Z,"- `--load-extension` option for `sqlite-utils query` for loading SQLite extensions. ([#134](https://github.com/simonw/sqlite-utils/issues/134)) - New `sqlite_utils.utils.find_spatialite()` function for finding SpatiaLite in common locations. ([#135](https://github.com/simonw/sqlite-utils/issues/135))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.16.1,30352225,MDc6UmVsZWFzZTMwMzUyMjI1,2.16.1,main,2.16.1,0,9599,0,2020-08-28T22:45:11Z,2020-08-28T22:47:02Z,"- `insert_all(..., alter=True)` now works for columns introduced after the first 100 records. Thanks, Simon Wiles! ([#139](https://github.com/simonw/sqlite-utils/issues/139)) - Continuous Integration is now powered by GitHub Actions. ([#143](https://github.com/simonw/sqlite-utils/issues/143))",140912432, https://github.com/simonw/datasette/releases/tag/0.49a0,30353073,MDc6UmVsZWFzZTMwMzUzMDcz,0.49a0,main,0.49a0,0,9599,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, https://github.com/simonw/sqlite-utils/releases/tag/3.4,37437744,MDc6UmVsZWFzZTM3NDM3NzQ0,3.4,main,3.4,0,9599,0,2021-02-06T01:37:27Z,2021-02-06T01:38:26Z,- `sqlite-utils insert --csv` now accepts optional `--delimiter` and `--quotechar` options. See [Alternative delimiters and quote characters](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-csv-tsv-delimiter). ([#223](https://github.com/simonw/sqlite-utils/issues/223)),140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.15,47569134,MDc6UmVsZWFzZTQ3NTY5MTM0,3.15,main,3.15,0,9599,0,2021-08-09T22:42:06Z,2021-08-09T22:43:16Z,"- `sqlite-utils insert --flatten` option for [flattening nested JSON objects](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-inserting-data-flatten) to create tables with column names like `topkey_nestedkey`. ([#310](https://github.com/simonw/sqlite-utils/issues/310)) - Fixed several spelling mistakes in the documentation, spotted [using codespell](https://til.simonwillison.net/python/codespell). - Errors that occur while using the `sqlite-utils` CLI tool now show the responsible SQL and query parameters, if possible. ([#309](https://github.com/simonw/sqlite-utils/issues/309))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.5,38037267,MDc6UmVsZWFzZTM4MDM3MjY3,3.5,main,3.5,0,9599,0,2021-02-14T22:43:06Z,2021-02-14T22:44:21Z,"- `sqlite-utils insert --sniff` option for detecting the delimiter and quote character used by a CSV file, see [Alternative delimiters and quote characters](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-csv-tsv-delimiter). ([#230](https://github.com/simonw/sqlite-utils/issues/230)) - The `table.rows_where()`, `table.search()` and `table.search_sql()` methods all now take optional `offset=` and `limit=` arguments. ([#231](https://github.com/simonw/sqlite-utils/issues/231)) - New `--no-headers` option for `sqlite-utils insert --csv` to handle CSV files that are missing the header row, see [CSV files without a header row](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-csv-tsv-no-header). ([#228](https://github.com/simonw/sqlite-utils/issues/228)) - Fixed bug where inserting data with extra columns in subsequent chunks would throw an error. Thanks [@nieuwenhoven](https://github.com/nieuwenhoven) for the fix. ([#234](https://github.com/simonw/sqlite-utils/issues/234)) - Fixed bug importing CSV files with columns containing more than 128KB of data. ([#229](https://github.com/simonw/sqlite-utils/issues/229)) - Test suite now runs in CI against Ubuntu, macOS and Windows. Thanks [@nieuwenhoven](https://github.com/nieuwenhoven) for the Windows test fixes. ([#232](https://github.com/simonw/sqlite-utils/issues/232))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.20,56514583,RE_kwDOCGYnMM4DXlgX,3.20,main,3.20,0,9599,0,2022-01-06T06:55:35Z,2022-01-06T06:57:09Z,"- `sqlite-utils insert ... --lines` to insert the lines from a file into a table with a single `line` column, see [Inserting unstructured data with --lines and --text](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-unstructured). - `sqlite-utils insert ... --text` to insert the contents of the file into a table with a single `text` column and a single row. - `sqlite-utils insert ... --convert` allows a Python function to be provided that will be used to convert each row that is being inserted into the database. See [Applying conversions while inserting data](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-convert), including details on special behavior when combined with `--lines` and `--text`. ([#356](https://github.com/simonw/sqlite-utils/issues/356)) - `sqlite-utils convert` now accepts a code value of `-` to read code from standard input. ([#353](https://github.com/simonw/sqlite-utils/issues/353)) - `sqlite-utils convert` also now accepts code that defines a named `convert(value)` function, see [Converting data in columns](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-convert). - `db.supports_strict` property showing if the database connection supports [SQLite strict tables](https://www.sqlite.org/stricttables.html). - `table.strict` property (see [.strict](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-introspection-strict)) indicating if the table uses strict mode. ([#344](https://github.com/simonw/sqlite-utils/issues/344)) - Fixed bug where `sqlite-utils upsert ... --detect-types` ignored the `--detect-types` option. ([#362](https://github.com/simonw/sqlite-utils/issues/362))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/3.13,46720847,MDc6UmVsZWFzZTQ2NzIwODQ3,3.13,main,3.13,0,9599,0,2021-07-24T22:15:27Z,2021-07-24T22:17:47Z,"- `sqlite-utils schema my.db table1 table2` command now accepts optional table names. ([#299](https://github.com/simonw/sqlite-utils/issues/299)) - `sqlite-utils memory --help` now describes the `--schema` option.",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.21,31773390,MDc6UmVsZWFzZTMxNzczMzkw,2.21,main,2.21,0,9599,0,2020-09-24T16:44:30Z,2020-09-24T16:45:44Z,"- `table.extract()` and `sqlite-utils extract` now apply much, much faster - one example operation reduced from twelve minutes to just four seconds! ([#172](https://github.com/simonw/sqlite-utils/issues/172)) - `sqlite-utils extract` no longer shows a progress bar, because it's fast enough not to need one. - New `column_order=` option for `table.transform()` which can be used to alter the order of columns in a table. ([#175](https://github.com/simonw/sqlite-utils/issues/175)) - `sqlite-utils transform --column-order=` option (with a `-o` shortcut) for changing column order. ([#176](https://github.com/simonw/sqlite-utils/issues/176)) - The `table.transform(drop_foreign_keys=)` parameter and the `sqlite-utils transform --drop-foreign-key` option have changed. They now accept just the name of the column rather than requiring all three of the column, other table and other column. This is technically a backwards-incompatible change but I chose not to bump the major version number because the transform feature is so new. ([#177](https://github.com/simonw/sqlite-utils/issues/177)) - The table `.disable_fts()`, `.rebuild_fts()`, `.delete()`, `.delete_where()` and `.add_missing_columns()` methods all now `return self`, which means they can be chained together with other table operations.",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.23,33188958,MDc6UmVsZWFzZTMzMTg4OTU4,2.23,main,2.23,0,9599,0,2020-10-28T21:38:10Z,2020-10-28T21:38:54Z,"- `table.m2m(other_table, records)` method now takes any iterable, not just a list or tuple. Thanks, Adam Wolf. ([#189](https://github.com/simonw/sqlite-utils/pull/189)) - `sqlite-utils insert` now displays a progress bar for CSV or TSV imports. ([#173](https://github.com/simonw/sqlite-utils/issues/173)) - New `@db.register_function(deterministic=True)` option for registering deterministic SQLite functions in Python 3.8 or higher. ([#191](https://github.com/simonw/sqlite-utils/issues/191))",140912432, https://github.com/simonw/sqlite-utils/releases/tag/2.18,30942758,MDc6UmVsZWFzZTMwOTQyNzU4,2.18,main,2.18,0,9599,0,2020-09-08T23:37:28Z,2020-09-08T23:39:21Z,"- `table.rebuild_fts()` method for rebuilding a FTS index, see [Rebuilding a full-text search table](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-fts-rebuild). ([#155](https://github.com/simonw/sqlite-utils/issues/155)) - `sqlite-utils rebuild-fts data.db` command for rebuilding FTS indexes across all tables, or just specific tables. ([#155](https://github.com/simonw/sqlite-utils/issues/155)) - `table.optimize()` method no longer deletes junk rows from the `*_fts_docsize` table. This was added in 2.17 but it turns out running `table.rebuild_fts()` is a better solution to this problem. - Fixed a bug where rows with additional columns that are inserted after the first batch of records could cause an error due to breaking SQLite's maximum number of parameters. Thanks, Simon Wiles. ([#145](https://github.com/simonw/sqlite-utils/issues/145))",140912432, https://github.com/simonw/datasette/releases/tag/0.58.1,46341814,MDc6UmVsZWFzZTQ2MzQxODE0,0.58.1,main,0.58.1,0,9599,0,2021-07-16T19:50:06Z,2021-07-16T19:51:15Z,- Fix for an intermittent race condition caused by the `refresh_schemas()` internal function. ([#1231](https://github.com/simonw/datasette/issues/1231)),107914493, https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.13,21073645,MDc6UmVsZWFzZTIxMDczNjQ1,0.13,master,0.13,0,9599,0,2019-10-30T02:20:09Z,2019-10-30T02:22:30Z,- New `mentions-timeline` command (#26),206156866, https://github.com/simonw/datasette/releases/tag/0.64.3,101136455,RE_kwDOBm6k_c4GBzhH,0.64.3,0.64.x,0.64.3,0,9599,0,2023-04-27T14:55:25Z,2023-04-27T15:00:27Z,- Added `pip` and `setuptools` as explicit dependencies. This fixes a bug where Datasette could not be installed using [Rye](https://github.com/mitsuhiko/rye). ([#2065](https://github.com/simonw/datasette/issues/2065)),107914493,"{""url"": ""https://api.github.com/repos/simonw/datasette/releases/101136455/reactions"", ""total_count"": 3, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 2, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}" https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4a1,30678449,MDc6UmVsZWFzZTMwNjc4NDQ5,0.4a1,main,0.4a1,0,9599,1,2020-09-03T18:03:15Z,2020-09-03T18:03:50Z,"- Added `received` category. #10 - New `is_public` column. #11",197431109, https://github.com/dogsheep/dogsheep-beta/releases/tag/0.9a0,31582397,MDc6UmVsZWFzZTMxNTgyMzk3,0.9a0,main,0.9a0,0,9599,1,2020-09-20T23:37:09Z,2020-09-20T23:37:48Z,"- Added by date, as part of developing a timeline view. #16",197431109, https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.2,28705982,MDc6UmVsZWFzZTI4NzA1OTgy,0.21.2,master,0.21.2,0,9599,0,2020-07-18T22:42:54Z,2020-07-18T22:43:20Z,- Added changelog badge,206156866, https://github.com/simonw/datasette/releases/tag/0.59.2,53323406,RE_kwDOBm6k_c4DLaaO,0.59.2,main,0.59.2,0,9599,0,2021-11-14T05:37:40Z,2021-11-14T05:43:09Z,"- Column names with a leading underscore now work correctly when used as a facet. ([#1506](https://github.com/simonw/datasette/issues/1506)) - Applying `?_nocol=` to a column no longer removes that column from the filtering interface. ([#1503](https://github.com/simonw/datasette/issues/1503)) - Official Datasette Docker container now uses Debian Bullseye as the base image. ([#1497](https://github.com/simonw/datasette/issues/1497)) - Datasette is four years old today! Here's the [original release announcement](https://simonwillison.net/2017/Nov/13/datasette/) from 2017.",107914493, https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.3,37946829,MDc6UmVsZWFzZTM3OTQ2ODI5,0.3,main,0.3,0,9599,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, https://github.com/dogsheep/dogsheep-beta/releases/tag/0.5,30699190,MDc6UmVsZWFzZTMwNjk5MTkw,0.5,main,0.5,0,9599,0,2020-09-04T01:45:35Z,2020-09-04T01:46:16Z,- Custom template displays can now render a point on a map. #12,197431109, https://github.com/simonw/datasette/releases/tag/0.64,88331580,RE_kwDOBm6k_c4FQ9U8,0.64,0.63.x,0.64,0,9599,0,2023-01-09T16:37:21Z,2023-01-09T16:49:04Z,"- Datasette now **strongly recommends against allowing arbitrary SQL queries if you are using SpatiaLite**. SpatiaLite includes SQL functions that could cause the Datasette server to crash. See [SpatiaLite](https://docs.datasette.io/en/stable/spatialite.html#spatialite) for more details. - New [default_allow_sql](https://docs.datasette.io/en/stable/settings.html#setting-default-allow-sql) setting, providing an easier way to disable all arbitrary SQL execution by end users: `datasette --setting default_allow_sql off`. See also [Controlling the ability to execute arbitrary SQL](https://docs.datasette.io/en/stable/authentication.html#authentication-permissions-execute-sql). ([#1409](https://github.com/simonw/datasette/issues/1409)) - [Building a location to time zone API with SpatiaLite](https://datasette.io/tutorials/spatialite) is a new Datasette tutorial showing how to safely use SpatiaLite to create a location to time zone API. - New documentation about [how to debug problems loading SQLite extensions](https://docs.datasette.io/en/stable/installation.html#installation-extensions). The error message shown when an extension cannot be loaded has also been improved. ([#1979](https://github.com/simonw/datasette/issues/1979)) - Fixed an accessibility issue: the `