{"ok": true, "next": null, "rows": [{"id": "changelog:configuration", "page": "changelog", "ref": "configuration", "title": "Configuration", "content": "Plugin configuration now lives in the  datasette.yaml configuration file , passed to Datasette using the  -c/--config  option. Thanks, Alex Garcia. ( #2093 ) \n                         datasette -c datasette.yaml \n                         Where  datasette.yaml  contains configuration that looks like this: \n                         plugins:\n  datasette-cluster-map:\n    latitude_column: xlat\n    longitude_column: xlon \n                         Previously plugins were configured in  metadata.yaml , which was confusing as plugin settings were unrelated to database and table metadata. \n                     \n                     \n                         The  -s/--setting  option can now be used to set plugin configuration as well. See  Configuration via the command-line  for details. ( #2252 ) \n                         The above YAML configuration example using  -s/--setting  looks like this: \n                         datasette mydatabase.db \\\n  -s plugins.datasette-cluster-map.latitude_column xlat \\\n  -s plugins.datasette-cluster-map.longitude_column xlon \n                     \n                     \n                         The new  /-/config  page shows the current instance configuration, after redacting keys that could contain sensitive data such as API keys or passwords. ( #2254 ) \n                     \n                     \n                         Existing Datasette installations may already have configuration set in  metadata.yaml  that should be migrated to  datasette.yaml . To avoid breaking these installations, Datasette will silently treat table configuration, plugin configuration and allow blocks in metadata as if they had been specified in configuration instead. ( #2247 ) ( #2248 ) ( #2249 ) \n                     \n                 \n                 Note that the  datasette publish  command has not yet been updated to accept a  datasette.yaml  configuration file. This will be addressed in  #2195  but for the moment you can include those settings in  metadata.yaml  instead.", "breadcrumbs": "[\"Changelog\", \"1.0a8 (2024-02-07)\"]", "references": "[{\"href\": \"https://github.com/simonw/datasette/issues/2093\", \"label\": \"#2093\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2252\", \"label\": \"#2252\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2254\", \"label\": \"#2254\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2247\", \"label\": \"#2247\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2248\", \"label\": \"#2248\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2249\", \"label\": \"#2249\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2195\", \"label\": \"#2195\"}]"}, {"id": "changelog:documentation", "page": "changelog", "ref": "documentation", "title": "Documentation", "content": "Documentation describing  how to write tests that use signed actor cookies  using  datasette.client.actor_cookie() . ( #1830 ) \n                     \n                     \n                         Documentation on how to  register a plugin for the duration of a test . ( #2234 ) \n                     \n                     \n                         The  configuration documentation  now shows examples of both YAML and JSON for each setting.", "breadcrumbs": "[\"Changelog\", \"1.0a8 (2024-02-07)\"]", "references": "[{\"href\": \"https://github.com/simonw/datasette/issues/1830\", \"label\": \"#1830\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2234\", \"label\": \"#2234\"}]"}, {"id": "changelog:javascript-plugins", "page": "changelog", "ref": "javascript-plugins", "title": "JavaScript plugins", "content": "Datasette now includes a  JavaScript plugins mechanism , allowing JavaScript to customize Datasette in a way that can collaborate with other plugins. \n                 This provides two initial hooks, with more to come in the future: \n                 \n                     \n                         makeAboveTablePanelConfigs()  can add additional panels to the top of the table page. \n                     \n                     \n                         makeColumnActions()  can add additional actions to the column menu. \n                     \n                 \n                 Thanks  Cameron Yick  for contributing this feature. ( #2052 )", "breadcrumbs": "[\"Changelog\", \"1.0a8 (2024-02-07)\"]", "references": "[{\"href\": \"https://github.com/hydrosquall\", \"label\": \"Cameron Yick\"}, {\"href\": \"https://github.com/simonw/datasette/pull/2052\", \"label\": \"#2052\"}]"}, {"id": "changelog:minor-fixes", "page": "changelog", "ref": "minor-fixes", "title": "Minor fixes", "content": "Datasette no longer attempts to run SQL queries in parallel when rendering a table page, as this was leading to some rare crashing bugs. ( #2189 ) \n                     \n                     \n                         Fixed warning:  DeprecationWarning: pkg_resources is deprecated as an API  ( #2057 ) \n                     \n                     \n                         Fixed bug where  ?_extra=columns  parameter returned an incorrectly shaped response. ( #2230 )", "breadcrumbs": "[\"Changelog\", \"1.0a8 (2024-02-07)\"]", "references": "[{\"href\": \"https://github.com/simonw/datasette/issues/2189\", \"label\": \"#2189\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2057\", \"label\": \"#2057\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2230\", \"label\": \"#2230\"}]"}, {"id": "changelog:plugin-hooks", "page": "changelog", "ref": "plugin-hooks", "title": "Plugin hooks", "content": "New  jinja2_environment_from_request(datasette, request, env)  plugin hook, which can be used to customize the current Jinja environment based on the incoming request. This can be used to modify the template lookup path based on the incoming request hostname, among other things. ( #2225 ) \n                     \n                     \n                         New  family of template slot plugin hooks :  top_homepage ,  top_database ,  top_table ,  top_row ,  top_query ,  top_canned_query . Plugins can use these to provide additional HTML to be injected at the top of the corresponding pages. ( #1191 ) \n                     \n                     \n                         \n                             \n                                 New  track_event() mechanism  for plugins to emit and receive events when certain events occur within Datasette. ( #2240 ) \n                                 \n                                     \n                                         \n                                             Plugins can register additional event classes using  register_events(datasette) . \n                                         \n                                         \n                                             They can then trigger those events with the  datasette.track_event(event)  internal method. \n                                         \n                                         \n                                             Plugins can subscribe to notifications of events using the  track_event(datasette, event)  plugin hook. \n                                         \n                                         \n                                             Datasette core now emits  login ,  logout ,  create-token ,  create-table ,  drop-table ,  insert-rows ,  upsert-rows ,  update-row ,  delete-row  events,  documented here . \n                                         \n                                     \n                                 \n                             \n                         \n                     \n                     \n                         New internal function for plugin authors:  await db.execute_isolated_fn(fn) , for creating a new SQLite connection, executing code and then closing that connection, all while preventing other code from writing to that particular database. This connection will not have the  prepare_connection()  plugin hook executed against it, allowing plugins to perform actions that might otherwise be blocked by existing connection configuration. ( #2218 )", "breadcrumbs": "[\"Changelog\", \"1.0a8 (2024-02-07)\"]", "references": "[{\"href\": \"https://github.com/simonw/datasette/issues/2225\", \"label\": \"#2225\"}, {\"href\": \"https://github.com/simonw/datasette/issues/1191\", \"label\": \"#1191\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2240\", \"label\": \"#2240\"}, {\"href\": \"https://github.com/simonw/datasette/issues/2218\", \"label\": \"#2218\"}]"}], "truncated": false}