{"id":1245,"date":"2026-06-18T23:58:00","date_gmt":"2026-06-18T23:58:00","guid":{"rendered":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/"},"modified":"2026-06-20T09:59:28","modified_gmt":"2026-06-20T09:59:28","slug":"atom-everything-11","status":"publish","type":"post","link":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/","title":{"rendered":"Datasette Apps: Host customized HTML functions inside Datasette"},"content":{"rendered":"<p><br \/>\n<\/p>\n<div data-permalink-context=\"\/2026\/Jun\/18\/datasette-apps\/\">\n<h2>Datasette Apps: Host customized HTML functions inside Datasette<\/h2>\n<p class=\"mobile-date\">18th June 2026<\/p>\n<p>Right now we launched a brand new plugin for Datasette, datasette-apps, with this launch announcement put up on the Datasette mission weblog. That put up has the what, however I\u2019m going to increase on that slightly bit right here to supply the why.<\/p>\n<h4 id=\"the-tl-dr\">The TL;DR<\/h4>\n<p>Datasette Apps are self-contained HTML+JavaScript functions that run in a tightly constrained  sandbox hosted in your Datasette utility. They will use JavaScript to run read-only SQL queries towards knowledge in Datasette, and might run write queries too in the event you configure them with some saved queries.<\/p>\n<p>Right here\u2019s a quite simple instance and a extra complicated customized timeline instance\u2014the latter seems like this:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/static.simonwillison.net\/static\/2026\/datasette-timeline-app.jpg\" alt=\"Screenshot of a web app titled &quot;Datasette timeline&quot; with &quot;All apps&quot;, &quot;Edit app&quot;, and &quot;Pin&quot; buttons top-right and a &quot;Full screen&quot; button below them. Inside a bordered panel, the heading &quot;Datasette timeline&quot; sits above a search box reading &quot;Search news, blog posts and releases\u2026&quot; with three checked checkboxes labeled News, Blog, and Releases. Below, text reads &quot;Showing 200 of 1,953 items&quot;, followed by a scrollable list of timeline entries. Each entry has a colored tag (blue &quot;BLOG&quot; or green &quot;RELEASE&quot;), a date, a blue linked title, and a paragraph of description. The visible entries are a &quot;BLOG&quot; post dated 2026-06-11 titled &quot;Datasette 1.0a33 with JSON extras in the API&quot;, a &quot;RELEASE&quot; dated 2026-06-11 titled &quot;datasette 1.0a33&quot;, and a &quot;RELEASE&quot; dated 2026-06-09 titled &quot;llm 0.32a3&quot;, each with body text and a &quot;\u25b6 Show more&quot; toggle. A separate panel at the bottom shows a collapsed &quot;\u25b6 2 log entries&quot; toggle.\" style=\"max-width: 100%;\"\/><\/p>\n<p>Apps are allowed to run JavaScript and render HTML and CSS. They&#8217;re restricted when it comes to entry\u2014the  they run in prevents them from accessing cookies or localStorage and so they even have an injected CSP header (because of this analysis) which prevents them from making HTTP requests to exterior hosts, stopping a malicious or buggy app from exfiltrating non-public knowledge.<\/p>\n<p>Datasette Apps began out as my try at constructing a Claude Artifacts mechanism for Datasette Agent, however I rapidly realised that the sandboxed sample is attention-grabbing for far more than simply including customized apps in a chat interface and promoted it to its personal top-level idea inside the Datasette ecosystem.<\/p>\n<p>They\u2019re additionally a enjoyable solution to flip my multi-year experiment in vibe-coded HTML instruments right into a core characteristic of my essential mission!<\/p>\n<p>You possibly can check out Datasette Apps by signing in with GitHub to the agent.datasette.io demo occasion.<\/p>\n<h4 id=\"why-build-this-\">Why construct this?<\/h4>\n<p>Because the very first launch, Datasette has provided a versatile backend for creating customized HTML apps through its JSON API.<\/p>\n<p>Considered one of my earliest Datasette initiatives was an inner search engine for documentation once I labored at Eventbrite\u2014it labored by importing paperwork from totally different programs into SQLite on a cron after which serving them by a Datasette occasion with a customized HTML+JavaScript search interface that instantly queried the Datasette API.<\/p>\n<p>I had client-side JavaScript setting up SQL queries, which initially was supposed as an engineering joke however turned out to be a very productive manner of iterating on the app!<\/p>\n<p>That mission, mixed with my expertise constructing my HTML instruments assortment and my experiments with Claude Artifacts, has satisfied me that including a Datasette-style backend to a self-contained HTML frontend is an astonishingly highly effective mixture.<\/p>\n<p>Think about how far more helpful Claude Artifacts may very well be if they&#8217;d entry to a persistent relational database. That\u2019s what I\u2019m constructing with Datasette Apps!<\/p>\n<h4 id=\"neat-ideas-in-datasette-apps\">Neat concepts in Datasette Apps<\/h4>\n<p>Listed here are a number of of the concepts and patterns I\u2019ve discovered constructing this which I believe have endurance.<\/p>\n<p> + <\/p>\n<p>That is the magic mixture that makes Datasette Apps possible within the first place. I have to run untrusted HTML and JavaScript on a extremely delicate area\u2014an authenticated Datasette occasion can include all types of personal knowledge. The sandbox= attribute lets me run that untrusted code in a manner that can&#8217;t work together with the dad or mum utility\u2014it will probably\u2019t learn the DOM, or entry cookies, or steal secrets and techniques from localStorage. It might probably nonetheless use fetch() and associates to load content material (or exfiltrate knowledge) from different domains. However&#8230; it seems in the event you begin an HTML web page with a  header you possibly can set extra insurance policies that lock down entry to different domains. I used to be frightened that malicious JavaScript would be capable to replace or take away that header nevertheless it seems that doesn\u2019t work\u2014as soon as set, the CSP coverage is immutable for the content material of that body.<\/p>\n<p>Locked down APIs with postMessage() and MessageChannel()<\/p>\n<p>Having locked down these iframes to the purpose that they couldn\u2019t do something attention-grabbing in any respect, the problem was to open them again once more such that they may run an allow-list of operations, beginning with read-only SQL queries towards specified databases.<\/p>\n<p>I constructed the primary model of this with postMessage(), which permits a baby iframe to ship messages to the dad or mum window. I created a easy protocol for requesting that the dad or mum run a SQL question\u2014the dad or mum may then confirm it was towards an allow-listed database earlier than executing it.<\/p>\n<p>One of many LLM instruments, I believe it was GPT-5.5, advised that postMessage() by itself may be exploited if the iframe by some means hundreds extra code from an untrusted area. I don\u2019t suppose that applies to Datasette Apps, however I additionally consider in protection in depth, so I had GPT-5.5 assist me port to a MessageChannel() based mostly transport as an alternative.<\/p>\n<p>MessageChannel() has the benefit that if a web page navigates to some other place the channel closes robotically, eradicating any probability of executing instructions despatched from an untrusted exterior web page.<\/p>\n<p>Seen logs, for queries and errors<\/p>\n<p>If you happen to navigate to the timeline demo and seek for the string usercontent you\u2019ll pull in some search outcomes that embed photos from the user-images.githubusercontent.com area. This area shouldn&#8217;t be within the CSP allow-list, so it journeys an error.<\/p>\n<p>These errors are captured and transmitted again to the dad or mum body, the place they are often displayed in a helpful error log. That is meant to make hacking on apps extra productive by surfacing otherwise-invisible issues.<\/p>\n<p>I constructed an experiment demonstrating that you would be able to even flip this right into a one-click-to-allow mechanism for constructing the CSP allow-list based mostly on what breaks, however I haven\u2019t built-in that concept into datasette-apps simply but.<\/p>\n<p>SQL queries are additionally visibly logged\u2014scroll to the underside of the timeline web page to see that in motion.<\/p>\n<p>Saved queries for write operations<\/p>\n<p>I would like apps to have the ability to conditionally write to the database, however that is an much more harmful proposition than SQL reads!<\/p>\n<p>My answer includes Datasette\u2019s saved queries characteristic, rebranded from \u201ccanned queries\u201d and given a serious improve within the current Datasette 1.0a31\u2014work that was instantly impressed by Datasette Apps.<\/p>\n<p>Customers can create a saved write question that performs an insert or replace, then allow-list that particular question for an app to make use of. Utilization from code inside an app seems like this:<\/p>\n<div class=\"highlight highlight-source-js\"><span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">end result<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-s1\">datasette<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">storedQuery<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">&#8220;todos&#8221;<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">&#8220;add_todo&#8221;<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-kos\">{<\/span><br \/>\n  <span class=\"pl-c1\">title<\/span>: <span class=\"pl-s\">&#8220;Purchase milk&#8221;<\/span><span class=\"pl-kos\">,<\/span><br \/>\n  <span class=\"pl-c1\">due_date<\/span>: <span class=\"pl-s\">&#8220;2026-06-20&#8221;<\/span><span class=\"pl-kos\">,<\/span><br \/>\n  <span class=\"pl-c1\">precedence<\/span>: <span class=\"pl-s\">&#8220;excessive&#8221;<\/span><span class=\"pl-kos\">,<\/span><br \/>\n  <span class=\"pl-c1\">accomplished<\/span>: <span class=\"pl-c1\">false<\/span><br \/>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/div>\n<p>I\u2019m solely simply starting to discover the chances this unlocks myself, however my aim is to help full read-write functions constructed safely as Datasette Apps.<\/p>\n<p>Copy and paste a immediate to construct an app<\/p>\n<p>The Datasette Apps plugin has no dependency on LLMs in any respect, however these self-contained apps are the right form to be written by a contemporary LLM.<\/p>\n<p>The create app kind features a copyable immediate on the finish. This immediate has every part a mannequin must know to construct a brand new app, together with the schema of any chosen databases.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/datasette.io\/static\/blog\/2026\/create-app-prompt.jpg\" alt=\"Screenshot of the lower part of a &quot;Create app&quot; page. At the top is the tail end of an HTML code editor (lines 35\u201343, closing the script, body, and html tags) and a blue &quot;Create app&quot; button. Below is a section headed &quot;Use AI to build this app&quot; with the text &quot;Describe the app you want in an LLM chat, then copy this prompt in as context so it can generate or revise the app HTML. Paste the result into the HTML editor above.&quot; A blue &quot;Copy prompt&quot; button sits above a &quot;\u25bc Show full prompt&quot; toggle. An expanded text box shows the prompt: &quot;Build a Datasette HTML app. App name: Latest news. Return a complete single-file HTML document. Include &lt;DOCTYPE, CSS, and JavaScript in the same file. This app will run inside a sandboxed iframe protected by a strict Content Security Policy. Important limitations: \u2013 Direct network access is disabled by default. \u2013 The app cannot fetch from Datasette, localhost, or arbitrary origins. \u2013 External fetch() requests only work for exact https:\/\/ origins explicitly granted in the app's network access settings. \u2013 Remote images are allowed from those same exact https:\/\/ origins. Local file previews using data: and blob: image URLs are allowed. \u2013 External script tags are allowed from those same exact https:\/\/ origins. \u2013 External stylesheet links and style elements are allowed from those same exact https:\/\/ origins. \u2013 history.replaceState(), history.pushState(), history.back(), history.forward(), and history.go() are no-ops in the sandbox. \u2013 CORS still applies even when an origin is granted. Use this API for data access: \u2013 await datasette.query(database, sql, params?)&quot;\" style=\"max-width: 100%;\"\/><\/p>\n<p>This implies you possibly can click on \u201ccopy\u201d, paste it into ChatGPT or Claude or Gemini, inform it what you want, and there\u2019s a great probability the mannequin will spit out the code mandatory to construct the app.<\/p>\n<p>When you&#8217;ve got Datasette Agent put in your AI assistant may also acquire instruments to each create new apps and edit present ones, Claude Artifacts model.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/datasette.io\/static\/blog\/2026\/create-app-agent.jpg\" alt=\"Screenshot of a &quot;Chat&quot; interface with a &quot;\u2190 Back&quot; link top-left and an &quot;EXPORT&quot; button top-right. A blue user message bubble reads &quot;Build an app showing the 5 most recent headlines from the blog_posts table&quot;. Below are two collapsed toggles: &quot;\u25ba Tool: describe_table&quot; and &quot;\u25ba Result: describe_table&quot;. A thinking line reads &quot;Thinking: \u2026will transition to creating the application using app_create as the next step.&quot; A section headed &quot;Querying Latest Posts&quot; reads &quot;I've successfully queried the blog_posts table for the 5 most recent titles. The SQL query, SELECT title FROM blog_posts ORDER BY datetime_utc DESC LIMIT 5, is working as expected. Now, I will transition to creating the application using app_create as the next step.&quot; An expanded &quot;\u25bc Tool: app_create&quot; box shows escaped JSON HTML: { &quot;html&quot;: &quot;....&quot; Below: &quot;Recent Blog Headlines created.&quot; with &quot;View app&quot; and &quot;Edit&quot; buttons, a collapsed &quot;\u25ba Result: app_create&quot; toggle, and a final message: &quot;The app &quot;Recent Blog Headlines&quot; has been created. It displays the 5 most recent headlines from the blog_posts table in the content database.&quot;\" style=\"max-width: 100%;\"\/><\/p>\n<h4 id=\"built-with-so-much-ai-assistance\">Constructed with a lot AI help<\/h4>\n<p>Datasette Apps began life again in April as datasette-agent-artifacts, a plugin I&#8217;ve since renamed to datasette-agent-edit conserving solely its modifying instruments. I constructed that as one of many first plugins for Datasette Agent, to assist get the plugin hooks into the fitting form. That first prototype was primarily constructed utilizing Claude Opus 4.6 in Claude Code.<\/p>\n<p>Once I switched monitor to Datasette Apps I began with a plan constructed utilizing Codex Desktop and GPT-5.5 xhigh, based mostly on in depth dialog and feeding in each datasette-agent-artifacts and different prototypes I had constructed.<\/p>\n<p>Many of the work that adopted caught with Codex, however within the few quick days that we had entry to Claude Fable 5 I had it run a safety analysis of the product (a capability that may get it banned by the US authorities shortly afterwards) and it discovered a really actual drawback.<\/p>\n<p>I used to be permitting customers to allow-list CSP hosts for his or her apps, however Fable identified the next assault:<\/p>\n<p>A much less privileged person with create-app permission creates an app that queries SQLite for all obtainable tables and selects and exfiltrates the entire knowledge to a number they&#8217;d allow-listed through CSP.<br \/>\nThey then trick an administrator person with entry to personal knowledge into visiting their app.<br \/>\n&#8230; and the app can now run queries as that person and steal their non-public knowledge!<\/p>\n<p>That\u2019s clearly unacceptable. I fastened it by limiting the flexibility to allow-list any area to a brand new apps-set-csp permission, which is meant only for trusted workers. Web site directors also can configure Datasette with a listing of allowed_csp_origins, which common customers can then choose. This implies you are able to do issues like permit cdnjs.cloudflare.com and your customers will be capable to construct apps that load further JavaScript libraries from the cdnjs CDN.<\/p>\n<p>I\u2019ve reviewed Datasette Apps extraordinarily intently, particularly the security-adjacent components of it. The crucial sandbox and CSP configuration are based mostly on a number of AI-assisted prototypes and exams.<\/p>\n<h4 id=\"it-s-looking-good-so-far\">It\u2019s wanting good to date<\/h4>\n<p>I\u2019m actually happy with this preliminary launch.<\/p>\n<p>Datasette is rising past its origins as an utility for serving read-only knowledge right into a a lot richer ecosystem of instruments for doing helpful issues with that knowledge as soon as it has been collected.<\/p>\n<p>Datasette\u2019s roots are in knowledge journalism. I\u2019ve at all times been  within the query of what comes subsequent after a journalist will get their fingers on an enormous dump of information concerning the world. Datasette helps exploring and publishing it. Datasette Agent provides interrogating it with AI help. Now Datasette Apps expands that to constructing customized interfaces and visualizations to assist unlock the tales which can be hidden inside.<\/p>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/simonwillison.net\/2026\/Jun\/18\/datasette-apps\/#atom-everything\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Datasette Apps: Host customized HTML functions inside Datasette 18th June 2026 Right now we launched a brand new plugin for Datasette, datasette-apps, with this launch announcement put up on the Datasette mission weblog. That put up has the what, however I\u2019m going to increase on that slightly bit right here to supply the why. The [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1247,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg","fifu_image_alt":"","jnews-multi-image_gallery":[],"jnews_single_post":[],"jnews_primary_category":[],"jnews_override_bookmark_settings":[],"jnews_social_meta":[],"jnews_override_counter":[],"footnotes":""},"categories":[2],"tags":[1666,1006,1664,244,194,1665],"class_list":["post-1245","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-research-breakthroughs","tag-applications","tag-apps","tag-custom","tag-datasette","tag-host","tag-html"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Datasette Apps: Host customized HTML functions inside Datasette - Future News 24<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datasette Apps: Host customized HTML functions inside Datasette - Future News 24\" \/>\n<meta property=\"og:description\" content=\"Datasette Apps: Host customized HTML functions inside Datasette 18th June 2026 Right now we launched a brand new plugin for Datasette, datasette-apps, with this launch announcement put up on the Datasette mission weblog. That put up has the what, however I\u2019m going to increase on that slightly bit right here to supply the why. The [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/\" \/>\n<meta property=\"og:site_name\" content=\"Future News 24\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-18T23:58:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-20T09:59:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg\" \/><meta property=\"og:image\" content=\"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg\" \/>\n<meta name=\"author\" content=\"Future News 24\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Future News 24\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/\"},\"author\":{\"name\":\"Future News 24\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/person\\\/cecad1bde21cfc357cf70128144d6c83\"},\"headline\":\"Datasette Apps: Host customized HTML functions inside Datasette\",\"datePublished\":\"2026-06-18T23:58:00+00:00\",\"dateModified\":\"2026-06-20T09:59:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/\"},\"wordCount\":1748,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/static.simonwillison.net\\\/static\\\/2026\\\/datasette-apps-card.jpg\",\"keywords\":[\"applications\",\"apps\",\"custom\",\"datasette\",\"Host\",\"HTML\"],\"articleSection\":[\"AI Research &amp; Breakthroughs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/\",\"name\":\"Datasette Apps: Host customized HTML functions inside Datasette - Future News 24\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/static.simonwillison.net\\\/static\\\/2026\\\/datasette-apps-card.jpg\",\"datePublished\":\"2026-06-18T23:58:00+00:00\",\"dateModified\":\"2026-06-20T09:59:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/#primaryimage\",\"url\":\"https:\\\/\\\/static.simonwillison.net\\\/static\\\/2026\\\/datasette-apps-card.jpg\",\"contentUrl\":\"https:\\\/\\\/static.simonwillison.net\\\/static\\\/2026\\\/datasette-apps-card.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/2026\\\/06\\\/18\\\/atom-everything-11\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/futurenews24.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Datasette Apps: Host customized HTML functions inside Datasette\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#website\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/\",\"name\":\"Future News 24\",\"description\":\"The Smart Hub for AI and Next-Gen Innovation\",\"publisher\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/futurenews24.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#organization\",\"name\":\"Future News 24\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/futurenews24.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/fn24-favicon.png\",\"contentUrl\":\"https:\\\/\\\/futurenews24.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/fn24-favicon.png\",\"width\":250,\"height\":250,\"caption\":\"Future News 24\"},\"image\":{\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/futurenews24.com\\\/#\\\/schema\\\/person\\\/cecad1bde21cfc357cf70128144d6c83\",\"name\":\"Future News 24\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g\",\"caption\":\"Future News 24\"},\"sameAs\":[\"https:\\\/\\\/futurenews24.com\"],\"url\":\"https:\\\/\\\/futurenews24.com\\\/index.php\\\/author\\\/mridulpahuja20\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Datasette Apps: Host customized HTML functions inside Datasette - Future News 24","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/","og_locale":"en_US","og_type":"article","og_title":"Datasette Apps: Host customized HTML functions inside Datasette - Future News 24","og_description":"Datasette Apps: Host customized HTML functions inside Datasette 18th June 2026 Right now we launched a brand new plugin for Datasette, datasette-apps, with this launch announcement put up on the Datasette mission weblog. That put up has the what, however I\u2019m going to increase on that slightly bit right here to supply the why. The [&hellip;]","og_url":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/","og_site_name":"Future News 24","article_published_time":"2026-06-18T23:58:00+00:00","article_modified_time":"2026-06-20T09:59:28+00:00","og_image":[{"url":"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg","type":"","width":"","height":""},{"url":"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg","type":"","width":"","height":""}],"author":"Future News 24","twitter_card":"summary_large_image","twitter_image":"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg","twitter_misc":{"Written by":"Future News 24","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/#article","isPartOf":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/"},"author":{"name":"Future News 24","@id":"https:\/\/futurenews24.com\/#\/schema\/person\/cecad1bde21cfc357cf70128144d6c83"},"headline":"Datasette Apps: Host customized HTML functions inside Datasette","datePublished":"2026-06-18T23:58:00+00:00","dateModified":"2026-06-20T09:59:28+00:00","mainEntityOfPage":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/"},"wordCount":1748,"commentCount":0,"publisher":{"@id":"https:\/\/futurenews24.com\/#organization"},"image":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/#primaryimage"},"thumbnailUrl":"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg","keywords":["applications","apps","custom","datasette","Host","HTML"],"articleSection":["AI Research &amp; Breakthroughs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/","url":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/","name":"Datasette Apps: Host customized HTML functions inside Datasette - Future News 24","isPartOf":{"@id":"https:\/\/futurenews24.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/#primaryimage"},"image":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/#primaryimage"},"thumbnailUrl":"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg","datePublished":"2026-06-18T23:58:00+00:00","dateModified":"2026-06-20T09:59:28+00:00","breadcrumb":{"@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/#primaryimage","url":"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg","contentUrl":"https:\/\/static.simonwillison.net\/static\/2026\/datasette-apps-card.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/futurenews24.com\/index.php\/2026\/06\/18\/atom-everything-11\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/futurenews24.com\/"},{"@type":"ListItem","position":2,"name":"Datasette Apps: Host customized HTML functions inside Datasette"}]},{"@type":"WebSite","@id":"https:\/\/futurenews24.com\/#website","url":"https:\/\/futurenews24.com\/","name":"Future News 24","description":"The Smart Hub for AI and Next-Gen Innovation","publisher":{"@id":"https:\/\/futurenews24.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/futurenews24.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/futurenews24.com\/#organization","name":"Future News 24","url":"https:\/\/futurenews24.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/futurenews24.com\/#\/schema\/logo\/image\/","url":"https:\/\/futurenews24.com\/wp-content\/uploads\/2026\/06\/fn24-favicon.png","contentUrl":"https:\/\/futurenews24.com\/wp-content\/uploads\/2026\/06\/fn24-favicon.png","width":250,"height":250,"caption":"Future News 24"},"image":{"@id":"https:\/\/futurenews24.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/futurenews24.com\/#\/schema\/person\/cecad1bde21cfc357cf70128144d6c83","name":"Future News 24","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d57f07142d73cb5503ab2446ea7bc9ef3d0a5ba378d64a6157692311e42bf097?s=96&d=mm&r=g","caption":"Future News 24"},"sameAs":["https:\/\/futurenews24.com"],"url":"https:\/\/futurenews24.com\/index.php\/author\/mridulpahuja20\/"}]}},"_links":{"self":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/1245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/comments?post=1245"}],"version-history":[{"count":1,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/1245\/revisions"}],"predecessor-version":[{"id":1246,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/posts\/1245\/revisions\/1246"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/media\/1247"}],"wp:attachment":[{"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/media?parent=1245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/categories?post=1245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/futurenews24.com\/index.php\/wp-json\/wp\/v2\/tags?post=1245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}