{"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": "javascript_plugins:id1", "page": "javascript_plugins", "ref": "id1", "title": "JavaScript plugins", "content": "Datasette can run custom JavaScript in several different ways: \n \n \n Datasette plugins written in Python can use the extra_js_urls() or extra_body_script() plugin hooks to inject JavaScript into a page \n \n \n Datasette instances with custom templates can include additional JavaScript in those templates \n \n \n The extra_js_urls key in datasette.yaml can be used to include extra JavaScript \n \n \n There are no limitations on what this JavaScript can do. It is executed directly by the browser, so it can manipulate the DOM, fetch additional data and do anything else that JavaScript is capable of. \n \n Custom JavaScript has security implications, especially for authenticated Datasette instances where the JavaScript might run in the context of the authenticated user. It's important to carefully review any JavaScript you run in your Datasette instance.", "breadcrumbs": "[]", "references": "[]"}