<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0"><channel><title>Svelte blog</title><link>https://svelte.dev/blog</link><description>News and information about the magical disappearing UI framework</description><image><url>https://svelte.dev/favicon.png</url><title>Svelte</title><link>https://svelte.dev/blog</link></image><item><title>What’s new in Svelte: October 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-october-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;There were lots of improvements to remote functions this month - including new batching tools and improved performance via lazy discovery. For more info, check out the Docs and PR links in each bullet. Async SSR is also available for those who would like to try it out while it&amp;rsquo;s still experimental. It&amp;rsquo;s included when the config option in &lt;code&gt;svelte.config.js&lt;/code&gt; has the &lt;code&gt;compilerOptions.experimental.async&lt;/code&gt; setting enabled.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve got a hefty showcase this month too, so let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-SvelteKit-and-Svelte-CLI-(sv)&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte, SvelteKit and Svelte CLI (sv)&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-SvelteKit-and-Svelte-CLI-(sv)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;event&lt;/code&gt; property is now included on popstate, link and form navigation (&lt;strong&gt;kit@2.40.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/14307&quot;&gt;#14307&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;%sveltekit.version%&lt;/code&gt; placeholder can now be used in &lt;code&gt;app.html&lt;/code&gt; to easily include the current SvelteKit version in the output (&lt;strong&gt;kit@2.41.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/project-structure#Project-files-src&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12132&quot;&gt;#12132&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;You can now create projects from the Svelte playground with &lt;code&gt;npx sv create --from-playground &amp;lt;url&amp;gt;&lt;/code&gt; (&lt;strong&gt;sv@0.9.5&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/662&quot;&gt;#662&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Experimental async SSR is available in Svelte v5.39.3 and SvelteKit v2.43.0 or higher. You can opt-in via the &lt;code&gt;experimental.async&lt;/code&gt; option. When this is enabled, it&amp;rsquo;s possible to use &lt;code&gt;await&lt;/code&gt; anywhere in your app, without wrapping it in a boundary with a pending snippet. You can find more information in the SvelteKit PR (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/14447&quot;&gt;#14447&lt;/a&gt;, Svelte PR is &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/16748&quot;&gt;#16748&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-Svelte-SvelteKit-and-Svelte-CLI-(sv)-Remote-Functions&quot;&gt;&lt;span&gt;Remote Functions&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-SvelteKit-and-Svelte-CLI-(sv)-Remote-Functions&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;The remote &lt;code&gt;set()&lt;/code&gt; function can now be called on server queries and &lt;code&gt;query.refresh()&lt;/code&gt; promises will now be automatically resolved on the server (&lt;strong&gt;kit@2.37.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/remote-functions&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/14304&quot;&gt;#14304&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/14332&quot;&gt;#14332&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;query.batch&lt;/code&gt; remote function lets you batch requests that happen within the same macrotask (&lt;strong&gt;kit@2.38.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/remote-functions#query.batch&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/14272&quot;&gt;#14272&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lazy discovery of remote functions improves detection and tree shaking for functions defined in &lt;code&gt;node_modules&lt;/code&gt; (&lt;strong&gt;kit@2.39.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/14293&quot;&gt;#14293&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;form&lt;/code&gt; remote function has been enhanced with schema support, &lt;code&gt;input&lt;/code&gt; and &lt;code&gt;issues&lt;/code&gt; properties (&lt;strong&gt;kit@2.42.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/remote-functions#form&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/14383&quot;&gt;#14383&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of bug fixes in Svelte, SvelteKit and its adapters, check out their CHANGELOGs &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://windframe.dev/&quot;&gt;Windframe&lt;/a&gt; generates designs with AI or prebuilt templates to export as Tailwind CSS code for React, Vue, Svelte or HTML.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vrmiguel/pgpad&quot;&gt;pgpad&lt;/a&gt; is a straightforward cross-platform database client&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.zippywords.com/words/en&quot;&gt;Zippywords&lt;/a&gt; is a burst-typing game that&amp;rsquo;s configurable with different languages (including the &lt;a href=&quot;https://www.zippywords.com/code/Svelte%205&quot;&gt;Svelte 5 syntax&lt;/a&gt;!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cbfc.watch/&quot;&gt;CBFC Watch&lt;/a&gt; is a data visualisation project with a searchable database of over 100K film censorship records in India (&lt;a href=&quot;https://github.com/diagram-chasing/cbfc-watch&quot;&gt;GitHub&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Spotted in the Wild&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tv.apple.com/&quot;&gt;The Apple TV website&lt;/a&gt; - (&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1n6i96i/the_appletv_website_uses_svelte/&quot;&gt;Reddit post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gimli.app/tailwind&quot;&gt;Gimli Tailwind&lt;/a&gt; - (&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1nbmoeq/the_most_popular_devtools_extension_for/&quot;&gt;Reddit post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mullvad.net/en&quot;&gt;The Mullvad VPN site&lt;/a&gt; - &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1nhe6t6/mullvad_vpn_uses_sveltekit_for_their_site/&quot;&gt;Reddit post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0hy7PCbXyqs&quot;&gt;Introducing SvelteKit Remote Functions&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=z0f7NLPdLYE&quot;&gt;SvelteKit Remote Functions tips: Auth guards, managing async, query.batch&lt;/a&gt; by Simon Holthausen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=B2MhkPtBWs4&quot;&gt;The Complete Svelte 5 Course For The Most Loved JavaScript Framework&lt;/a&gt; by Joy of Code (3+ hours of excellent content). Text version available &lt;a href=&quot;https://joyofcode.xyz/learn-svelte&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=d0RPeuC4JL8&quot;&gt;Translate your Svelte and SvelteKit applications the easy way - full tutorial&lt;/a&gt; by Code with Stanislav&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://khromov.se/how-and-why-i-built-an-mcp-server-for-svelte/&quot;&gt;How and why I built an MCP server for Svelte&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://share.transistor.fm/s/a5f8c4c6&quot;&gt;Svelte Radio&lt;/a&gt; is back! Feat. Kevin, Brittney and Antony&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PHk7YFAFvfg&quot;&gt;Ep. 115&lt;/a&gt; — Changelog review&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sTepLQwJIVo&quot;&gt;Ep. 116&lt;/a&gt; — e18e.dev and NPM&amp;rsquo;s supply chain attack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=E0xQXa4qQGY&quot;&gt;Ep. 117&lt;/a&gt; — Formisch&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eBXjXfUiuiA&quot;&gt;Ep. 118&lt;/a&gt; — Changelog review&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Svelte London - September 2025&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;https://www.youtube.com/watch?v=odCWAAaTNSQ&quot;&gt;watch the full video on YouTube&lt;/a&gt; or skip to the specific talks below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/odCWAAaTNSQ?si=2Eej24zu2ZXUEljs&amp;t=412&quot;&gt;Svelte on Cloudflare: Tips and guide&lt;/a&gt; by Mark Ridge and Connor Adams&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/odCWAAaTNSQ?si=4Eyh2SUwA26waECz&amp;t=2563&quot;&gt;Ultra-low Latency in SvelteKit&lt;/a&gt; by Scott Phillips&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1niyflq/sharing_some_custom_components_that_handle_async/&quot;&gt;Sharing some custom components that handle async state with less boilerplate in Svelte 5&lt;/a&gt; by u/geokidev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/GauBen/svelte-emails&quot;&gt;Rendering emails with Svelte&lt;/a&gt; by Gautier Ben Aïm&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://samuelplumppu.se/blog/keystatic-sveltekit-markdoc&quot;&gt;Integrate Keystatic CMS with SvelteKit to render Markdoc Content with Interactive Svelte Components&lt;/a&gt; by Samuel Plumppu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GsjfEmTS4x8&quot;&gt;Svelte Under The Hood&lt;/a&gt; by ~/in-depth&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;UI / UX&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svar-widgets&quot;&gt;SVAR Svelte v2.3&lt;/a&gt; now has TypeScript definitions to all its open-source Svelte UI components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@dnd-kit-svelte/svelte&quot;&gt;@dnd-kit&lt;/a&gt; is a lightweight React-like library for building performant and accessible drag and drop experiences&lt;/li&gt;
&lt;li&gt;svelte-overflow-fade is a Svelte action and attachment for adding beautiful fade effects to overflowing content&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dellamora/scratch-to-reveal-svelte&quot;&gt;scratch-to-reveal-svelte&lt;/a&gt; is a simple and customizable scratch-to-reveal component for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-streamdown.beynar.workers.dev/&quot;&gt;Svelte Streamdown&lt;/a&gt; is a Svelte port of Streamdown by Vercel - an all in one markdown renderer, designed specifically for AI-powered streaming applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://usal.dev/&quot;&gt;USAL JS&lt;/a&gt; is the &amp;ldquo;Ultimate Scroll Animation Library&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Frameworks and Data Tools&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tbocek/preveltekit&quot;&gt;PrevelteKit&lt;/a&gt; is a lightweight, high-performance web application framework built on Svelte 5, featuring Server-Side Pre Rendering (SSPR) using Rsbuild and jsdom&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://apollo-runes-docs.vercel.app/&quot;&gt;Apollo Runes&lt;/a&gt; is an Apollo Client for Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/fabian-hiller/formisch&quot;&gt;Formisch&lt;/a&gt; is a schema-based, headless form library for JS frameworks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/marcomuser/conformal&quot;&gt;Conformal&lt;/a&gt; helps you work with native FormData by providing type-safe form submissions for the modern web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://astro.build&quot;&gt;Astro&lt;/a&gt;, already supporting async Svelte out of the box, added support for server-rendered async Svelte in the &lt;a href=&quot;https://astro.build/blog/astro-5140/#async-rendering-support-for-svelte&quot;&gt;5.14 release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/techniq/layerchart/releases/tag/layerchart%402.0.0-next.39&quot;&gt;LayerChart&lt;/a&gt; had a packed update and introduced (among other things) a &amp;ldquo;vanilla CSS&amp;rdquo; (Tailwind opt-in) mode and support for other UI frameworks, and now also works in the &lt;a href=&quot;https://svelte.dev/playground/c5e73cb55a0045cca83e74b5cdfa3b65?version=5.39.6&quot;&gt;Svelte REPL / playground&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Greenheart/keystatic-sveltekit&quot;&gt;keystatic-sveltekit&lt;/a&gt; is a convenient way to integrate the open source Git-based Keystatic CMS with SvelteKit, featuring Markdoc content with interactive Svelte components and a modern editing UX&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Dev Tools and Vite Plugins&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wuchalejs/wuchale&quot;&gt;wuchale&lt;/a&gt; is a compile-time internationalization (i18n) toolkit that requires zero code changes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/sv-console&quot;&gt;SV Floating Console&lt;/a&gt; is a floating console for Svelte applications that only appears in development mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/propolies/magicons&quot;&gt;magicons&lt;/a&gt; is a fast, typesafe Icon wrapper that fixes bundling issues with large barrel exports in icon libraries&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-pops.vercel.app/docs/overview&quot;&gt;Svelte-pops&lt;/a&gt; is a performant and easy to use popover manager for creating dialog and tooltips&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hanielu/vite-plugin-svelte-inline-component&quot;&gt;vite-plugin-svelte-inline-component&lt;/a&gt; lets you write tiny Svelte components straight inside your JavaScript / TypeScript tests using tagged‑template literals&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KiraPC/vite-plugin-sveltekit-decorators&quot;&gt;vite-plugin-sveltekit-decorators&lt;/a&gt; is a powerful Vite plugin that automatically decorates SvelteKit functions with customizable wrappers for logging, analytics, error handling, and more&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: September 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-september-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;In case you missed it, the main Svelte blog covered how to use &lt;a href=&quot;https://svelte.dev/blog/sveltekit-integrated-observability&quot;&gt;SvelteKit&amp;rsquo;s new OpenTelemetry traces&lt;/a&gt; to reliably set up observability instrumentation using instrumentation.server.ts. This month&amp;rsquo;s round up covers that release and a few other features that rolled out before and after it.&lt;/p&gt;
&lt;p&gt;Plenty in the showcase, as well, so let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-and-Svelte-CLI-(sv)&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte and Svelte CLI (sv)&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-and-Svelte-CLI-(sv)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;await&lt;/code&gt; is now allowed inside &lt;code&gt;@const&lt;/code&gt; declarations (&lt;strong&gt;svelte@5.38.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/svelte/await&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/16542&quot;&gt;#16542&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;sv add&lt;/code&gt; command has been updated to remove the &lt;code&gt;--no-preconditions&lt;/code&gt; and add &lt;code&gt;--no-git-check&lt;/code&gt;. With this new flag, even if some files are dirty, no prompt will be shown (&lt;strong&gt;sv@0.9.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/cli/sv-add&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/650&quot;&gt;#650&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit-and-its-adapters&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit and its adapters&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-and-its-adapters&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Deno is now supported as a supported package manager (&lt;strong&gt;sveltejs/adapter-auto@6.1.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/14163&quot;&gt;#14163&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new &lt;code&gt;instrumentation.server.ts&lt;/code&gt; adds tracing and observability setup (&lt;strong&gt;sveltejs/adapter-node@5.3.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/observability&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13899&quot;&gt;#13899&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;--preserve-output&lt;/code&gt; flag prevents deletion of the output directory before packaging (&lt;strong&gt;sveltejs/package@2.5.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/packaging&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13055&quot;&gt;#13055&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of bug fixes in Svelte, SvelteKit and its adapters, check out their CHANGELOGs &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://apps.apple.com/us/app/pollinate-pollen-forecast/id6749463028&quot;&gt;Pollinate&lt;/a&gt; provides accurate forecasts designed for allergy sufferers who want to plan their day, or vacation, around pollen levels (Check out the &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1mk05ym/mobile_app_made_with_svelte_5_capacitor/&quot;&gt;Reddit post&lt;/a&gt; on how it was built)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ferndesk.com/&quot;&gt;Ferndesk&lt;/a&gt; is a help center that is kept up to date automatically (the creator shared their demo on the &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1mqe9ez/i_built_a_tool_that_keeps_your_help_center_up_to/&quot;&gt;Svelte Reddit&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wplace.live/&quot;&gt;Wplace&lt;/a&gt; lets you paint whatever you want on a map of the world&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Scorpio3310/domain-watcher&quot;&gt;Domain Watcher&lt;/a&gt; is a domain availability monitor and expiration tracker built with SvelteKit &amp;amp; Cloudflare Workers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://trymotley.com/&quot;&gt;Motley&lt;/a&gt; is a local-first bookmarking/moodboard app&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tallyho.app/&quot;&gt;TallyHo&lt;/a&gt; is a simple time tracking for freelancers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.getmenuscan.app/&quot;&gt;MenuScan&lt;/a&gt; lets you take a picture of any restuarant menu and get access to the calorie and macro counts for each item&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vibechecked.app/&quot;&gt;Vibe Check&lt;/a&gt; provides quick, honest diagnostics for AI‑built apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joyful.to/&quot;&gt;Joyful&lt;/a&gt; is a simple way to write, design, and send beautiful newsletters&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eaglecite.com/&quot;&gt;Eagle Cite&lt;/a&gt; lets you highlight, organize, and search your citations in one place&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://volkara.stormlightlabs.org/&quot;&gt;Volkara&lt;/a&gt; is a set of ADHD-Friendly Productivity Tools&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://simplemanarchive.com/&quot;&gt;Simple Man Archive&lt;/a&gt; is an ASCII art archive where anyone can contribute by creating unique ASCII art&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thirtycalendar/thirty&quot;&gt;Thirty&lt;/a&gt; is an open-source AI calendar built on familiar foundations&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://time.tem.dev/&quot;&gt;Timezones&lt;/a&gt; quickly shows and converts timezones across many locations&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://lihautan.com/compile-svelte-5-in-your-head&quot;&gt;Compile Svelte 5 in your head&lt;/a&gt; by Tan Li Hau&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0hy7PCbXyqs&quot;&gt;Introducing SvelteKit Remote Functions&lt;/a&gt; by Simon Holthausen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1mju9yj/new_features_in_the_svelte_mcp_server_directly/&quot;&gt;The Svelte MCP server&lt;/a&gt; now allows you to directly reference documentation sections, and prompt templates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GQLgq09-knM&quot;&gt;Ep. 112&lt;/a&gt; — Storybook for Svelte Part 1&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aerlBIuinFQ&quot;&gt;Ep. 113&lt;/a&gt; — Storybook for Svelte Part 2 - Docs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FnUWuLQDCfM&quot;&gt;Ep. 114&lt;/a&gt; — Changelog Review&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.blog/open-source/maintainers/securing-the-supply-chain-at-scale-starting-with-71-important-open-source-projects/&quot;&gt;Securing the supply chain at scale: Starting with 71 important open source projects&lt;/a&gt; by GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1mjqq3t/update_epicenter_yc_s25_just_sponsored_our_first/&quot;&gt;Epicenter (YC S25)&lt;/a&gt; is sponsoring Svelte maintainers to spend their time half pushing local-first OSS forward with Epicenter and half building their dream projects&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://minosiants.com/blog/two-project&quot;&gt;Project Two: Creating Mobile app using Tauri + Svelte&lt;/a&gt; by Kaspar Minosiants&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brandonma.dev/blog/animejs-svelte/&quot;&gt;Ways to use Anime.js with Svelte&lt;/a&gt; by Brandon Ma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sh4jid.me/blog/svelte-markdown-and-the-magic-of-web-components&quot;&gt;Svelte, Markdown, and the Magic of Web Components&lt;/a&gt; by Shajid Hasan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Xbdiwq_88iE&quot;&gt;SvelteKit Remote Functions are INSANE! Type-Safe Full Stack in Minutes&lt;/a&gt; by Tyler Codes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ZZaExhqW5II&quot;&gt;Deploy a SvelteKit Application to Cloudflare Workers with Drizzle &amp;amp; D1&lt;/a&gt; by Jilles Soeters&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Hugo-Dz/exe&quot;&gt;EXE&lt;/a&gt; is a build tool to distribute your full-stack web app as a single executable binary with zero runtime dependencies&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rodrigodagostino/svelte-sortable-list&quot;&gt;Svelte Sortable List&lt;/a&gt; is a comprehensive package for creating accessible, sortable lists in Svelte applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/BlueprintLabIO/markdown-ui&quot;&gt;Markdown UI&lt;/a&gt; turns static docs into interactive experiences - instantly&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tarkui.com/&quot;&gt;Tark UI&lt;/a&gt; provides beautiful UI components built with Ark UI and Tailwind&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ticatec/uniface-element&quot;&gt;Uniface Element&lt;/a&gt; is a comprehensive enterprise-grade UI component library built with Svelte 5, designed for modern web applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/aker-dev/microfolio&quot;&gt;microfolio&lt;/a&gt; is a modern static portfolio generator featuring a file-based content management system using folders and Markdown files&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.keycloakify.dev/&quot;&gt;Keycloakify&lt;/a&gt; is a tool for creating custom Keycloak themes, enabling you to modify the appearance and behavior of Keycloak&amp;rsquo;s user interfaces&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/podosoft-dev/pdjsoneditor&quot;&gt;PDJsonEditor&lt;/a&gt; is a powerful JSON visualization and editing tool with both a code editor and interactive graph views&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/retrotheft/show-and-svelte&quot;&gt;Show &amp;amp; Svelte&lt;/a&gt; lets you create fully interactive presentations with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wuchalejs/wuchale&quot;&gt;wuchale&lt;/a&gt; is a compile-time internationalization (i18n) toolkit that requires zero code changes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/harshmandan/svelte-overflow-fade?tab=readme-ov-file&quot;&gt;svelte-overflow-fade&lt;/a&gt; is a Svelte action and attachment for adding beautiful fade effects to overflowing content&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/formshape&quot;&gt;formshape&lt;/a&gt; is a type-safe form validation for SvelteKit Remote Functions using Standard Schema compatible validators&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hanielu/vite-plugin-svelte-inline-component&quot;&gt;vite-plugin-svelte-inline-component&lt;/a&gt; lets you write tiny Svelte components straight inside your JavaScript / TypeScript tests using tagged‑template literals.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KiraPC/vite-plugin-sveltekit-decorators&quot;&gt;vite-plugin-sveltekit-decorators&lt;/a&gt; is a Vite plugin that automatically decorates SvelteKit functions with customizable wrappers for logging, analytics, error handling, and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ruben-sprengel/jetbrains-svelte-templates&quot;&gt;jetbrains-svelte-templates&lt;/a&gt; is a compact collection of Live Templates for JetBrains IDEs (like WebStorm and IntelliJ IDEA Ultimate) designed to speed up your Svelte &amp;amp; SvelteKit development&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Introducing integrated observability in SvelteKit</title><link>https://svelte.dev/blog/sveltekit-integrated-observability</link><author>Elliott Johnson</author><description>&lt;p&gt;Understanding how your SvelteKit application behaves in production — from request flows to performance bottlenecks — is crucial for building reliable user experiences. SvelteKit now has first-class support for observability: built-in &lt;a href=&quot;https://opentelemetry.io/&quot;&gt;OpenTelemetry&lt;/a&gt; tracing, and a dedicated instrumentation setup file that ensures your monitoring tools work seamlessly.&lt;/p&gt;
&lt;p&gt;To opt in, upgrade SvelteKit and your adapter and add the following to your &lt;code&gt;svelte.config.js&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.js&quot;&gt;svelte.config&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;kit&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;experimental&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;tracing&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt; &lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;instrumentation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;kit&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;experimental&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;tracing&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;instrumentation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;experimental&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;tracing&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;tracing&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;				&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;server&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;instrumentation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;instrumentation&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;				&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;server&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;server&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;First-party-OpenTelemetry-traces&quot;&gt;&lt;span&gt;First-party OpenTelemetry traces&lt;/span&gt;&lt;a href=&quot;#First-party-OpenTelemetry-traces&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit can now emit &lt;a href=&quot;https://opentelemetry.io&quot;&gt;OpenTelemetry&lt;/a&gt; traces for the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/hooks#Server-hooks-handle&quot;&gt;&lt;code&gt;handle&lt;/code&gt;&lt;/a&gt; hook (&lt;code&gt;handle&lt;/code&gt; functions running in a &lt;a href=&quot;/docs/kit/@sveltejs-kit-hooks#sequence&quot;&gt;&lt;code&gt;sequence&lt;/code&gt;&lt;/a&gt; will show up as children of each other and the root handle hook)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/load&quot;&gt;&lt;code&gt;load&lt;/code&gt;&lt;/a&gt; functions (includes universal &lt;code&gt;load&lt;/code&gt; functions when they run on the server)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/form-actions&quot;&gt;Form actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/remote-functions&quot;&gt;Remote functions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The emitted spans include attributes describing the current request, such as &lt;code&gt;http.route&lt;/code&gt;, and surrounding context, such as the &lt;code&gt;+page&lt;/code&gt; or &lt;code&gt;+layout&lt;/code&gt; file associated with a &lt;code&gt;load&lt;/code&gt; function. If there are additional attributes you think might be useful, please file an issue on the &lt;a href=&quot;https://github.com/sveltejs/kit/issues&quot;&gt;SvelteKit GitHub issue tracker&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;A-convenient-home-for-all-of-your-instrumentation&quot;&gt;&lt;span&gt;A convenient home for all of your instrumentation&lt;/span&gt;&lt;a href=&quot;#A-convenient-home-for-all-of-your-instrumentation&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Emitting traces alone is not enough: You also need to collect them and send them somewhere. Under normal circumstances, this can be a bit challenging. Because of the nature of observability instrumentation, it needs to be loaded prior to loading any of the code from your app. To aid in this, SvelteKit now supports a &lt;code&gt;src/instrumentation.server.ts&lt;/code&gt; file which, assuming your adapter supports it, is guaranteed to be loaded prior to your application code.&lt;/p&gt;
&lt;p&gt;In Node, your instrumentation might look something like this:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;NodeSDK&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;NodeSDK&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;@opentelemetry/sdk-node&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;getNodeAutoInstrumentations&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;getNodeAutoInstrumentations&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;@opentelemetry/auto-instrumentations-node&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;OTLPTraceExporter&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;OTLPTraceExporter&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;@opentelemetry/exporter-trace-otlp-proto&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;createAddHookMessageChannel&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;createAddHookMessageChannel&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;import-in-the-middle&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;register&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Data&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(specifier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;URL&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;parentURL&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;URL&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;options&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Module&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RegisterOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Register a module that exports hooks that customize Node.js module
resolution and loading behavior. See
&lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/module.html#customization-hooks&quot;&gt;Customization hooks&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@since&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;v20.6.0, v18.19.0&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;specifier&lt;/span&gt; Customization hooks to be registered; this should be
the same string that would be passed to &lt;code&gt;import()&lt;/code&gt;, except that if it is
relative, it is resolved relative to &lt;code&gt;parentURL&lt;/code&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;parentURL&lt;/span&gt; f you want to resolve &lt;code&gt;specifier&lt;/code&gt; relative to a base
URL, such as &lt;code&gt;import.meta.url&lt;/code&gt;, you can pass that URL here.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;register&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;module&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;registerOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;registerOptions&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;createAddHookMessageChannel&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;createAddHookMessageChannel&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;register&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(specifier: string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;URL&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;parentURL&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;URL&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;options&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Module&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.RegisterOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;):&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;overload)&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Register a module that exports hooks that customize Node.js module
resolution and loading behavior. See
&lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/module.html#customization-hooks&quot;&gt;Customization hooks&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@since&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;v20.6.0, v18.19.0&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;specifier&lt;/span&gt; Customization hooks to be registered; this should be
the same string that would be passed to &lt;code&gt;import()&lt;/code&gt;, except that if it is
relative, it is resolved relative to &lt;code&gt;parentURL&lt;/code&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;parentURL&lt;/span&gt; f you want to resolve &lt;code&gt;specifier&lt;/code&gt; relative to a base
URL, such as &lt;code&gt;import.meta.url&lt;/code&gt;, you can pass that URL here.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;register&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;import-in-the-middle/hook.mjs&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;meta&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;ImportMeta&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.url: string&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;The absolute &lt;code&gt;file:&lt;/code&gt; URL of the module.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;url&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;registerOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;registerOptions&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;sdk&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;sdk&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;NodeSDK&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;NodeSDK&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;serviceName&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;serviceName&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;my-sveltekit-app&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;traceExporter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;traceExporter&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;OTLPTraceExporter&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;OTLPTraceExporter&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;instrumentations&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any[]&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;instrumentations&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;getNodeAutoInstrumentations&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;getNodeAutoInstrumentations&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;sdk&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;sdk&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you&amp;rsquo;re deploying to Vercel, it would look something like this:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;registerOTel&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;registerOTel&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;@vercel/otel&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;registerOTel&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;registerOTel&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;serviceName&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;serviceName&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;my-sveltekit-app&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Consult your platform&amp;rsquo;s documentation for specific instrumentation instructions. As of now, all of the official SvelteKit adapters with a server component (sorry, &lt;code&gt;adapter-static&lt;/code&gt;) support &lt;code&gt;instrumentation.server.ts&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;Acknowledgements&quot;&gt;&lt;span&gt;Acknowledgements&lt;/span&gt;&lt;a href=&quot;#Acknowledgements&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A huge thank-you to Lukas Stracke, who kicked us off on this adventure with his excellent &lt;a href=&quot;https://www.youtube.com/watch?v=hFVmFAyB_YA&quot;&gt;talk at Svelte Summit 2025&lt;/a&gt; and his initial draft PR for &lt;code&gt;instrumentation.server.ts&lt;/code&gt;. Another thank-you to &lt;a href=&quot;https://sentry.io/welcome/&quot;&gt;Sentry&lt;/a&gt; for allowing him to spend his working hours reviewing and testing our work.&lt;/p&gt;</description><pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: August 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-august-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;With &lt;a href=&quot;https://github.com/sveltejs/svelte/discussions/15845&quot;&gt;Async Svelte&lt;/a&gt; and its companion &lt;a href=&quot;https://github.com/sveltejs/kit/discussions/13897&quot;&gt;Remote Functions&lt;/a&gt; officially out in the world, there&amp;rsquo;s a lot of updates to share!&lt;/p&gt;
&lt;p&gt;Be sure to check out the showcase for videos from Rich, Paolo, and Stanislav about all the brand new features in Svelte.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive into the highlights...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-SvelteKit-Language-Tools-and-CLI-(sv)&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte, SvelteKit, Language Tools and CLI (sv)&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-SvelteKit-Language-Tools-and-CLI-(sv)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Remote functions can be called anywhere in your app, but always run on the server, and as such can safely access server-only modules containing things like environment variables and database clients (&lt;strong&gt;kit@2.27.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/remote-functions&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13986&quot;&gt;#13986&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getAbortSignal&lt;/code&gt; returns an &lt;code&gt;AbortSignal&lt;/code&gt; that aborts when the current derived or effect re-runs or is destroyed (&lt;strong&gt;svelte@5.35.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/svelte/svelte#getAbortSignal&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/16266&quot;&gt;#16266&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new &lt;code&gt;parent&lt;/code&gt; property has been added to the &lt;code&gt;__svelte_meta&lt;/code&gt; properties that are added to elements at dev time - useful for debugging nested hierarchies (&lt;strong&gt;svelte@5.35.1&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/16255&quot;&gt;#16255&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;await&lt;/code&gt; is now supported in components when using the &lt;code&gt;experimental.async&lt;/code&gt; compiler option (&lt;strong&gt;svelte@5.36.0/extensions@109.10.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/svelte/await-expressions&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15844&quot;&gt;#15844&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;There are now types for the &lt;code&gt;params&lt;/code&gt; prop and &lt;code&gt;page&lt;/code&gt; attributes in page/layout components (&lt;strong&gt;kit@2.24.0, kit@2.26.0 &amp;amp; extensions@109.10.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13999&quot;&gt;#13999&lt;/a&gt; / &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13864&quot;&gt;#13864&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit&amp;rsquo;s &lt;code&gt;read&lt;/code&gt; now works in edge environments where &lt;code&gt;fs.readFile&lt;/code&gt; isn&amp;rsquo;t available such as in Cloudflare&amp;rsquo;s workers, Netlify, and Vercel&amp;rsquo;s edge functions (&lt;strong&gt;kit@2.25.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13859&quot;&gt;#13859&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;resolve(...)&lt;/code&gt; and &lt;code&gt;asset(...)&lt;/code&gt; helpers have been added for resolving paths (&lt;strong&gt;kit@2.26.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13864&quot;&gt;#13864&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Support for modern SvelteKit prop typings has been added to VS Code snippets (&lt;strong&gt;extensions-109.10.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2796&quot;&gt;#2796&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;vite.addPlugin&lt;/code&gt; simplifies adding a plugin on various vite config styles (&lt;strong&gt;sv@0.8.20&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/633&quot;&gt;#633&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;vite-plugin-svelte is out with support for vite7, rolldown-vite and &lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/CHANGELOG.md&quot;&gt;more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of bug fixes in Svelte, SvelteKit and its adapters, check out their CHANGELOGs &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1m991ts/the_logitech_site_is_built_with_svelte/&quot;&gt;Logitech&amp;rsquo;s new site&lt;/a&gt; is built in Svelte 🎉&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hend.world/&quot;&gt;hend.world&lt;/a&gt; is a language learning application that surrounds you with comprehensible input: compelling stories, articles, and videos that match your level&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sm17p/amgiflol&quot;&gt;Amgiflol&lt;/a&gt; is a Figma-like Layout Inspector For Web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://formcord.app/&quot;&gt;Formcord&lt;/a&gt; is a Google Forms alternative built specifically for Discord communities&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freq.social/&quot;&gt;Freq&lt;/a&gt; is a community-based social media platform for groups of music listeners to share, talk about, and enjoy music together&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://salora.app/&quot;&gt;Salora&lt;/a&gt; is a salon booking application (de)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://anxpara.com/animalwellshrine&quot;&gt;Animal Well Shrine&lt;/a&gt; is an low-spoiler egg tracker for the video game, Animal Well&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.typinggym.com/&quot;&gt;TypingGym&lt;/a&gt; is a typing practice site with automatic difficulty adjustment&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=e-1pVKUWlOQ&quot;&gt;promise.then(...)&lt;/a&gt; by Rich Harris - what&amp;rsquo;s next now that Svelte is Async&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/kL4Tp8RmJwo&quot;&gt;Asynchronous Svelte&lt;/a&gt; with Rich Harris by CodeTV (Jason Lengstorf)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=BID8r5LObvI&quot;&gt;Remote Functions are coming to SvelteKit - and they are amazing!&lt;/a&gt; by Code with Stanislav&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LKSmlp2S-jQ&quot;&gt;Svelte London - June 2025&lt;/a&gt; feat. &amp;ldquo;Svelte, svelte everywhere&amp;rdquo; by Paolo Ricciuti and &amp;ldquo;Testing your Svelte app in an actual browser&amp;rdquo; by Willow / Scott&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Sp4Y1tMo5AQ&quot;&gt;Ep. 108&lt;/a&gt; — Svelte Flow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LghoZmFzWYM&quot;&gt;Ep. 109&lt;/a&gt; — Ark UI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Ia8N6S2OkpM&quot;&gt;Ep. 110&lt;/a&gt; — Neodrag v3&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fExlOwTtZqM&quot;&gt;Ep. 111&lt;/a&gt; — Best LLMs for Svelte 5 tested, MCP server, llms.txt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Svienna (Svelte Society Vienna)&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=hptgxIdnDdg&quot;&gt;Lightning talk 10 tips in 5 mins!&lt;/a&gt; by Jean Yves Couet&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pDx1a078in8&quot;&gt;Using SvelteKit and MIT appinventor to inspire young girls for tech&lt;/a&gt; by Domenik Reitzner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A3cqzv-zRe8&quot;&gt;Adding full to your full stack SvelteKit app&lt;/a&gt; by Jean Yves Couet&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0sm4oPwvPVU&quot;&gt;ZeeltePHP (Svelte + PHP)&lt;/a&gt; by derharry&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aJVdfPk9WmI&quot;&gt;Svelte at Geizhals&lt;/a&gt; by Martin Grubinger&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch/Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=H3Mk6ozq69U&quot;&gt;Build a SvelteKit Admin App with Drizzle, Tailwind &amp;amp; Postgres&lt;/a&gt; by Tyler Codes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Vhfcgnt5nO8&quot;&gt;Master Svelte in 15 Minutes: From React Dev to Svelte Pro&lt;/a&gt; by Neuronfire&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.matsimon.dev/blog/simple-skeleton-loaders&quot;&gt;Simple but Effective Skeleton Loaders&lt;/a&gt; by Mat Simon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.puruvj.dev/blog/svelte-5-interval-rune&quot;&gt;Building Smart Intervals with Svelte 5&lt;/a&gt; by Puru VJ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PuruVJ/svelte-interval&quot;&gt;Svelte Interval&lt;/a&gt; is a comprehensive Svelte utility package for managing intervals with reactive durations, synchronization, and advanced control features&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/HanielU/svelte-router&quot;&gt;@hvniel/svelte-router&lt;/a&gt; is a Svelte 5 port of React Router&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hanielu/vite-plugin-svelte-inline-component&quot;&gt;@hvniel/vite-plugin-svelte-inline-component&lt;/a&gt; lets you write tiny Svelte components straight inside your JavaScript / TypeScript tests using tagged‑template literals&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wuchalejs/wuchale&quot;&gt;wuchale&lt;/a&gt; is a non-invasive, normal code based compile-time internationalization (i18n) toolkit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/meursyphus/ssgoi&quot;&gt;SSGOI&lt;/a&gt; brings native app-like page transitions to the web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/moalamri/svelte-form-builder&quot;&gt;Svelte Form Builder&lt;/a&gt; is a modern, drag-and-drop form builder built with Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MacFJA/svelte-persistent-runes?tab=readme-ov-file#svelte-persistent-runes&quot;&gt;Svelte persistent runes&lt;/a&gt; provides a Svelte reactive rune that keep its value through pages and reloads&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lelabdev/gositemap&quot;&gt;gositemap&lt;/a&gt; is a fast, test-driven sitemap.xml generator for static SvelteKit sites&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: July 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-july-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;Whether you&amp;rsquo;re trying out Vite 7, vitest browser mode or &lt;a href=&quot;https://github.com/sveltejs/kit/discussions/13897&quot;&gt;remote functions&lt;/a&gt;, there&amp;rsquo;s lots of experimental features to try this month.&lt;/p&gt;
&lt;p&gt;Want some Svelte swag while you&amp;rsquo;re chatting on Discord? With the new &lt;code&gt;sv ⚡&lt;/code&gt; &lt;a href=&quot;https://support.discord.com/hc/en-us/articles/31444248479639-Server-Tags#h_01JT6VKRACHQADX7EBXR84QTAQ&quot;&gt;server tag&lt;/a&gt;, you do just that. While signed into Discord, you can adopt our tag via profile settings.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a bunch to cover, from blog posts to new libraries, so let&amp;rsquo;s dive in...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-and-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte and SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-and-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$inspect.trace&lt;/code&gt; now includes source name logging to make it easy to find which file the log came from (&lt;strong&gt;svelte@5.34.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/svelte/$inspect#$inspect.trace()&quot;&gt;Docs&lt;/a&gt;, #&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/16060&quot;&gt;16060&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The latest version of SvelteKit now supports Vite 7 and Rolldown. Compilation should be faster using Rolldown, but with larger bundle sizes until additional tree-shaking is implemented in Rolldown (&lt;strong&gt;kit@2.22.0&lt;/strong&gt;, &lt;a href=&quot;https://vite.dev/guide/rolldown.html#how-to-try-rolldown&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13747&quot;&gt;#13747&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of bug fixes in Svelte, SvelteKit and its adapters, check out their CHANGELOGs &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-the-CLI-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in the CLI and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-the-CLI-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;sv&lt;/code&gt; CLI now supports Vite&amp;rsquo;s browser mode in Vitest - allowing you to run your tests in the browser natively (&lt;strong&gt;cli@0.8.12&lt;/strong&gt;, &lt;a href=&quot;https://vitest.dev/guide/browser/&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/588&quot;&gt;#588&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The language server now makes it easier to search for symbol names (&lt;code&gt;Ctrl + T&lt;/code&gt; in VSCode). Some of the handling is also synced to the Svelte TypeScript plugin so that it&amp;rsquo;s more consistent, which also means vscode can better deduplicate the results from both tsserver and Svelte language server (&lt;strong&gt;extensions@109.9.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2769&quot;&gt;#2769&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://planet-poster.vercel.app/&quot;&gt;Planet Poster&lt;/a&gt; is an interactive art work inspired by a poster of, you guessed it, planets&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flo-bit.dev/roomy-worlds/&quot;&gt;roomy-worlds&lt;/a&gt; lets you create small 3d worlds and share/edit with your community&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.prodcastapp.com/&quot;&gt;Prodcast&lt;/a&gt; lets you discover products curated from your favorite podcasts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.distillintelligence.com/&quot;&gt;Distill&lt;/a&gt; automates company and industry monitoring with all news, updates, and summarized insights in one place&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tglide/thom-chat&quot;&gt;thom.chat&lt;/a&gt; is an open-source alternative/clone to T3 Chat&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jhwz/visual-source&quot;&gt;Visual Source&lt;/a&gt; is a GUI for managing your projects design tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.puruvj.dev/blog/svelte-5-runic-persist-theming&quot;&gt;Type-Safe Persistence and Auto-Theming in Svelte 5&lt;/a&gt; by Puru VJ&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ricciuti.me/blog/effect-is-fine-but-proxies-are-better&quot;&gt;$effect is fine but proxies are better&lt;/a&gt; and &lt;a href=&quot;https://mainmatter.com/blog/2025/06/25/web-components-with-svelte/?utm_source=svelte_newsletter&amp;utm_medium=social&amp;utm_campaign=25-06-26-how-to-build-web-components-with-svelte&quot;&gt;How to build Web Components with Svelte&lt;/a&gt; by Paolo Ricciuti&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_7_8HKvee8M&quot;&gt;Ep. 106&lt;/a&gt; — Changelog&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Ijb8l9XEz2g&quot;&gt;Ep. 107&lt;/a&gt; — svelte-lexical&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch/Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltest.dev/docs/getting-started&quot;&gt;Sveltest&lt;/a&gt; is a guide to set up testing for Svelte 5 applications using the experimental vitest-browser-svelte library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://director.design/chapters/playful-onboarding&quot;&gt;A Playful Onboarding: Your first interactive animation from A to Z&lt;/a&gt; by Director.design&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scottspence.com/posts/migrating-from-testing-library-svelte-to-vitest-browser-svelte&quot;&gt;Migrating from @testing-library/svelte to vitest-browser-svelte&lt;/a&gt; by Scott Spence&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://freedium.cfd/https://javascript.plainenglish.io/why-silicon-valley-ctos-are-secretly-moving-away-from-react-bdf64f0b6072&quot;&gt;Why Silicon Valley CTOs Are Secretly Moving Away from React&lt;/a&gt; by Freedium&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.robino.dev/posts/async-local-storage&quot;&gt;Async Local Storage&lt;/a&gt; by Ross Robino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mainmatter.com/events/?utm_source=svelte_newsletter&amp;utm_medium=social&amp;utm_campaign=25-06-25-how-to-build-web-components-with-svelte&quot;&gt;Mainmatter&lt;/a&gt; has a bunch of Svelte workshops in July so be sure to check those out!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://shadcn-svelte.com/&quot;&gt;shadcn-svelte v1&lt;/a&gt; - after 11 months in pre-release (@next), shadcn-svelte has officially hit v1.0. Congrats!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/quaffui/quaff&quot;&gt;Quaff&lt;/a&gt; is a component library for Svelte that follows the Material Design 3 guidelines&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.puruvj.dev/blog/neodrag-v3-alpha&quot;&gt;Neodrag v3&lt;/a&gt; Alpha is out with multi-framework adapters, event delegation and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-polaris-docs.storebud.workers.dev/&quot;&gt;Svelte Polaris&lt;/a&gt; is port of Shopify&amp;rsquo;s design system to build Shopify apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://originui-svelte.pages.dev/&quot;&gt;Origin UI&lt;/a&gt; is a collection of copy-and-paste components for quickly build application UIs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/StudentOfJS/svelte5-mcp&quot;&gt;Svelte 5 MCP Server&lt;/a&gt; is a specialized Model Context Protocol (MCP) server for Svelte 5 frontend development&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://razshare.github.io/frizzante-docs/guides/get-started/&quot;&gt;Frizzante&lt;/a&gt; is a minimalistic and opinionated web server framework written in Go that uses Svelte to render pages&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://storybook.js.org/blog/storybook-9/&quot;&gt;Storybook 9&lt;/a&gt; is out now and includes updates to the Svelte CSF story format to support Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mainmatter/sheepdog&quot;&gt;Sheepdog&lt;/a&gt; supplies a simple way to introduce cancellable concurrency into your app&lt;/li&gt;
&lt;li&gt;Flowbite Svelte now has &lt;a href=&quot;https://flowbite-svelte.com/docs/plugins/datatables&quot;&gt;datatable&lt;/a&gt; and &lt;a href=&quot;https://flowbite-svelte.com/docs/plugins/wysiwyg&quot;&gt;text editor (WYSIWYG)&lt;/a&gt; components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ark-ui.com/&quot;&gt;Ark UI&lt;/a&gt;, a headless UI library, now has a Svelte version&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svar.dev/svelte/filter/&quot;&gt;SVAR Svelte Filter&lt;/a&gt; helps you add complex filtering UI and logic to data-heavy apps like admin panels or dashboards&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: June 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-june-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;In addition to advancing the work on Async Svelte, the maintainers have been hard at work introducing long requested features like Attachments.&lt;/p&gt;
&lt;p&gt;This month, we&amp;rsquo;ll share a bit about the new API along with a huge showcase of apps/sites built with Svelte...&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-and-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte and SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-and-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Attachments are essentially a more flexible and modern version of actions. Read more about their use-cases and improvements over actions in the PR (&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15000&quot;&gt;#1500&lt;/a&gt;) or in the &lt;a href=&quot;https://svelte.dev/docs/svelte/@attach&quot;&gt;Svelte docs&lt;/a&gt; (&lt;strong&gt;svelte@5.29.0&lt;/strong&gt;, &lt;strong&gt;language-tools@109.7.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Do you have actions you love and want to use them as attachments? The &lt;code&gt;fromAction&lt;/code&gt; utility lets you convert actions into attachments (&lt;strong&gt;svelte@5.32.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15933&quot;&gt;#15933&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Generics are now allowed on snippets - improving typing and type hints (&lt;strong&gt;svelte@5.30.0&lt;/strong&gt;, &lt;strong&gt;language-tools@109.8.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15915&quot;&gt;#15915&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Svelte extension will now allow you to add missing imports on save (&lt;strong&gt;language-tools@109.6.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2744&quot;&gt;#2744&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;State fields can now be declared inside class constructors (&lt;strong&gt;svelte@5.31.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15820&quot;&gt;#15820&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Svelte is now XHTML compliant and the new &lt;code&gt;fragments: &amp;#39;html&amp;#39; | &amp;#39;tree&amp;#39;&lt;/code&gt; option adds wider CSP compliance (&lt;strong&gt;svelte@5.33.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15538&quot;&gt;#15538&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Client-side code is now allowed to run at the top-level of universal pages/layouts when SSR is disabled and page options are only boolean or string literals (&lt;strong&gt;kit@2.21.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13684&quot;&gt;#13684&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of bug fixes in Svelte, SvelteKit and its adapters, check out their CHANGELOGs &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://whimsy.rocks/&quot;&gt;Whimsy&lt;/a&gt; is a small game engine and a fantasy console for making interactive stories&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dashbot.jianong.me/&quot;&gt;DASHBOT&lt;/a&gt; is a 1v1 Space Robot Sprint Battle game for two players - with local and online modes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kraa.io/&quot;&gt;Kraa&lt;/a&gt; is a web-based markdown editor that does things a little differently&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.shovel-ai.com/&quot;&gt;Shovel AI&lt;/a&gt; is a batch tool for interacting with large amounts of a text data with AI models&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://md.uy/&quot;&gt;md.uy&lt;/a&gt; is a collaborative, local-first, peer-to-peer markdown editor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bringyourai.com/&quot;&gt;BringYourAI&lt;/a&gt; is a browser extension that provides instant codebase context on any AI chat website&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joemmalatesta.com/film&quot;&gt;Joe Malatesta&lt;/a&gt; figured out a way to present his film photos in a digital environment&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://notion-avatar-svelte.vercel.app/&quot;&gt;Notion Avatar&lt;/a&gt; is a Notion-style avatar editor with Svelte 5 Runes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.orbits.so/&quot;&gt;ORBITS&lt;/a&gt; is your second brain for who you know and who you meet&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In case you missed it, &lt;a href=&quot;https://www.youtube.com/playlist?list=PL8bMgX1kyZThKy_B41FQHk_xsHMQouV1Z&quot;&gt;all the videos from Svelte Summit&lt;/a&gt; are released over the course of the next few days on Svelte Society YouTube. More on how that happened in last month&amp;rsquo;s &lt;a href=&quot;https://svelte.dev/blog/svelte-summit-videos&quot;&gt;blog post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9PREEREiPAE&quot;&gt;Svelte Attachments Are Here And They&amp;rsquo;re Awesome&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://khromov.github.io/svelte-bench/benchmark-results-merged.html&quot;&gt;SvelteBench&lt;/a&gt; (from Stanislav Khromov) shows how different AI models perform out of the box on Svelte 5 syntax - now updated with Anthropic&amp;rsquo;s new Claude 4 models&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FRcOen6JuJc&quot;&gt;First look at GitHub Copilot Coding Agent - The $40/month AI developer that actually works!&lt;/a&gt; by Stanislav Khromov (video)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mainmatter.com/blog/2025/05/22/native-apps-with-svelte/&quot;&gt;Truly Native Apps with Svelte?&lt;/a&gt; by Paolo Ricciuti&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=frp8BXlBAZY&quot;&gt;Ep. 102&lt;/a&gt; — Svelte+Lynx and Async Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=P3Ldkuksqu0&quot;&gt;Ep. 103&lt;/a&gt; — Attachments&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=txM-BCrZcbc&quot;&gt;Ep. 104&lt;/a&gt; — Skeleton v3.0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Tiq0wivUNAE&quot;&gt;Ep. 105&lt;/a&gt; — Changelog&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch/Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nQB9iRijqBY&quot;&gt;Svelte&amp;rsquo;s Next Big Change? (server components soon?)&lt;/a&gt; by Better Stack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1kaiwkk/i_spent_some_time_using_betterauth_and_polar_with/&quot;&gt;I spent some time using Better-Auth and Polar with SvelteKit and this is what I think&lt;/a&gt; by elansx&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mr19.xyz/blog/md-uy/&quot;&gt;Building md.uy - Peer-to-Peer Markdown Editor&lt;/a&gt; by mateor&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bits-ui.com&quot;&gt;Bits UI v2 released&lt;/a&gt; - with support for attachments, &lt;code&gt;$props.id()&lt;/code&gt;, Shadow DOM, and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kompismoln/composably&quot;&gt;Composably&lt;/a&gt; is a content processing plugin for Vite and SvelteKit with typed content + dynamic Svelte components at build time&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelteflow.dev/&quot;&gt;Svelte Flow is now 1.0&lt;/a&gt; - with Svelte 5 support, TSDoc and a bunch of new features to make interactive flow charts even better&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flo-bit.dev/ui-kit/&quot;&gt;fox ui&lt;/a&gt; is a collection UI components built with Tailwind 4 and Svelte 5 - now with a &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1kjwuci/currently_building_a_svelte_rich_text_editor_on/&quot;&gt;rich text editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/carlosjorger/fluid-dnd&quot;&gt;fluid-dnd&lt;/a&gt; is a drag and drop library for Vue, React and Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/humanshield-sidepack/sveltekit-password-protect&quot;&gt;sveltekit-password-protect&lt;/a&gt; is a simple utility to add a layer of protection to your websites&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/humanshield-sidepack/sveltekit-image-optimize&quot;&gt;sveltekit-image-optimize&lt;/a&gt; is a simple utility that helps you create an endpoint of your svelte app that optimizes your images&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://inspect.eirik.space/reference/panel&quot;&gt;svelte-inspect-value@0.7.0 introduces Panels&lt;/a&gt; - a fixed-position resizable panel / drawer that separates the debugging UI from flow of your website&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rtrampox/nuqs-svelte&quot;&gt;nuqs-svelte&lt;/a&gt; is an unnoficial Svelte port of nuqs library - a type-safe search params state manager&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sv-router.vercel.app/&quot;&gt;sv-router&lt;/a&gt; is a type-safe SPA router with file-based or code-based routing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/LoStis-World/svelte-textcircle&quot;&gt;svelte-textcircle&lt;/a&gt; displays text in a circular layout with customizable animations and styling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Bringing Svelte Summit to the whole community</title><link>https://svelte.dev/blog/svelte-summit-videos</link><author>The Svelte team</author><description>&lt;p&gt;This month&amp;rsquo;s &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt; in Barcelona was a glorious celebration of the community. We had lively conversations, delightful dinners, and funny, imaginative and thought-provoking talks.&lt;/p&gt;
&lt;p&gt;For everyone who couldn&amp;rsquo;t make it there in person, the conference also sold virtual tickets to the livestream, which give on-demand access to the talks. These ticket sales make it possible to (for example) hire AV technicians and ensure that the stream is reliable and high-quality. Running a conference is extremely difficult and time-consuming, and we&amp;rsquo;re very grateful to &lt;a href=&quot;https://bsky.app/profile/sveltesociety.dev&quot;&gt;Svelte Society&lt;/a&gt; (&lt;a href=&quot;https://bsky.app/profile/kevinak.se&quot;&gt;Kevin&lt;/a&gt; in particular), &lt;a href=&quot;https://mainmatter.com/&quot;&gt;Mainmatter&lt;/a&gt;, and everyone who bought a ticket for making the event a reality.&lt;/p&gt;
&lt;p&gt;But we&amp;rsquo;ve heard from many of you that the talks should be freely available so that they can be shared with the widest possible audience and... we agree!&lt;/p&gt;
&lt;p&gt;So the Svelte team has decided to sponsor the release of the talks, beginning this weekend. We&amp;rsquo;re able to do this because of the generous financial support so many of you have given us via &lt;a href=&quot;https://opencollective.com/svelte&quot;&gt;opencollective.com/svelte&lt;/a&gt;, which also funds important development work on the project.&lt;/p&gt;
&lt;p&gt;Subscribe to the &lt;a href=&quot;https://www.youtube.com/sveltesociety&quot;&gt;Svelte Society YouTube account&lt;/a&gt; to be the first to know when the videos are released.&lt;/p&gt;</description><pubDate>Wed, 21 May 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: May 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-may-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;Only a week until &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit Spring 2025&lt;/a&gt;! If you can&amp;rsquo;t make it in-person to Barcelona, you can purchase a virtual ticket &lt;a href=&quot;https://www.sveltesummit.com/virtual-ticket&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But before that, we&amp;rsquo;ve got a few updates to highlight...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-and-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte and SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-and-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The Svelte maintainers have been hard at work building out &lt;a href=&quot;https://github.com/sveltejs/svelte/discussions/15845&quot;&gt;Asynchronous Svelte&lt;/a&gt; this month, but still found the time to ship some helpful features. If you&amp;rsquo;re interested in trying out the async branch, or just want to follow along with the development, check out &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15844&quot;&gt;feat: allow await in components #15844&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Certain expressions will now be partially evaluated to improve runtime performance (&lt;strong&gt;svelte@5.27.0/5.28.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15494&quot;&gt;#15494&lt;/a&gt;/&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15781&quot;&gt;#15781&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Svelte CLI (&lt;code&gt;sv&lt;/code&gt;) has added a &lt;code&gt;--install &amp;lt;package-manager&amp;gt;&lt;/code&gt; flag to &lt;code&gt;create&lt;/code&gt; and &lt;code&gt;add&lt;/code&gt; to specify which package manager to use when running (&lt;strong&gt;cli@0.8.1&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/531&quot;&gt;#531&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The two separate CloudFlare adapters have been merged into one: &lt;code&gt;adapter-cloudflare&lt;/code&gt; (&lt;strong&gt;adapter-cloudflare@7.0.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13634&quot;&gt;#13634&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-vercel&lt;/code&gt; will now create symlink functions for each route, for better observability (&lt;strong&gt;adapter-vercel@5.7.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13679&quot;&gt;#13679&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There were a number of fixes in SvelteKit too - including an improvement to the &lt;code&gt;HandleServerError&lt;/code&gt; hook to give it access to &lt;code&gt;getRequestEvent&lt;/code&gt;! (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/13666&quot;&gt;#13666&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;For a full list of bug fixes in Svelte, SvelteKit and its adapters, check out their CHANGELOGs &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;here&lt;/a&gt;. Interested in all the new fixes in language tools? You can find them &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/siege-perilous/tableslayer&quot;&gt;TableSlayer&lt;/a&gt; is an open source software for managing in person RPG games with digital displays (check out the video demo on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1jnco5h/built_with_svelte_my_open_source_software_for/&quot;&gt;Reddit&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://iconia.dev/&quot;&gt;Iconia&lt;/a&gt; is a free tool that understands natural language and responds with relevant icons from famous icon libraries&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cmsdocs.com/&quot;&gt;CMSDocs&lt;/a&gt; transforms your Google Docs into Blog CMS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-changelog.dev/&quot;&gt;Svelte Changelog v2&lt;/a&gt; is out now and is a reimagined way of staying up to date on all the new changes in the Svelte ecosystem&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AdamShannag/hookah-ui&quot;&gt;Hookah UI&lt;/a&gt; is a visual configuration builder for the Hookah project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sfeSantos/mockiapi&quot;&gt;mockiapi&lt;/a&gt; is a mock API server that allows you to define endpoints, return custom JSON responses, and simulate real-world API behavior&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://soarsql.com/&quot;&gt;soarSQL&lt;/a&gt; is an SQL editor made for analytical processing on Postgres, MySQL, and CSVs - powered by duckDB&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://personasim.fow.sh/&quot;&gt;Persona Simulator&lt;/a&gt; helps you practice your communication skills by chatting with different personas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://typo.robino.dev/&quot;&gt;Typo&lt;/a&gt; is a web-based markdown editor with formatting in codeblocks and typescript execution&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mrtechtroid/fernos&quot;&gt;FernOS&lt;/a&gt; is a lightweight operating system running inside your browser&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=vCMTxL1jWbw&quot;&gt;SvelteKit is the best way to build single page apps - and it just got even better!&lt;/a&gt; by Stanislav Khromov (Video)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7m6HExTKAqM&quot;&gt;Svelte London - April 2025&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;Building cross-platform browser extensions with Svelte by Oliver Turner (&lt;a href=&quot;https://www.youtube.com/live/7m6HExTKAqM?si=tWUKbSm2IuhO0N_r&amp;t=652&quot;&gt;10:52&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Kioko: Coding CAD by Armel de Montgros and Soloman Azizi (&lt;a href=&quot;https://www.youtube.com/live/7m6HExTKAqM?si=EOmS3Hy-AwIgrBTU&amp;t=2613&quot;&gt;43:00&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=BGNykPO4L7c&quot;&gt;Ep. 100&lt;/a&gt; — Q&amp;amp;A with Rich Harris&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yp4330KsYcU&quot;&gt;Ep. 101&lt;/a&gt; — Changelog&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Graphite - an open source 2D procedural graphics editor built with Svelte - has released a &lt;a href=&quot;https://graphite.rs/blog/graphite-progress-report-q4-2024/&quot;&gt;product update blog post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jilles.me/cloudflare-workers-sveltekit-betterauth-custom-domain-google-oauth-otp-email-securing-your-application/&quot;&gt;Cloudflare Workers &amp;amp; SvelteKit: BetterAuth, Custom Domain, Google OAuth, OTP &amp;amp; Email - Securing Your Application&lt;/a&gt; by Jilles Soeters&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://testdriven.io/blog/flask-svelte/&quot;&gt;Building a Real-time Dashboard with Flask and Svelte&lt;/a&gt; by Amir Tadrisi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/jdgamble555/copying-nuxts-usestate-in-qwik-and-svelte-5eo3&quot;&gt;Copying Nuxt&amp;rsquo;s useState in Qwik and Svelte&lt;/a&gt; by Jonathan Gamble&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/devantic/diaper&quot;&gt;diaper&lt;/a&gt; is an advanced bottom sheet component for Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/spences10/mcp-svelte-docs&quot;&gt;mcp-svelte-docs&lt;/a&gt; is an MCP server that lets you search and access Svelte documentation with built-in caching&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://animejs.com/&quot;&gt;Version 4 of Anime.js&lt;/a&gt; - a popular JS animation library - has been released&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://deepwiki.com/sveltejs/svelte&quot;&gt;DeepWiki&lt;/a&gt; has created a comprehensive introduction to the Svelte framework repository&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/vite-static-assets-plugin&quot;&gt;Vite Static Assets Plugin&lt;/a&gt; is a Vite plugin that automatically scans your static assets directory, generates a type-safe TypeScript module with all asset paths to help during build or development time&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svecosystem/mode-watcher&quot;&gt;Mode Watcher v1&lt;/a&gt; provides simple light/dark mode management, now rewritten with first-class Svelte 5 support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: April 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-april-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;With a couple minor releases of SvelteKit in the last month and a few more from Svelte itself, there&amp;rsquo;s a lot to be excited about this month. From new helper functions to new configuration options, we&amp;rsquo;ve got a lot to cover...&lt;/p&gt;
&lt;p&gt;So let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The new &lt;code&gt;idPrefix&lt;/code&gt; option for &lt;code&gt;render&lt;/code&gt; makes client-side ID generation more reliable in the rare cases that multiple Svelte runtimes exist on a page (&lt;strong&gt;5.22.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/svelte/svelte-server#render&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15428&quot;&gt;#15428&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;State created in deriveds/effects can now be written/read locally without self-invalidation - reducing the number of &amp;ldquo;unsafe read&amp;rdquo;s significantly (&lt;strong&gt;5.24.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15553&quot;&gt;#15553&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Derived statements are now writable (&lt;strong&gt;5.25.0/5.25.2&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/svelte/$derived#Overriding-derived-values&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15570&quot;&gt;#15570&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15581&quot;&gt;#15581&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Svelte CLI also got an upgrade to its code generation for more intuitive formatting (&lt;strong&gt;0.7.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/380&quot;&gt;#380&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eslint-plugin-svelte&lt;/code&gt; v3 has been released. The main update is improved support for Svelte 5. Check out the &lt;a href=&quot;https://github.com/sveltejs/eslint-plugin-svelte/releases&quot;&gt;CHANGELOG&lt;/a&gt; for more details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There were also quite a few &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-109.5.3&quot;&gt;fixes&lt;/a&gt; to the language tools earlier in the month - so be sure to keep your plugins up to date!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;reroute&lt;/code&gt; can now be called async - with an option to &lt;code&gt;fetch&lt;/code&gt; if you need to pass along cookies or other request context (&lt;strong&gt;2.18.0/2.19.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/@sveltejs-kit#Reroute&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13520&quot;&gt;#13520&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13549&quot;&gt;#13549&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;normalizeUrl&lt;/code&gt; helper provides people a way to normalize a raw URL that could contain SvelteKit-internal data (&lt;strong&gt;2.18.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/@sveltejs-kit#normalizeUrl&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13539&quot;&gt;#13539&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getRequestEvent&lt;/code&gt; is a new function in &lt;code&gt;$app/server&lt;/code&gt; that returns the current &lt;code&gt;RequestEvent&lt;/code&gt; (&lt;strong&gt;2.20.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/kit/$app-server#getRequestEvent&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13582&quot;&gt;#13582&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Updates to the &lt;code&gt;cloudflare-adapter&lt;/code&gt; brings Wrangler 4 support, improved &lt;code&gt;_headers&lt;/code&gt; and &lt;code&gt;_redirects&lt;/code&gt; files, and support for specifically building for Cloudflare Workers Static Assets (&lt;strong&gt;5.1.0-7.0.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/blob/main/packages/adapter-cloudflare/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of bug fixes in Svelte, SvelteKit and its adapters, check out their CHANGELOGs &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/0x2E/fusion&quot;&gt;Fusion&lt;/a&gt; is a lightweight, self-hosted friendly RSS aggregator and reader&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.alci.dev/en/tools/brooks-law-simulator&quot;&gt;Brooks’ Law simulator&lt;/a&gt; visualizes how communication complexity grows as team size grows&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vercel/ai-chatbot-svelte&quot;&gt;ai-chatbot-svelte&lt;/a&gt; is a full-featured, hackable SvelteKit AI chatbot built by Vercel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Hugo-Dz/raymarching-webgpu&quot;&gt;raymarching-webgpu&lt;/a&gt; is a ray marching implementation using WebGPU and Svelte 5, shaders written in WGSL&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eurlexa.com/&quot;&gt;Eurlexa&lt;/a&gt; lets you access and search EU regulations and directives instantly&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wsj.com/personal-finance/taxes/taxes-tax-season-ai-chatbot-lars-ebf9b410?st=hk828B&quot;&gt;Lars&lt;/a&gt; is the Wall Street Journal&amp;rsquo;s AI Tax Bot - built with Svelte and embedded into a React frontend&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Kyagara/rt/&quot;&gt;RT&lt;/a&gt; is a lightweight, ad-free Twitch frontend built with Tauri, Rust &amp;amp; SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Ayfri/Atom-Clicker-Svelte&quot;&gt;Atom Clicker&lt;/a&gt; is an engaging incremental game where you&amp;rsquo;ll build your own atomic empire&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://peasy.so/&quot;&gt;peasy&lt;/a&gt; provides modern web analytics without the clutter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-lexical.vercel.app/&quot;&gt;svelte-lexical&lt;/a&gt; is a rich-text editor for Svelte and SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/doolijb/sveltekit-epub-writer&quot;&gt;sveltekit-epub-writer&lt;/a&gt; is an ergonomic book editor that lets you export to EPUB in one click&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=bAAwVpvdy_g&quot;&gt;Why re-renders hurt performance and how you can fix them in Svelte 5&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mainmatter.com/blog/2025/03/11/global-state-in-svelte-5/&quot;&gt;Runes and Global state: do&amp;rsquo;s and don&amp;rsquo;ts&lt;/a&gt; by Paolo Ricciuti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tfq8OrvORYE&quot;&gt;Learn How To Make Interactive 3D Apps With Svelte And Threlte&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=R4FA-W1QCa0&quot;&gt;Svelte London - March 2025&lt;/a&gt; featuring:&lt;ul&gt;
&lt;li&gt;SvelteKit and SST by Andrico Karoulla&lt;/li&gt;
&lt;li&gt;Mythbusters! Svelte Ecosystem Edition by Willow (GHOST)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HnpvpWTcaVI&quot;&gt;Ep. 96&lt;/a&gt; — durable objects&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RaQLAiEP7sc&quot;&gt;Ep. 97&lt;/a&gt; — stick to botton&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0YH1RraeXFU&quot;&gt;Ep. 97&lt;/a&gt; — Changelog&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Wzd_FG-rymQ&quot;&gt;Ep. 99&lt;/a&gt; — Custom Select&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9FrC0kTTw64&quot;&gt;Deploying Svelte Kit on DigitalOcean App Platform (awesome Vercel alternative) + Tailwind&lt;/a&gt; by Elans Builds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://scriptraccoon.dev/blog/recursive-svelte-components&quot;&gt;Recursive Svelte Components&lt;/a&gt; by Martin Brandenburg&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://testdriven.io/blog/fastapi-svelte/&quot;&gt;Building a Real-time Dashboard with FastAPI and Svelte&lt;/a&gt; by Amir Tadrisi Amir Tadrisi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/digitaldrreamer/a-short-guide-to-async-components-in-svelte-5-57l4&quot;&gt;A short guide to Async Components in Svelte 5&lt;/a&gt; by Abdullah Bashir&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/maxcore/sveltekit-5-how-to-make-code-based-router-instead-of-file-based-router-1jf&quot;&gt;SvelteKit 5: How to make code-based router, instead of file-based router&lt;/a&gt; by Max Core&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/wobsoriano/integrating-trpc-with-sveltekit-4271&quot;&gt;Integrating tRPC with SvelteKit&lt;/a&gt; by Robert Soriano&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oven-sh/bun/pull/17735&quot;&gt;Bun has added&lt;/a&gt; official support for Svelte as a frontend framework for their bundler&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.skeleton.dev/&quot;&gt;Skeleton v3.0&lt;/a&gt; is now available - including Svelte 5 support, Tailwind 4 and a more modular structure&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sappsdev/sappsui&quot;&gt;SaapsUI&lt;/a&gt; is a comprehensive Svelte component library designed for creating responsive, accessible, and beautiful user interfaces with minimal effort&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svar.dev/svelte/&quot;&gt;SVAR Svelte v2.1&lt;/a&gt; has added new UI components - including DataGrid and Gantt charts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SikandarJODD/cnblocks&quot;&gt;cnblocks&lt;/a&gt; provides 50+ UI &amp;amp; Marketing blocks using Svelte 5, Tailwind CSS v4 and Shadcn Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1jdyyjv/shadeditor_evolves_to_edra_a_headless/&quot;&gt;Edra&lt;/a&gt; is a Headless &amp;amp; ShadCN-Powered Rich Text Editor for Svelte Developers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://inlang.com/m/gerre34r/library-inlang-paraglideJs/changelog#paraglide-js-20-&quot;&gt;Paraglide&lt;/a&gt;, the i18n library for supporting multiple languages in your Svelte app, release their 2.0 version&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/unnoq/orpc&quot;&gt;oRPC&lt;/a&gt; helps you build type-safe APIs for Svelte and TanStack Svelte Query&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SveltePress/sveltepress&quot;&gt;Sveltepress&lt;/a&gt; is a content centered site build tool, built on top of Sveltekit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://konvajs.org/docs/svelte/index.html&quot;&gt;Konva.js&lt;/a&gt; is a declarative 2D Canvas for Svelte apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://inspect.eirik.space/&quot;&gt;Svelte Inspect Value&lt;/a&gt; is a &amp;ldquo;JSON tree&amp;rdquo;-like value inspector&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=thonymg.svelte-5-kit-snippets&quot;&gt;Svelte 5 Snippets&lt;/a&gt; offers reusable code templates to accelerate development and ensure consistent coding practices in VS Code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Tue, 01 Apr 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: March 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-march-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;&lt;a href=&quot;https://hack.sveltesociety.dev/2024&quot;&gt;SvelteHack 2024&lt;/a&gt; has ended and the winners were announced on February 9th. Congrats to all the &lt;a href=&quot;https://hack.sveltesociety.dev/2024/winners&quot;&gt;winners&lt;/a&gt; who you&amp;rsquo;ll also find listed in the &amp;ldquo;Community Showcase&amp;rdquo; below.&lt;/p&gt;
&lt;p&gt;But before we dive into that, let&amp;rsquo;s get to some updates!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-and-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte and SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-and-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Native support for Websockets in SvelteKit is now available for testing! You can install the version of SvelteKit from the PR using pkg.pr.new and the PR number (&lt;a href=&quot;https://github.com/sveltejs/kit/issues/1491#issuecomment-2645962690&quot;&gt;How To Install&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12973&quot;&gt;PR/Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$props.id()&lt;/code&gt; provides SSR-safe ID generation - unique for each instance of a component (&lt;strong&gt;Svelte@5.20.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/$props#$props.id()&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15185&quot;&gt;#15185&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit now supports an option for server-side route resolution. This means that instead of loading the whole routing manifest in the client, and doing the route resolution there, the server runtime is invoked for each route request (&lt;strong&gt;Kit@2.17.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/configuration#router&quot;&gt;docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13379&quot;&gt;pull request&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The values for &lt;code&gt;cache-control&lt;/code&gt; and &lt;code&gt;content-type&lt;/code&gt; headers are now validated in dev mode to help catch invalid values early (&lt;strong&gt;2.17.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13114&quot;&gt;#13114&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full list of bug fixes in Svelte, SvelteKit and its adapters, check out their CHANGELOGs &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.faviconizer.com/&quot;&gt;Faviconizer&lt;/a&gt; is a simple, functional favicon (.ico) converter made with SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stocknear&quot;&gt;stocknear&lt;/a&gt; is an open source stock analysis &amp;amp; community platform (congrats on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1iupfxb/from_learning_web_dev_to_building_my_saas_hit/&quot;&gt;2 years of development&lt;/a&gt;!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1in1t0n/self_promotion_svelte_tauri_mobile_app_for/&quot;&gt;Workouts&lt;/a&gt; is a simple and private app for tracking your strength training workouts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Ayfri/Deep-Research&quot;&gt;Perplexity Fast Chat&lt;/a&gt; is a modern web interface to interact with Perplexity AI and OpenAI models, featuring a unique deep research mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lucasgelfond/exiftool-web&quot;&gt;exiftool-web&lt;/a&gt; is an exif data inspector tool, in the browser (via WebAssembly!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weekendscanner.com/&quot;&gt;Weekend Scanner&lt;/a&gt; helps you find long weekends by combining your weekends and holidays&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://linklink.ink/&quot;&gt;Linklink&lt;/a&gt; is a link management tool for organising and sharing links&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lilnasy/multiplayer-globe&quot;&gt;Multiplayer Globe App&lt;/a&gt; displays website visitor locations in real-time using Astro, Cloudflare and Redis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mathesar-foundation/mathesar&quot;&gt;Mathesar&lt;/a&gt; is an intuitive spreadsheet-like interface that lets users of all technical skill levels view, edit, query, and collaborate on Postgres data directly&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://image-squash.web.app/&quot;&gt;Squash&lt;/a&gt; lets you compress and convert your images to AVIF, JPEG, JPEG XL, PNG, or WebP&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lucasgelfond/webgpu-sam2&quot;&gt;Segment Anything 2 in WebGPU&lt;/a&gt; is a WebGPU implementation of Facebook Research&amp;rsquo;s model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Svelte Hack Wizzbangery Wizard Winners&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kunkunsh/kunkun&quot;&gt;kunkun&lt;/a&gt; is an open source, cross-platform, extensible app launcher (like Raycast) - it&amp;rsquo;s also the winner of SvelteHack 2024 🏆&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/edsunman/infinite-turtles&quot;&gt;Infinite Turtles&lt;/a&gt; is a card game made with Threlte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/fodor-lori/svudoku&quot;&gt;Svudoku&lt;/a&gt; is a modern-looking Sudoku application that lets you enjoy solving both Classic and Killer Sudoku puzzles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/baterson/svelte-tower-defence&quot;&gt;Svelte Space&lt;/a&gt; is a TowerDefence clicker game made with Svelte 5, without canvas. Playable on different screens, Mobile or Desktop.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/martaProsniak/haunted-house&quot;&gt;Haunted house&lt;/a&gt; is an old-school arcade game where you explore a haunted mansion full of ghosts. Control plasma bullets, use your wits and clear the whole house! Created only with Svelte 5.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/NwRJvFX-lOk?si=kGLb_09XSitwdaqk&quot;&gt;Svelte Hack 2024 Winners Announcement Livestream&lt;/a&gt; featuring GHOST, Paulo and Dominik&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SJiE4tu39EQ&quot;&gt;20 Svelte Features You Missed During Advent Of Svelte&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=R82Ptutku0M&quot;&gt;Use any JavaScript or TypeScript Library in Svelte 5 (The Right Way)&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=s79E0Q9f2YM&quot;&gt;Svelte London - February 2025&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UHBekhrnKVs&quot;&gt;Ep. 92&lt;/a&gt; — Changelog and Showcase&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-VV-2FyBnng&quot;&gt;Ep. 93&lt;/a&gt; — Changelog, dynamic layouts with snippets&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Qo57-7JmUaw&quot;&gt;Ep. 94&lt;/a&gt; — Go + Svelte as a hybrid SPA/MPA application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9ypawEnb12U&quot;&gt;Ep. 95&lt;/a&gt; — Changelog&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=C95drFKy4ss&quot;&gt;GitHub Copilot: the agent awakens&lt;/a&gt; uses SvelteKit as their example project 🙌🏼&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=lwbNPEPt0E8&quot;&gt;Full Stack E-Commerce + Dashboard: Svelte 5, Cloudflare, Tailwind, Drizzle, Sqlite, 2025&lt;/a&gt; by Lawal Adebola&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.yuki-dev.com/blogs/x2lxp2szm&quot;&gt;How to Protect Your SvelteKit Routes&lt;/a&gt; by Yuki Ishii&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/jdgamble555/sharing-runes-in-svelte-5-the-rune-class-505e&quot;&gt;Sharing Runes in Svelte 5 with the Rune Class&lt;/a&gt; by Jonathan Gamble&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.fullmeasure.uk/2025/01/07/mixed-signals-with-svelte5/&quot;&gt;Mixed Signals with Svelte 5&lt;/a&gt; from the FullMeasure Blog&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://steve-sob.medium.com/did-svelte-5-get-runed-with-complexity-cbeda34b9feb&quot;&gt;Did Svelte 5 Get Runed with Complexity?&lt;/a&gt; by sobPilot&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/ranjanpurbey/background-jobs-in-sveltekit-with-bullmq-4dn3&quot;&gt;Background Jobs in SvelteKit with BullMQ&lt;/a&gt; by Ranjan Purbey&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-form-builder.vercel.app/&quot;&gt;Svelte Form Builder&lt;/a&gt; helps you create forms with Shadcn-Svelte, Superforms and schema within minutes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tzezar/shadcn-svelte-enhancements&quot;&gt;shadcn-svelte-enhancements&lt;/a&gt; is a collection of additional components designed specifically for Shadcn-Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ui.lomer.dev/&quot;&gt;lomer-ui&lt;/a&gt; provides standalone components for Svelte powered by Tailwind CSS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vidschofelix/vite-plugin-svelte-anywhere&quot;&gt;Vite Plugin Svelte Anywhere&lt;/a&gt; empowers developers to define reusable custom elements directly within their Svelte components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chatgpt.com/g/g-Knj6VxTpl-svelte-5-sveltekit-sage&quot;&gt;Svelte 5 + SvelteKit Sage&lt;/a&gt; is a custom GPT to get the best answers out of ChatGPT&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/raguay/ModalFileManager/releases/tag/v2.0.0&quot;&gt;ModalFileManager&lt;/a&gt; and &lt;a href=&quot;https://github.com/raguay/PersonKanban/releases/tag/v0.5&quot;&gt;PersonalKanban&lt;/a&gt; have been updated to work with Svelte 5 (and fix a large number of bugs)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Matb85/components-pack&quot;&gt;components-pack&lt;/a&gt; provides photos-related UI components for Svelte 5, Vue 3, Astro 5 and vanilla JS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Svelte Hack Rune Ritualist Winners&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/beynar/syncrostate&quot;&gt;SyncroState&lt;/a&gt; brings Svelte 5 reactivity DX to the multiplayer level. Built on top of Yjs, it&amp;rsquo;s a typesafe, efficient and dead simple way to manage multiplayer state. It is just like a normal $state but synchronised in realtime.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/twoslashes/twoslash/pull/57&quot;&gt;Twoslash Svelte&lt;/a&gt; is an extension of &lt;code&gt;twoslashes/twoslash&lt;/code&gt; which supports Svelte. This will be beneficial for adding type hints to code blocks on any documentation website targeting Svelte.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xGEMINIx/svisx&quot;&gt;svisx&lt;/a&gt; is a port of Airbnb&amp;rsquo;s visx to Svelte, bringing the power of D3 visualizations to the Svelte ecosystem.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ampled/svelte-inspect-value&quot;&gt;Svelte Value Inspect&lt;/a&gt; is a &amp;ldquo;json tree&amp;rdquo;-like inspector inspired by the likes of react-json-view, and svelte-json-tree.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Blakintosh/svelte-flexiboards&quot;&gt;Flexiboards&lt;/a&gt; provides headless, reactive drag and drop components for Svelte 5.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Svelte Hack Migration Magician Winners&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MIERUNE/svelte-maplibre-gl&quot;&gt;Svelte MapLibre GL&lt;/a&gt; lets you build interactive web maps effortlessly with MapLibre GL JS and Svelte 5.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/techniq/svelte-ux/pull/530&quot;&gt;svelte-ux&lt;/a&gt; is a collection of Svelte components, actions, stores, and utilities to build highly interactive applications.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jerrythomas/rokkit/tree/develop&quot;&gt;rokkit&lt;/a&gt; is a data-driven, configurable, and themeable UI library built for use with Svelte. Rokkit controls are designed to be easily themeable, so you can match the look and feel of your project with minimal effort.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Michael-Obele/Svelte-MiniApps&quot;&gt;Svelte MiniApps&lt;/a&gt; is a collection of user-friendly tools rebuilt with Svelte 5 for enhanced speed and reliability&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/roguelighterengine/roguelighter&quot;&gt;Roguelighter Engine&lt;/a&gt; is a free, open-source, easy-to-use game engine for 2D game development.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Sat, 01 Mar 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: February 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-february-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;The Svelte developer experience got a huge upgrade this month with more exported types and better syntax highlighting in VS Code. Combine that with the huge releases from Storybook, Tailwind and Threlte... and you&amp;rsquo;ve got a pretty big month!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive in 🐬&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Non-numeric values can now be tweened by snapping immediately to the new value (&lt;strong&gt;5.17.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte-motion#tweened&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14941&quot;&gt;#14941&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const&lt;/code&gt; tags are now allowed inside of a &lt;code&gt;svelte:boundary&lt;/code&gt; (&lt;strong&gt;5.17.5&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/svelte-boundary&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14993&quot;&gt;#14993&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; elements are now allowed to contain any child elements (&lt;strong&gt;5.18.0&lt;/strong&gt;, &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15007&quot;&gt;#15007&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ClassValue&lt;/code&gt; is now exposed from &lt;code&gt;svelte/elements&lt;/code&gt; (&lt;strong&gt;5.19.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/class#Attributes-Objects-and-arrays&quot;&gt;Docs&lt;/a&gt;), &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/15035&quot;&gt;#15035&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Custom identifiers can now be invalidated on &lt;code&gt;goto()&lt;/code&gt; navigation (&lt;strong&gt;2.16.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/$app-navigation#goto&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13256&quot;&gt;#13256&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;postinstall&lt;/code&gt; script has been removed to support pnpm 10 (&lt;strong&gt;2.16.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13304&quot;&gt;#13304&lt;/a&gt;)&lt;ul&gt;
&lt;li&gt;users should add &lt;code&gt;&amp;quot;prepare&amp;quot;: &amp;quot;svelte-kit sync&amp;quot;&lt;/code&gt; to their &lt;code&gt;package.json&lt;/code&gt; in order to avoid the a warning upon first running Vite&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PageProps&lt;/code&gt; and &lt;code&gt;LayoutProps&lt;/code&gt; types are now provided (&lt;strong&gt;2.16.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13308&quot;&gt;#13308&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The generics attribute is now supported for JSDoc (&lt;strong&gt;svelte2tsx-0.7.32/svelte-check-4.1.2&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2624&quot;&gt;#2624&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Semantic document highlighting makes the document highlights based on semantic/syntactic meaning instead of the current word-based default by VSCode (&lt;strong&gt;language-server-0.17.9&lt;/strong&gt;, &lt;a href=&quot;https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentHighlight&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1408&quot;&gt;#1408&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dailytokki.com/?ref=sveltenewsletter&quot;&gt;Daily Tokki&lt;/a&gt; is daily personalized Korean learning delivered right to your inbox&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/baterson/svelte-tower-defence&quot;&gt;svelte-tower-defence&lt;/a&gt; is a tower defense clicker game built with Svelte 5, without canvas, using only CSS transitions and the Runes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alyalin/PraccJS&quot;&gt;PraccJS&lt;/a&gt; lets you practice JavaScript with real-time code execution&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.invoice-r.co.uk/&quot;&gt;Invoice-r&lt;/a&gt; calculates what you&amp;rsquo;re owed from the information you give and makes your invoice look good&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AxelUser/carry-fit&quot;&gt;Carry Fit&lt;/a&gt; is an online carry-on luggage compliance checker&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1hv3rpd/selfpromotion_we_made_fiddle_with_svelte_so_you/&quot;&gt;Fiddle&lt;/a&gt; (currently in waitlist stage) lets you design, collaborate and experiment in code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rajnandan1/kener&quot;&gt;Kener&lt;/a&gt; is a modern status page with batteries included&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opentlc.org/&quot;&gt;Open TLC&lt;/a&gt; is a free, open source CAT (Computer-Assisted Translation) tool&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mathesar-foundation/mathesar&quot;&gt;Mathesar&lt;/a&gt; is a secure, spreadsheet-like tool for Postgres data&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/a-matyukh/pile-commander&quot;&gt;Pile Commander&lt;/a&gt; is an open-source file manager for creative people&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hetzner-value-auctions.cnap.tech/about&quot;&gt;Hetzner Auction Browser&lt;/a&gt; is a better way to find the perfect server in Hetzner&amp;rsquo;s Server-Bidding marketplace&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2025/01/svelte-5-future-frameworks-chat-rich-harris/&quot;&gt;Svelte 5 And The Future Of Frameworks: A Chat With Rich Harris&lt;/a&gt; by Frederick O&amp;rsquo;Brien&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=R82Ptutku0M&quot;&gt;Use any JavaScript or TypeScript Library in Svelte 5 (The Right Way)&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Svelte Radio&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/rich-harris-on-the-svelte-5-reception&quot;&gt;Rich Harris on the Svelte 5 reception&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/dominik-g-on-svelte-5-and-vite-6&quot;&gt;Dominik G on Svelte 5 and Vite 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/timothy-cohen-talks-samplekit&quot;&gt;Timothy Cohen Talks SampleKit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=BtZQmNoy6dI&quot;&gt;Ep. 89&lt;/a&gt; — Sailkit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9DeWd_ShWM4&quot;&gt;Ep. 90&lt;/a&gt; — Svelte Radar VS Code Extension&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Fn0_8iZGkLk&quot;&gt;Ep. 91&lt;/a&gt; — Threlte 8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hugosum.com/blog/dockerize-sveltekit-with-adaptor-static-and-nginx&quot;&gt;Dockerize SvelteKit with adapter-static and Nginx&lt;/a&gt;, &lt;a href=&quot;https://hugosum.com/blog/analyze-and-optimize-your-vite-bundle&quot;&gt;Analyze and optimize your Vite bundle&lt;/a&gt; and &lt;a href=&quot;https://hugosum.com/blog/end-to-end-type-safety-with-svelte5-and-sveltekit2&quot;&gt;End-to-end type safety with Svelte 5 and SvelteKit 2&lt;/a&gt; by Hugo Sum&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=HarshKothari.svelte-radar&quot;&gt;Svelte Radar&lt;/a&gt; is a VS Code extension that provides a visual overview of your project&amp;rsquo;s routing structure&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://threlte.xyz/blog/threlte-8&quot;&gt;Threlte 8&lt;/a&gt; is out and is more performant, flexible and aligned with Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://storybook.js.org/blog/storybook-8-5/&quot;&gt;Storybook 8.5&lt;/a&gt; includes Svelte Storybook Test support - improving testing in Svelte CSF stories&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svar.dev/svelte/&quot;&gt;SVAR for Svelte&lt;/a&gt; provides feature-rich Svelte UI Components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tailwindcss.com/blog/tailwindcss-v4&quot;&gt;Tailwind CSS v4.0 &lt;/a&gt;has been released - with a new engine, simpler installation and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/razshare/frizzante&quot;&gt;Frizzante&lt;/a&gt; is a procedural, minimalistic and opinionated web server that uses Svelte to render web pages&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thomaslappenbusch/svelte-5-dashboard&quot;&gt;svelte-5-dashboard&lt;/a&gt; is a boilerplate for Svelte 5 dashboards. Including alerts, avatars, custom formatting and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/HanielU/dnd-kit-svelte&quot;&gt;dnd-kit-svelte&lt;/a&gt; is a Svelte 5 dnd-kit port&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SikandarJODD/youva&quot;&gt;youva&lt;/a&gt; provides pagination, debounced search, sorting, filtering and caching for SvelteKit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for the review of Svelte&amp;rsquo;s first month of 2025! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋🏼!&lt;/p&gt;</description><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: January 2025</title><link>https://svelte.dev/blog/whats-new-in-svelte-january-2025</link><author>Dani Sandoval</author><description>&lt;p&gt;From new syntax to improved dev tooling, the Svelte team has been busy this month building new features in both Svelte and SvelteKit. And as we round the corner into the new year, there&amp;rsquo;s even more to look forward to... like the &lt;em&gt;10th Svelte Summit&lt;/em&gt;! &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Join the Svelte community&lt;/a&gt; online or in-person in Barcelona: May 8th and 9th.&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s get to the news 👀&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Snippets can now be exported from module scripts (&lt;strong&gt;5.5.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/snippet#Exporting-snippets&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14315&quot;&gt;#14315&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defaultValue&lt;/code&gt; and &lt;code&gt;defaultChecked&lt;/code&gt; are now supported for inputs (&lt;strong&gt;5.6.0&lt;/strong&gt;, &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/defaultChecked&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14289&quot;&gt;#14289&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The loose parser mode creates a more modern AST for developer tools to consume (&lt;strong&gt;5.13.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/svelte-compiler#parse&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14691&quot;&gt;#14691&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new &amp;ldquo;worker&amp;rdquo; exports condition helps better support bundling for worker-based environments (&lt;strong&gt;5.15.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14779&quot;&gt;#14779&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;class&lt;/code&gt; attribute can now be an object or array, using &lt;code&gt;clsx&lt;/code&gt; (&lt;strong&gt;5.16.0&lt;/strong&gt;, &lt;a href=&quot;https://svelte.dev/docs/svelte/class#Attributes-Objects-and-arrays&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14714&quot;&gt;#14714&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;New/Updated Syntax&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;svelte:boundary&amp;gt;&lt;/code&gt; is a new special element that can capture errors that occur from within its subtree during client rendering (&lt;strong&gt;5.3.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/svelte-boundary&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14211&quot;&gt;#14211&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;#each is now supported without &lt;code&gt;as&lt;/code&gt; (&lt;strong&gt;5.4.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/each&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14396&quot;&gt;#14396&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;Spring&lt;/code&gt; and &lt;code&gt;Tween&lt;/code&gt; classes in &lt;code&gt;svelte/motion&lt;/code&gt; make it even easier to build custom animation (&lt;strong&gt;5.8.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/svelte-motion&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11519&quot;&gt;#11519&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;outro&lt;/code&gt; option in &lt;code&gt;unmount&lt;/code&gt; will play transitions before the component is removed from the DOM. (&lt;strong&gt;5.13.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/svelte#unmount&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14540&quot;&gt;#14540&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;$inspect.trace&lt;/code&gt; rune causes the surrounding function to be traced in development. Any time the function re-runs as part of an effect or a derived, information will be printed to the console about which pieces of reactive state caused the effect to fire (&lt;strong&gt;5.14.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/$inspect#$inspect.trace()&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14290&quot;&gt;#14290&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Reactivity APIs&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;createSubscriber&lt;/code&gt; creates reactive values that depend on subscriptions (&lt;strong&gt;5.7.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/svelte-reactivity#createSubscriber&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14422&quot;&gt;#14422&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The reactive &lt;code&gt;MediaQuery&lt;/code&gt; class creates a media query and provides a current property that reflects whether or not it matches (&lt;strong&gt;5.7.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/svelte-reactivity#MediaQuery&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14422&quot;&gt;#14422&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Getters and setters can now be bound to with &lt;code&gt;bind&lt;/code&gt; (&lt;strong&gt;5.9.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/bind&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14307&quot;&gt;#14307&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;svelte/reactivity/window&lt;/code&gt; module exports reactive versions of various &lt;code&gt;window&lt;/code&gt; values, each of which has a reactive current property that you can reference in reactive contexts (&lt;strong&gt;5.11.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/svelte-reactivity-window&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14660&quot;&gt;#14660&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit-Svelte-CLI-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit, Svelte CLI and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Svelte-CLI-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The new &lt;code&gt;init&lt;/code&gt; hook runs once, when the server is created or the app starts in the browser, and is a useful place to do asynchronous work such as initializing a database connection (&lt;strong&gt;2.10.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/hooks#Shared-hooks-init&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13103&quot;&gt;#13103&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;a href=&quot;https://svelte.dev/docs/kit/@sveltejs-kit#Transport&quot;&gt;&lt;code&gt;transport&lt;/code&gt;&lt;/a&gt; hook allows you to encode/serialize and decode/deserialize custom non-POJOs across the server/client boundary (&lt;strong&gt;2.11.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13149&quot;&gt;#13149&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;$app/state&lt;/code&gt; module replaces the existing &lt;code&gt;$app/stores&lt;/code&gt; module but using Svelte 5 state. The &lt;code&gt;migrate&lt;/code&gt; tool in the CLI/language tools have been updated to match (&lt;strong&gt;2.12.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/$app-state&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13140&quot;&gt;#13140&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bundleStrategy&lt;/code&gt; lets you choose between &lt;code&gt;&amp;#39;split&amp;#39;&lt;/code&gt;, &lt;code&gt;&amp;#39;single&amp;#39;&lt;/code&gt; and &lt;code&gt;&amp;#39;inline&amp;#39;&lt;/code&gt; output options for JS and CSS files (&lt;strong&gt;2.13.0&lt;/strong&gt; and &lt;strong&gt;2.15.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/configuration#output&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13191&quot;&gt;#13173&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13193&quot;&gt;#13193&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;sveltekit-adapter&lt;/code&gt; add-on for the Svelte CLI (&lt;code&gt;sv&lt;/code&gt;) installs and replaces existing SvelteKit adapters (&lt;a href=&quot;/docs/cli/sv-add&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/346&quot;&gt;#346&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The language tools extensions will now make use of loose Svelte parser and provide better intellisense (&lt;strong&gt;109.4.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2631&quot;&gt;#2631&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Adapter Updates&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;adapter-auto&lt;/code&gt; has added support for the bun language server (&lt;strong&gt;3.3.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12854&quot;&gt;#12854&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-cloudflare-workers&lt;/code&gt; now supports &lt;code&gt;wrangler.json&lt;/code&gt; config files (&lt;strong&gt;2.7.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13151&quot;&gt;#13151&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-cloudflare&lt;/code&gt; will now generate an &lt;code&gt;.assetsignore&lt;/code&gt; file for use with Cloudflare Workers Static Assets (&lt;strong&gt;4.9.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/13109&quot;&gt;#13109&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tokeko.specy.app/&quot;&gt;Tokeko&lt;/a&gt; is an educational platform designed to help users understand and learn about different types of parsers, grammar structures, and parsing techniques&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flags.isaxk.com/&quot;&gt;QuickFlags&lt;/a&gt; is a fast paced, simple, flag knowledge game&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/BastiDood/hotspotter&quot;&gt;Hotspotter&lt;/a&gt; is an incentivized crowdsensing system that collects, maps, and visualizes WiFi and cellular data to pinpoint hotspots and dead zones for the effective visualization of network coverage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://writastic.com/&quot;&gt;Writastic&lt;/a&gt; is an AI social media writing assistant to optimize your content with the best strategies of successful creators&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wallestudio.com/&quot;&gt;Walle&lt;/a&gt; is a macOS chatbot app that lets you interact with Claude, GPT, and Gemini simultaneously&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fli.so/&quot;&gt;Fli.so&lt;/a&gt; is a free, modern open-source link shortener&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vrdb.app/&quot;&gt;VRDB&lt;/a&gt; is a comprehensive database for Meta Quest Store, App Lab, and VR games&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ssebastianoo/sv-resize-image&quot;&gt;sv-resize-image&lt;/a&gt; resizes images using just the browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stormyzio/wickgpt&quot;&gt;WickGPT&lt;/a&gt; is an online tool to generate fake clips of chatGPT responses&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://other.supply/&quot;&gt;other.supply&lt;/a&gt; is a virtual vinyl shop that simulates the record-flipping experience&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-at-bloomberg&quot;&gt;Svelte at Bloomberg (feat Julian Burgess)&lt;/a&gt; and &lt;a href=&quot;https://www.svelteradio.com/episodes/scott-tolinski-on-svelte-5-local-first-development&quot;&gt;Scott Tolinski on Svelte 5 Local First Development&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UegUi2fWBaU&quot;&gt;Rich Harris&amp;rsquo; North Star&lt;/a&gt; at JSNation US 2024&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tprMklFzy44&quot;&gt;Perfect Svelte 5 code completion for any LLM - Claude, ChatGPT and GitHub Copilot&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=t6-znHs8DDM&quot;&gt;Svelte 5 Is Here!&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=jnYjIDKyKHw&quot;&gt;View Transitions Are More Powerful Than You Think&lt;/a&gt; by Syntax&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VTFAFqd51Fg&quot;&gt;Ep. 86&lt;/a&gt; — Tabs component&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=TIaUCw4wKio&quot;&gt;Ep. 87&lt;/a&gt; — GPU rendered components with svader&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jFyMMu44t-s&quot;&gt;Ep. 88&lt;/a&gt; — Live coding local storage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.datawrapper.de/sveltekit-accessibility-tips/&quot;&gt;Building accessible sites with SvelteKit: seven practical tips&lt;/a&gt; by Antonio Sarcevic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.yuki-dev.com/blogs/d2_e1zwgn3_o&quot;&gt;How to Fix Unexpected Logout Issues in SvelteKit Caused by data-sveltekit-preload-data&lt;/a&gt; by Yuki Ishii&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltejobs.com/svelte-salaries&quot;&gt;Svelte Job&amp;rsquo;s Svelte Salaries Report&lt;/a&gt; shows average and median salaries across remote, non-remote positions, locations, and seniority levels&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=m9fsj5zXyDY&quot;&gt;Build &amp;amp; Launch a Svelte Website in Just 15 Minutes!&lt;/a&gt; by NAD LABS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AKZtk0suBTE&quot;&gt;The Magic of Svelte&lt;/a&gt; by Jürg Hunziker, Vendure Conf 2024&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte.dev/content.json&quot;&gt;The Svelte docs&lt;/a&gt; are now available in an LLM-friendly format (shout out to Stanislav Khromov for &lt;a href=&quot;https://svelte-llm.khromov.se/&quot;&gt;svelte-llm&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/retrotheft/svelte-mainloop&quot;&gt;svelte-mainloop&lt;/a&gt; is awrapper for MainLoop.js that handles function registration and cleanup, and lets you join and leave the loop with a single component (&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1hfto6y/sveltemainloop_the_easiest_way_to_add_a_loop_to/&quot;&gt;Reddit&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nsarrazin/bsky-comments-svelte/&quot;&gt;bsky-comments-svelte&lt;/a&gt; is a simple customizable component to add comments to your website using Bluesky&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rodrigocfd/svelte-mini-router&quot;&gt;Svelte Mini Router&lt;/a&gt; is a declarative, minimal SPA router for Svelte 5, without SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pierregoutheraud/svelte-firebase-state&quot;&gt;svelte-firebase-state&lt;/a&gt; simplifies Firebase integration in Svelte/Sveltekit applications by providing easy-to-use reactive state classes for managing Firestore and Realtime Database data&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/monokai/monoco-svelte&quot;&gt;monoco-svelte&lt;/a&gt; lets you create custom (squircle) corners and borders for Svelte components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Catsvilles/svelte-audio-waveform&quot;&gt;svelte-audio-waveform&lt;/a&gt; transforms an array of peak data into beautifully rendered, customizable waveforms for music players, podcasts, audio editing tools, and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sockmaster27/svader&quot;&gt;Svader&lt;/a&gt; creates GPU-rendered Svelte components with WebGL and WebGPU fragment shaders&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this huge month in Svelte! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy new year! 🥳&lt;/p&gt;</description><pubDate>Wed, 01 Jan 2025 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: December 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-december-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;I can&amp;rsquo;t believe it&amp;rsquo;s already the last newsletter of the year! So much has happened in the Svelte community - from two great Svelte Summits to the release Svelte 5 🎉&lt;/p&gt;
&lt;p&gt;As we look forward to the next year and watch the Svelte team do &lt;a href=&quot;advent-of-svelte&quot;&gt;24 features in 24 days&lt;/a&gt;, let&amp;rsquo;s dive into what&amp;rsquo;s new in the past month...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The bugfix versions in 5.1.x and 5.2.x addressed a bunch of issues reported by the community. So if you&amp;rsquo;re noticing anything weird, make sure you upgrade to the latest version and, as always, check out the &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; for all the bug fixes.&lt;/p&gt;
&lt;p&gt;The features since last month can be found below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ContentVisibilityAutoStateChangeEvent&lt;/code&gt; has been added to element definitions (&lt;strong&gt;5.2.5&lt;/strong&gt;, &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/ContentVisibilityAutoStateChangeEvent&quot;&gt;MDN Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/14373&quot;&gt;#14373&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit-Svelte-CLI-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit, Svelte CLI and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Svelte-CLI-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;isActionFailure&lt;/code&gt; is a new helper method to check if a variable is an instanceof &lt;code&gt;ActionFailure&lt;/code&gt; - helpful for debugging parsing of user input (&lt;strong&gt;2.8.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12878&quot;&gt;#12878&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const load = ...&lt;/code&gt; declarations will now be typed automatically (&lt;strong&gt;svelte2tsx-0.7.23&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2540&quot;&gt;#2540&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The CLI will now include a &lt;code&gt;jsconfig.json&lt;/code&gt; in the &amp;lsquo;no type checking&amp;rsquo; template (&lt;strong&gt;0.6.2&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/290&quot;&gt;#290&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;When installing dependencies, the CLI will display the package manager&amp;rsquo;s output (&lt;strong&gt;0.6.3&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/305&quot;&gt;#305&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A short description will now be shown for each add-on in the CLI menu (&lt;strong&gt;0.6.5&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/cli/pull/299&quot;&gt;#299&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Instance types will now be provided automatically in Svelte 5 (&lt;strong&gt;svelte2tsx-0.7.23&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2553&quot;&gt;#2553&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A code lens indicator for &amp;ldquo;runes mode&amp;rdquo; will now appear atop a file when detected - &amp;ldquo;legacy mode&amp;rdquo; when not (&lt;strong&gt;language-server-0.17.4&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2554&quot;&gt;#2554&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://unsubscribe.jnr.cx/&quot;&gt;Unsubscribe&lt;/a&gt; is an interactive site that makes fun of how hard it is to unsubscribe from things on the internet these days&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dealcrane.com/?utm_source=discord&amp;utm_medium=social&amp;utm_campaign=beta_promo&amp;utm_content=svelte&quot;&gt;Dealcrane&lt;/a&gt; helps technology shoppers find discounts across popular internet shopping sites&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rawweb.org/&quot;&gt;Raw Web&lt;/a&gt; is a search engine for indexing the content of independent, especially personal, websites&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/StephenGunn/jovian&quot;&gt;Jovian Moon&amp;rsquo;s personal site&lt;/a&gt; features an interactive rocket ship to fly you straight to Jupiter (or anywhere else you want to go)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/songkeys/font-preview&quot;&gt;Font Preview&lt;/a&gt; makes it easy to analyze and explore font characters in the browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dunksandthrees.com/&quot;&gt;Dunks &amp;amp; Threes&lt;/a&gt; is a professional basketball analysis platform that provides data-driven NBA predictions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adressedubien.com/&quot;&gt;AdresseDuBien&lt;/a&gt; is a small utility to find addresses for real estate ads (for France) with a Libre Map implementation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jason1610.github.io/PixelAttack/&quot;&gt;PixelAttack&lt;/a&gt; takes an image, pixelizes it and makes the pixels fight each other&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Abdenasser/neohtop&quot;&gt;NeoHtop&lt;/a&gt; is a modern, process monitoring tool that combines the power of terminal-based system monitors with a clean, desktop-native UI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leaningtech/webvm&quot;&gt;WebVM&lt;/a&gt; is a Linux virtual machine that runs in your browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/8594eea15c6244908c3efad284fe2aa4?version=5.2.1&quot;&gt;Sveltris&lt;/a&gt; is Tetris built entirely in the Svelte REPL&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/paolo.ricciuti.me/feed/svelte-feed&quot;&gt;Svelte 🧡&lt;/a&gt; is a Bluesky feed to keep up to date on Svelte news in that application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://khromov.se/sveltekit-streaming-the-complete-guide/&quot;&gt;SvelteKit Streaming: The Complete Guide&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ti.to/mainmatter/svelte-5-runes-feb-2025&quot;&gt;Remote Workshop: Svelte 5 &amp;amp; Runes&lt;/a&gt; is taking place February 6-7th, 2025 and taught by Paolo Ricciuti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uSWMvDPpG0k&quot;&gt;Svelte 5: In Action | Build A Tasks App&lt;/a&gt; by Syntax&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mxM208nCvHc&quot;&gt;Svelte Society London&lt;/a&gt; - featuring Paolo with his talk, &lt;em&gt;Herd your async tasks!&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=1a-iKUCF5_g&quot;&gt;Ep. 83&lt;/a&gt; — You might not need an effect&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kVbQyKf4Oe4&quot;&gt;Ep. 84&lt;/a&gt; — manifest.build&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yY963ovcDQ0&quot;&gt;Ep. 85&lt;/a&gt; — @sheepdog/svelte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://fitech101.aalto.fi/web-software-development/&quot;&gt;Web software development (2024)&lt;/a&gt; is a self-study course for all things web development and features Svelte heavily&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/jdgamble555/async-fetching-in-svelte-5-826&quot;&gt;Async Fetching in Svelte 5&lt;/a&gt; by Jonathan Gamble&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.captaincodeman.com/cross-origin-isolation-with-sveltekit-vite-and-firebase&quot;&gt;Cross-Origin-Isolation with SvelteKit, Vite, and Firebase&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.matsimon.dev/blog/svelte-in-depth-effect-tracking&quot;&gt;The $effect.tracking rune&lt;/a&gt; by Matt Simon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Component Libraries&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://next.shadcn-svelte.com/&quot;&gt;shadcn-svelte&lt;/a&gt; now supports Svelte 5 and has brand new docs to go with the update&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zagjs.com/overview/introduction&quot;&gt;Zag&lt;/a&gt; now supports Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/skeletonlabs/skeleton/discussions/2919&quot;&gt;Skeleton V3&lt;/a&gt; is now in beta (and, as expected, supports Svelte 5)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1gpqusy/storybook_84_release/&quot;&gt;Storybook 8.4&lt;/a&gt; now supports Svelte 5 and CSF natively with component testing built-in&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Icon Libraries&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/friendofsvelte/svelicon&quot;&gt;svelicon&lt;/a&gt; converts Iconify SVG icons to type-safe components with one command&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.movingicons.dev/&quot;&gt;moving icons&lt;/a&gt; is a collection of animated icons based on the lucide icon library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oktaysenkan/monicon&quot;&gt;Monicon&lt;/a&gt; is an all-in-one icon library that provides 200,000+ icons from popular sets like Material Design, Feather, and Font Awesome&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Everything Else&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stephane-vanraes.github.io/svelte-multitoneimage/&quot;&gt;Svelte Multitone Image&lt;/a&gt; is a simple image renderer to apply multitone effects for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/barvian/number-flow&quot;&gt;number-flow&lt;/a&gt; is a component to transition, format, and localize numbers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thisuxhq/SvelteDnD&quot;&gt;sveltednd&lt;/a&gt; is a lightweight, flexible drag and drop library for Svelte 5 applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Tsuzat/ShadEditor&quot;&gt;ShadEditor&lt;/a&gt; is a highly extensible text editor for svelte made with TipTap and ShadCN UI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@friendofsvelte/tipex&quot;&gt;Tipex&lt;/a&gt; is an advanced rich text editor based on Tiptap and Prosemirror&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/uhteddy/svelte-bundle&quot;&gt;svelte-bundle&lt;/a&gt; is a tool for bundling Svelte components into a single HTML file&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mateothegreat/svelte5-router&quot;&gt;svelte5-router&lt;/a&gt; is an SPA router that allows you to divide &amp;amp; conquer your app with nested routers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mainmatter/sheepdog&quot;&gt;@sheepdog/svelte&lt;/a&gt; is a library to manage async tasks and concurrency with ease.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this huge month in Svelte! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next &lt;del&gt;time&lt;/del&gt; year! 👋&lt;/p&gt;</description><pubDate>Sun, 01 Dec 2024 00:00:00 GMT</pubDate></item><item><title>Advent of Svelte</title><link>https://svelte.dev/blog/advent-of-svelte</link><author>The Svelte team</author><description>&lt;p&gt;Last December, &lt;a href=&quot;https://bsky.app/profile/sveltesociety.dev&quot;&gt;Svelte Society&lt;/a&gt; presented an advent calendar&amp;rsquo;s worth of &lt;a href=&quot;https://advent.sveltesociety.dev/&quot;&gt;festive Svelte-themed code challenges&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This year, we&amp;rsquo;re turning it around: you get to relax while &lt;em&gt;we&lt;/em&gt; take on a challenge. We&amp;rsquo;ve set ourselves a goal of releasing one thing a day from here until Christmas, whether it&amp;rsquo;s a new feature in Svelte or SvelteKit or an improvement to the website.&lt;/p&gt;
&lt;p&gt;Follow &lt;a href=&quot;https://bsky.app/profile/svelte.dev&quot;&gt;@svelte.dev&lt;/a&gt; and &lt;a href=&quot;https://bsky.app/profile/sveltesociety.dev&quot;&gt;@sveltesociety.dev&lt;/a&gt; and check back every day to see what we&amp;rsquo;ve been cooking up.&lt;/p&gt;
&lt;h2 id=&quot;Day-1:-error-boundaries&quot;&gt;&lt;span&gt;Day 1: error boundaries&lt;/span&gt;&lt;a href=&quot;#Day-1:-error-boundaries&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This is a long-awaited and much-requested feature, that allows you to isolate and recover from errors that occur during rendering.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/svelte-boundary&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/tutorial/svelte/svelte-boundary&quot;&gt;tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-2:-each-without-as&quot;&gt;&lt;span&gt;Day 2: each without as&lt;/span&gt;&lt;a href=&quot;#Day-2:-each-without-as&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you just want to render something in an &lt;code&gt;{#each ...}&lt;/code&gt; block &lt;em&gt;n&lt;/em&gt; times, and don&amp;rsquo;t care about the value, you can now omit the &lt;code&gt;as&lt;/code&gt; part.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/each#Each-blocks-without-an-item&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/untitled#H4sIAAAAAAAAA3WP3WrDMAyFX0VoDFqWtGRXxWsKY4-x7MKx1SbUtY2tdi0h7z7s_myD9k6c8-lIZ0Ard4QCPzqKEVong8YC172hiOJzQD75ZCcBiyv87v0sHshw0loZ6Z6unGWyHFHgUvcHUEbGWDeo0qUyX2pw1diGhyeSqoMBDNkNdwIWMBYQpN2OyX4EpJ8uQMO_J0RrpNrWwyQFwEvGpvAMr1DXNVTjajnX_WF1SZ6n5JxyG2--XUY-Gcro7M_bMJyXdR-9kScBm9Drt7OWxpJp541kKpUz-52NAgJ5kjxZFFCtw_QuG9z3I7B1QVMQUPkjRGd6DbnjxZXRk-IySO6dgCqpWZ9l6Ppsw61U201we6vFv_3cPvc-18UCmY6MgsOexq_xBw8BVaUkAgAA&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-3:-exported-snippets&quot;&gt;&lt;span&gt;Day 3: exported snippets&lt;/span&gt;&lt;a href=&quot;#Day-3:-exported-snippets&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;You can now export snippets from a component&amp;rsquo;s &lt;code&gt;&amp;lt;script module&amp;gt;&lt;/code&gt;, for use in other components, as long as those snippets don&amp;rsquo;t reference anything belonging to the component instance.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/snippet#Exporting-snippets&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/16b7dd7105c248e59ec8a437697f588d&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-4:-form-control-default-values&quot;&gt;&lt;span&gt;Day 4: form control default values&lt;/span&gt;&lt;a href=&quot;#Day-4:-form-control-default-values&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;When you reset a form, the value of each &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; element reverts to its &lt;code&gt;defaultValue&lt;/code&gt;. This is normally the empty string, but you can now control it directly in your template.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/bind#input-bind:value&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/b30cfac16c3c4a3ab3d76ad20a5925cf&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-5:-MediaQuery-prefersReducedMotion-and-createSubscriber&quot;&gt;&lt;span&gt;Day 5: MediaQuery, prefersReducedMotion and createSubscriber&lt;/span&gt;&lt;a href=&quot;#Day-5:-MediaQuery-prefersReducedMotion-and-createSubscriber&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;It&amp;rsquo;s a three-in-one kind of day. &lt;code&gt;new MediaQuery(...)&lt;/code&gt; gives you an object with a reactive &lt;code&gt;current&lt;/code&gt; property that&amp;rsquo;s true when the media query matches. &lt;code&gt;prefersReducedMotion&lt;/code&gt; is an instance of &lt;code&gt;MediaQuery&lt;/code&gt; that matches if the user has expressed a &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion&quot;&gt;preference for reduced motion&lt;/a&gt;, helping you build accessible apps. Under the hood, both are using the &lt;code&gt;createSubscriber&lt;/code&gt; mechanism, which gives you an easy way to set up event listeners when a value is read inside an effect.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/svelte-reactivity#createSubscriber&quot;&gt;&lt;code&gt;createSubscriber&lt;/code&gt; docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/svelte-reactivity#MediaQuery&quot;&gt;&lt;code&gt;MediaQuery&lt;/code&gt; docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/svelte-motion#prefersReducedMotion&quot;&gt;&lt;code&gt;prefersReducedMotion&lt;/code&gt; docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/89f6f3bb738149fcb6e708cfce878e0f&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-6:-Spring-and-Tween&quot;&gt;&lt;span&gt;Day 6: Spring and Tween&lt;/span&gt;&lt;a href=&quot;#Day-6:-Spring-and-Tween&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We now have modern state-based alternatives to the &lt;code&gt;spring&lt;/code&gt; and &lt;code&gt;tweened&lt;/code&gt; stores of old. Smooth!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/tutorial/svelte/tweens&quot;&gt;&lt;code&gt;Tween&lt;/code&gt; tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/tutorial/svelte/springs&quot;&gt;&lt;code&gt;Spring&lt;/code&gt; tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/svelte-motion&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/8a021b2ec2064230bde4a10b08464876?version=5.8.0&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-7:-better-tutorial-navigation&quot;&gt;&lt;span&gt;Day 7: better tutorial navigation&lt;/span&gt;&lt;a href=&quot;#Day-7:-better-tutorial-navigation&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A lot of you disliked the dropdown navigation for the tutorial — essentially a giant, unwieldy &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; element — so we&amp;rsquo;ve replaced it with a hierarchical menu. Because it&amp;rsquo;s all just &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; elements, we get accessibility features for free. You can even navigate the tutorial with JavaScript disabled!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/tutorial/svelte/welcome-to-svelte&quot;&gt;tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-8:-function-bindings&quot;&gt;&lt;span&gt;Day 8: function bindings&lt;/span&gt;&lt;a href=&quot;#Day-8:-function-bindings&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;You can now do &lt;code&gt;bind:value={get, set}&lt;/code&gt; to validate and transform bound values. This works for all bindings, even on components.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/bind#Function-bindings&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/1ddd82f573b94201b3c8fcab33bf0a46?version=5.9.0&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-9:-error-and-warning-documentation&quot;&gt;&lt;span&gt;Day 9: error and warning documentation&lt;/span&gt;&lt;a href=&quot;#Day-9:-error-and-warning-documentation&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;When Svelte emits a warning or error (whether at build time, when the compiler is running, or when the app is running on the server or in the browser) it will now be accompanied by a link to the corresponding entry in the documentation containing a description (which is omitted from production builds, to save bytes) and — in some cases, with more to come — more details on why it happened and what you can do to fix it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/playground/8095884c1f5040ea846669b904083e25?version=5.10.0&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-10:-SvelteKit-init-hooks&quot;&gt;&lt;span&gt;Day 10: SvelteKit init hooks&lt;/span&gt;&lt;a href=&quot;#Day-10:-SvelteKit-init-hooks&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A lot of you wanted a place to put asynchronous setup work that happens before your SvelteKit app starts up. You can now export an &lt;code&gt;init&lt;/code&gt; function from &lt;code&gt;hooks.server.js&lt;/code&gt; and &lt;code&gt;hooks.client.js&lt;/code&gt; that will be awaited before any other stuff happens.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/hooks#Shared-hooks-init&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-11:-svelte-reactivity-window&quot;&gt;&lt;span&gt;Day 11: svelte/reactivity/window&lt;/span&gt;&lt;a href=&quot;#Day-11:-svelte-reactivity-window&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Today we added a whole new module. &lt;code&gt;svelte/reactivity/window&lt;/code&gt; exports a variety of reactive values like &lt;code&gt;innerWidth&lt;/code&gt;, &lt;code&gt;innerHeight&lt;/code&gt;, &lt;code&gt;scrollX&lt;/code&gt;, &lt;code&gt;scrollY&lt;/code&gt; and so on. Like the &lt;code&gt;MediaQuery&lt;/code&gt; introduced on day 5 and &lt;code&gt;Spring&lt;/code&gt; and &lt;code&gt;Tween&lt;/code&gt; from day 6, these are class instances with a reactive &lt;code&gt;current&lt;/code&gt; property that you can use in your template and in deriveds/effects. Behind the scenes, Svelte handles all the event listener stuff.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/svelte-reactivity-window&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/8ac86e10fdce485a99c29c95e0092df4?version=5.11.0&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-12:-custom-type-transport-in-SvelteKit&quot;&gt;&lt;span&gt;Day 12: custom type transport in SvelteKit&lt;/span&gt;&lt;a href=&quot;#Day-12:-custom-type-transport-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A &lt;code&gt;load&lt;/code&gt; function that runs on the server in your SvelteKit app isn&amp;rsquo;t restricted to returning things that can be serialized as JSON. You can return Maps, Sets, Dates, objects with cyclical references, even Promises, and SvelteKit will handle the serialization on the server and deserialization in the browser.&lt;/p&gt;
&lt;p&gt;As of today, you can also return things that &lt;em&gt;aren&amp;rsquo;t&lt;/em&gt; built in to the language, such as &lt;a href=&quot;/docs/svelte/$state#Classes&quot;&gt;classes containing state&lt;/a&gt;, or classes returned by your database ORM library, or whatever — just export a &lt;code&gt;transport&lt;/code&gt; object from your &lt;code&gt;hooks.js&lt;/code&gt; that provides an &lt;code&gt;encode&lt;/code&gt; and &lt;code&gt;decode&lt;/code&gt; function.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/hooks#Universal-hooks-transport&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackblitz.com/edit/sveltejs-kit-template-default-b5zbxomg?file=src%2Fhooks.js&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-13:-rise-of-the-robots&quot;&gt;&lt;span&gt;Day 13: rise of the robots&lt;/span&gt;&lt;a href=&quot;#Day-13:-rise-of-the-robots&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For those of you using LLMs to help you write code — via Cursor or Copilot or Claude or Bolt or v0 or some other interface — we now publish the documentation in a selection of robot-friendly &lt;code&gt;llms.txt&lt;/code&gt; files. This is experimental and will evolve over time, but by way of example here&amp;rsquo;s a &lt;a href=&quot;/playground/0de3c1c1a31d47bdbb7c4aa3477a6b46&quot;&gt;snake game&lt;/a&gt; built by Sonnet 3.5 with no additional prompting.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://bsky.app/profile/didiercatz.com&quot;&gt;Didier Catz&lt;/a&gt; and &lt;a href=&quot;https://bsky.app/profile/khromov.se&quot;&gt;Stanislav Khromov&lt;/a&gt; for building this!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/llms&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-14:-unmount-with-outros&quot;&gt;&lt;span&gt;Day 14: unmount with outros&lt;/span&gt;&lt;a href=&quot;#Day-14:-unmount-with-outros&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Now, if you need to programmatically mount and unmount a component, you can now pass an &lt;code&gt;outro: true&lt;/code&gt; option to &lt;code&gt;unmount&lt;/code&gt; to play transitions before it is removed from the DOM.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/imperative-component-api#unmount&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/a4ca332691204ccd887ec7b1df818182?version=5.13.0&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-15:-debugging-superpowers&quot;&gt;&lt;span&gt;Day 15: debugging superpowers&lt;/span&gt;&lt;a href=&quot;#Day-15:-debugging-superpowers&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The new &lt;code&gt;$inspect.trace(...)&lt;/code&gt; rune gives you detailed information about which state changes caused a derived or effect to re-run.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/$inspect#$inspect.trace()&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/d135c6f00beb4fa391725e59d8061604?version=5.14.0&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-16:-$app-state&quot;&gt;&lt;span&gt;Day 16: $app/state&lt;/span&gt;&lt;a href=&quot;#Day-16:-$app-state&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit&amp;rsquo;s &lt;code&gt;$app/stores&lt;/code&gt; module, which gives you a way to access information about (for example) the current page, now has a modern Svelte 5 state-based counterpart: &lt;code&gt;$app/state&lt;/code&gt;. It exposes all the same information, but using fine-grained state, and without the clunky &lt;code&gt;$&lt;/code&gt; prefix. &lt;code&gt;$app/stores&lt;/code&gt; is now deprecated, and will be removed in SvelteKit 3 next year.&lt;/p&gt;
&lt;p&gt;You can migrate automatically by running the following command in your SvelteKit app:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npx&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;sv&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;migrate&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;app-state&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/$app-state&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/tutorial/kit/page-state&quot;&gt;tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-17:-better-IntelliSense&quot;&gt;&lt;span&gt;Day 17: better IntelliSense&lt;/span&gt;&lt;a href=&quot;#Day-17:-better-IntelliSense&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The parser used by the language tools that power things like the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode&quot;&gt;Svelte for VS Code&lt;/a&gt; extension is the same one used by the Svelte compiler. Until today, it would fail if it encountered a syntax error, making it hard to provide things like autocomplete while you were in the middle of writing code.&lt;/p&gt;
&lt;p&gt;We just fixed that. Install the latest version of Svelte in your project, make sure your extensions are up to date, and feel the wind in your hair as you write your components.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/svelte.dev/post/3ldjajjbkwc2n&quot;&gt;demo video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-18:-playground-hovers&quot;&gt;&lt;span&gt;Day 18: playground hovers&lt;/span&gt;&lt;a href=&quot;#Day-18:-playground-hovers&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you&amp;rsquo;ve ever wondered how the Svelte compiler works, today&amp;rsquo;s update is for you. If you go to the &lt;a href=&quot;/playground&quot;&gt;playground&lt;/a&gt; and open the AST output tab, you&amp;rsquo;ll see the abstract syntax tree that the compiler operates on. As of today, hovering over code in the editor will highlight the corresponding section of the AST and vice versa. Clicking on a piece of code will expand the tree and scroll to the AST.&lt;/p&gt;
&lt;p&gt;The JS and CSS output tabs have also been upgraded — they now use sourcemaps to highlight the output code that corresponds to a given piece input, where applicable, and vice versa. We plan to use this to improve the sourcemaps themselves, which over time will result in smoother debugging when you&amp;rsquo;re building Svelte apps.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/playground&quot;&gt;playground&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/svelte.dev/post/3ldlkmce6oc2j&quot;&gt;demo video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-19:-single-file-SvelteKit-bundles&quot;&gt;&lt;span&gt;Day 19: single-file SvelteKit bundles&lt;/span&gt;&lt;a href=&quot;#Day-19:-single-file-SvelteKit-bundles&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;By default, SvelteKit uses a technique called &lt;em&gt;code-splitting&lt;/em&gt; so that you only load the JavaScript and CSS you need for the page you&amp;rsquo;re currently on. This helps make sure your app loads fast even if it grows very large.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://github.com/sveltejs/kit/issues/3882&quot;&gt;some situations&lt;/a&gt;, code-splitting is unhelpful — what you really want is a single .js file and a single .css file for your entire app. SvelteKit now supports this with the &lt;code&gt;output.bundleStrategy&lt;/code&gt; option.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/configuration#output&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/svelte.dev/post/3ldo633ht222p&quot;&gt;example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-20:-Vim-mode&quot;&gt;&lt;span&gt;Day 20: Vim mode&lt;/span&gt;&lt;a href=&quot;#Day-20:-Vim-mode&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The &lt;a href=&quot;/playground&quot;&gt;playground&lt;/a&gt; had a secret Vim mode that you could activate by appending &lt;code&gt;?vim=true&lt;/code&gt; to the URL, but it was buggy. We&amp;rsquo;ve fixed it, and added a toggle to the playground and the tutorial that remembers your preference between visits. But don&amp;rsquo;t worry: unlike normal Vim, you can quit by turning it off again (or closing the tab).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/playground&quot;&gt;playground&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/tutorial&quot;&gt;tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/svelte.dev/post/3ldqli3lk4k2g&quot;&gt;demo video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-21:-hash-based-routing&quot;&gt;&lt;span&gt;Day 21: hash-based routing&lt;/span&gt;&lt;a href=&quot;#Day-21:-hash-based-routing&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit now supports hash-based routing, in addition to the default pathname-based routing. This can be useful for purely client-side apps (including those you might build with Electron or Tauri), or situations where you don&amp;rsquo;t control the webserver and need to put everything on a single page.&lt;/p&gt;
&lt;p&gt;It comes with caveats — you can&amp;rsquo;t use server-rendering (or any server logic), and you need to make sure all your internal links start with &lt;code&gt;/#/&lt;/code&gt; or they won&amp;rsquo;t work. Other than, it&amp;rsquo;s just like any other SvelteKit app.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/configuration#router&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hash-based-routing.vercel.app/&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-22:-self-contained-apps&quot;&gt;&lt;span&gt;Day 22: self-contained apps&lt;/span&gt;&lt;a href=&quot;#Day-22:-self-contained-apps&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Following the introduction of the &lt;code&gt;bundleStrategy&lt;/code&gt; option on day 19, and hash-based routing yesterday, we now have the ability to generate fully self-contained apps with the &lt;code&gt;bundleStrategy: &amp;#39;inline&amp;#39;&lt;/code&gt; option. Together with Vite&amp;rsquo;s &lt;code&gt;assetsInlineLimit&lt;/code&gt; option, it&amp;rsquo;s possible to put an entire SvelteKit app — code, styles, fonts, images, audio and everything else — inside a single .html file that you can share with people on a floppy disk.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/configuration#output&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-snek.vercel.app/&quot;&gt;example downloadable Snake game&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-23:-download-from-playground&quot;&gt;&lt;span&gt;Day 23: download from playground&lt;/span&gt;&lt;a href=&quot;#Day-23:-download-from-playground&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We&amp;rsquo;ve added a &amp;lsquo;download app&amp;rsquo; option to the toolbox in the playground — selecting it will zip up the app, along with any packages you&amp;rsquo;ve imported, and download it to your machine so you can continue working on it in your editor of choice.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/playground&quot;&gt;playground&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Day-24:-clsx-built-in&quot;&gt;&lt;span&gt;Day 24: clsx built in&lt;/span&gt;&lt;a href=&quot;#Day-24:-clsx-built-in&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte now uses &lt;a href=&quot;https://github.com/lukeed/clsx&quot;&gt;clsx&lt;/a&gt; to parse &lt;code&gt;class&lt;/code&gt; attributes, meaning you can use objects and arrays to conditionally add and remove classes. It&amp;rsquo;s much more powerful and flexible than the &lt;code&gt;class:&lt;/code&gt; directive, and — since this is Svelte — you still get dead code elimination of unused CSS. This feature is particularly useful for all you Tailwind-heads.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte/class&quot;&gt;docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/tutorial/svelte/classes&quot;&gt;tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/61450f09983046efb18273d5c94db7b4?version=5.16.0&quot;&gt;demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;And that&amp;rsquo;s a wrap! Thanks for following along, everyone, and Merry Christmas to all who celebrate.&lt;/p&gt;</description><pubDate>Sun, 01 Dec 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: November 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-november-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;In case you missed the &lt;a href=&quot;/blog/svelte-5-is-alive&quot;&gt;announcement post&lt;/a&gt;, the brand new &lt;a href=&quot;/blog/the-omnisite&quot;&gt;omnisite&lt;/a&gt; or the maintainers &lt;a href=&quot;https://www.youtube.com/live/fAPFsRP-mbc?si=Atd1WNpoMddssSna&amp;t=13084&quot;&gt;shipping it LIVE during Svelte Summit&lt;/a&gt;... Svelte 5 is out!&lt;/p&gt;
&lt;p&gt;Also announced at Svelte Summit was &lt;a href=&quot;https://hack.sveltesociety.dev/2024&quot;&gt;SvelteHack 2024: A Svelte Hackathon (with not-so-svelte prizes)&lt;/a&gt;. The submission period ends January 9 and only projects started after October 18th are eligible. So get those &lt;code&gt;$&lt;/code&gt;s ready and start hacking!&lt;/p&gt;
&lt;p&gt;Since the release of Svelte 5, there&amp;rsquo;s already been one minor version to introduce a couple of helpful features. We&amp;rsquo;ll dive into those - along with a number of updates across the CLI, SvelteKit and more - in this month&amp;rsquo;s roundup...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you&amp;rsquo;ve only recently &lt;a href=&quot;/docs/svelte/v5-migration-guide&quot;&gt;migrated to Svelte 5&lt;/a&gt;, check out the last few months of updates for all the features that have gone into this release. For this month, you&amp;rsquo;ll see some marked &lt;code&gt;-next.XXX&lt;/code&gt;. These changes were in the 5.0 release.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Snippets can now be used to fill slots (&lt;strong&gt;5.0.0-next.262&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13427&quot;&gt;#13427&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hidden until-found&lt;/code&gt; and &lt;code&gt;beforematch&lt;/code&gt; are now available on DOM elements (&lt;strong&gt;5.0.0-next.266&lt;/strong&gt;, &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden#using_until-found&quot;&gt;MDN Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13612&quot;&gt;#13612&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; State mutations are not allowed in logic block expressions (&lt;strong&gt;5.0.0-next.269&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13625&quot;&gt;#13625&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getContext()&lt;/code&gt; is now allowed within &lt;code&gt;$derived&lt;/code&gt; runes (&lt;strong&gt;5.1.0&lt;/strong&gt;, &lt;a href=&quot;/docs/svelte/$derived&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13830&quot;&gt;#13830&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To see all the amazing work that has gone into making the Svelte compiler better - including everything that went into making migrations easier - check out the &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit-Svelte-CLI-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit, Svelte CLI and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Svelte-CLI-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;adapter-auto&lt;/code&gt; now supports the Bun package manager (&lt;strong&gt;3.3.1&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12854&quot;&gt;#12854&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;/blog/sv-the-svelte-cli&quot;&gt;Svelte CLI&lt;/a&gt; now supports a number of add-ons for new and existing projects. You can find the entire list of add ons in &lt;a href=&quot;https://github.com/sveltejs/cli&quot;&gt;the CLI Repository&lt;/a&gt; or by running &lt;code&gt;npx sv create&lt;/code&gt; from your command line.&lt;/li&gt;
&lt;li&gt;The Svelte extension now provides a Svelte 5 component migration command (&lt;strong&gt;extensions-109.1.0&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MuckRock/documentcloud-frontend/tree/sveltekit&quot;&gt;DocumentCloud&lt;/a&gt; is an all-in-one platform used by newsrooms around the world to manage primary source documents&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chord.fm/&quot;&gt;Chord&lt;/a&gt; is an app for recording podcasts and interviews in high quality&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://monokai.pro/&quot;&gt;Monokai.pro&lt;/a&gt; uses Svelte 5 now (See the &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1gd87ej/monokaipro_uses_svelte_5_now/&quot;&gt;Reddit Post&lt;/a&gt; for more details)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/flo-bit/svelte-audio-visualizations&quot;&gt;svelte audio visualizations&lt;/a&gt; are useful for visualizing voice input and output&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-auto-hd-+-fps/fcphghnknhkimeagdglkljinmpbagone&quot;&gt;avi12&amp;rsquo;s&lt;/a&gt; &lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-time-manager/fpoooibdndpjcnoodfionoeakeojdjaj&quot;&gt;YouTube&lt;/a&gt; &lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-like-dislike-shor/fdkpkpelkkdkjhpacficichkfifijipc&quot;&gt;extensions&lt;/a&gt; are great examples of how Svelte can be used in Chrome extensions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://multy.me/&quot;&gt;Multy&lt;/a&gt; is a simple tool that allows you to create a list of URLs, and share it with a single link&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/baterson/blackjack-svelte-5&quot;&gt;BlackJack&lt;/a&gt; is a card game built with Svelte 5, showcasing Svelte features for educational and demonstration purposes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fAPFsRP-mbc&amp;list=PL8bMgX1kyZTg28nrVEDoyRTQFWweUR6fn&quot;&gt;Svelte Summit Fall 2024&lt;/a&gt; was a blast! Keep an eye out on this playlist to see all the talks split up into individual videos&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8DQailPy3q8&quot;&gt;Svelte 5 Basics - Complete Svelte 5 Course for Beginners&lt;/a&gt; by Syntax&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8Sy04DGbJV8&quot;&gt;Reduce your SvelteKit &amp;amp; Svelte 5 bundle sizes with server load functions&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wlngWKmIShA&quot;&gt;Ep. 79&lt;/a&gt; — Changelog, Global/shared state, Kampsy-ui&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SHBxjWtlv4A&quot;&gt;Ep. 80&lt;/a&gt; — Changelog, formgator&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xnNARAcjl9w&quot;&gt;Ep. 81&lt;/a&gt; — Changelog, Inertia.js&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CS2Nuwdwvi0&quot;&gt;Ep. 82&lt;/a&gt; — Changelog, Migration guide&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://zellwk.com/blog/svelte-reactive-bindings-speed/&quot;&gt;Speed of Svelte reactive bindings vs keyboard events&lt;/a&gt; by Zell Liew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://passlock.dev/blog/passkeys/sveltekit-passkeys&quot;&gt;SvelteKit + Passkeys&lt;/a&gt; by Passlock&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shootmail.app/blog/local-first-web-development-with-replicache&quot;&gt;Local-First Web Development with Replicache: Building smooth user experiences&lt;/a&gt; by Shootmail&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/sebconejo/10-game-changing-tools-that-level-up-svelte-developers-in-2025-14g3&quot;&gt;10 game-changing tools that level up Svelte developers in 2025&lt;/a&gt; by Sébastien Conejo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=31CyquY8RNE&quot;&gt;Svelte 5 Is Like React, But Better&lt;/a&gt; by Theo - t3․gg&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aYyZUDFZTrM&quot;&gt;JavaScript framework reinvents itself… Did &amp;ldquo;runes&amp;rdquo; just ruin Svelte?&lt;/a&gt; by Fireship&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PaoloTorregroza/weather-testing&quot;&gt;Svelte 5 testing example&lt;/a&gt; is a good example project demonstrating how to test Svelte 5 applications with Vitest&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://originui-svelte.pages.dev/&quot;&gt;Origin UI - Svelte&lt;/a&gt; is an extensive collection of copy-and-paste components for quickly building app UIs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://choco-ui.com/blocks/cancellable&quot;&gt;Cancellable&lt;/a&gt; is a building block adds three reactive attributes to button and anchor elements to create a more consistent user experience across browsers and platforms&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dvcol/svelte-simple-router&quot;&gt;svelte-simple-router&lt;/a&gt; is a client-side router made for Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/flo-bit/svelte-openai-realtime-api&quot;&gt;svelte-openai-realtime-api&lt;/a&gt; is a Svelte component for using the OpenAI realtime api&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/themeselection/flyonui&quot;&gt;FlyonUI&lt;/a&gt; is an open-source Tailwind CSS Components Library with semantic classes and powerful JS plugins&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-next.codewithshin.com/&quot;&gt;Svelte-Next&lt;/a&gt; automates Svelte version updates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/khromov/sveltekit-dynamic-component-load-demo/#sveltekit-dynamic-component-load-demo&quot;&gt;SvelteKit Dynamic Component Load demo&lt;/a&gt; shows how you can dynamically load different Svelte components depending on what content your backend API delivers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tzezar/datagrid&quot;&gt;Tzezar&amp;rsquo;s datagrid&lt;/a&gt; is an easy to use, easy to customize, datagrid made in Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/uhteddy/svelte-bundle&quot;&gt;svelte-bundle&lt;/a&gt; is a tool for bundling Svelte components into single HTML files (with SSR!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/orefalo/svelte-virtuallists&quot;&gt;svelte-virtuallists&lt;/a&gt; keeps your tables and lists efficient and fast: only render the visible items, instead of displaying all your data in large lists&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/sveltick&quot;&gt;Sveltick&lt;/a&gt; is a lightweight traffic-tracking library for your Svelte apps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this huge month in Svelte! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate></item><item><title>Introducing the new Svelte CLI</title><link>https://svelte.dev/blog/sv-the-svelte-cli</link><author>Ben McCann</author><description>&lt;p&gt;We’ve just released &lt;a href=&quot;https://npmjs.com/package/sv&quot;&gt;sv&lt;/a&gt;, a new Command Line Interface (CLI) for creating, enhancing, and upgrading Svelte projects.&lt;/p&gt;
&lt;p&gt;One of the most common question we hear is &amp;ldquo;how do I set up Tailwind on my new project?&amp;rdquo;. Tailwind has &lt;a href=&quot;https://tailwindcss.com/docs/guides/sveltekit&quot;&gt;SvelteKit documentation&lt;/a&gt;, but it lists eight steps. While the community-led &lt;code&gt;svelte-add&lt;/code&gt; project could automate the process, few knew about it.&lt;/p&gt;
&lt;div class=&quot;max&quot;&gt;
&lt;figure style=&quot;max-width: 960px; margin: 0 auto&quot;&gt;
&lt;div style=&quot;aspect-ratio: 1.777777778; position: relative; margin: 0 auto;&quot;&gt;
	&lt;iframe style=&quot;position: absolute; width: 100%; height: 100%; left: 0; top: 0; margin: 0;&quot; src=&quot;https://www.youtube.com/embed/orYlYg27CiI&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;figcaption&gt;Introducing &lt;code&gt;sv&lt;/code&gt; at &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit Fall 2024&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Now, we&amp;rsquo;re offering that functionality via our own CLI, directly within the project creation screen. And not just for Tailwind — we have built-in add-ons for formatting, linting, testing, setting up databases and auth and i18n and more. Just run &lt;code&gt;npx sv create&lt;/code&gt; and follow the prompts:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;pre data-language=&quot;&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;$ npx sv create&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌  Welcome to the Svelte CLI! (v0.5.8)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;◇  Where would you like your project to be created?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  my-new-app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;◇  Which template would you like?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  SvelteKit minimal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;◇  Add type checking with Typescript?&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Yes, using Typescript syntax&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;◆  Project created&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;◆  What would you like to add to your project? (use arrow keys / space bar)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ prettier (https://prettier.io)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ eslint&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ vitest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ playwright&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ tailwindcss&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ drizzle&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ lucia&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ mdsvex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ paraglide&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  ◻ storybook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also run &lt;code&gt;npx sv add&lt;/code&gt; to apply add-ons to existing projects. In the near future, we will also be supporting add-ons contributed by the community within &lt;code&gt;sv&lt;/code&gt;. If you’re interested in building one, please subscribe to &lt;a href=&quot;https://github.com/sveltejs/cli/issues/184&quot;&gt;the issue&lt;/a&gt; in &lt;a href=&quot;https://github.com/sveltejs/cli&quot;&gt;the CLI repository&lt;/a&gt; to be notified when third party add-ons are supported.&lt;/p&gt;
&lt;p&gt;It doesn&amp;rsquo;t stop there. Over time, Svelte has accumulated a handful of CLIs: &lt;code&gt;svelte-check&lt;/code&gt; type-checks your project from the command line, &lt;code&gt;npx svelte-migrate&lt;/code&gt; helps you upgrade to new major versions, and in the future we might have even more capabilities. Remembering the package name of each tool is cumbersome, which is why we unify the experience under one roof, &lt;code&gt;sv&lt;/code&gt;. That means you can now run &lt;code&gt;sv migrate svelte-5&lt;/code&gt; to upgrade your Svelte 4 projects to Svelte 5. (The migration functionality can also be found in &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode&quot;&gt;Svelte for VS Code&lt;/a&gt; as well as in the &lt;a href=&quot;/playground&quot;&gt;playground&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;A huge thank you to Christopher Brown (&lt;a href=&quot;https://github.com/chbrown&quot;&gt;chbrown&lt;/a&gt;) who donated the sv package name on npm to make this CLI possible. This package merges the previous &lt;code&gt;create-svelte&lt;/code&gt; and community-led &lt;code&gt;svelte-add&lt;/code&gt; tools into a single package. Thank you to Manuel (&lt;a href=&quot;https://github.com/manuel3108&quot;&gt;manuel3108&lt;/a&gt;) and Adrian (&lt;a href=&quot;https://github.com/AdrianGonz97&quot;&gt;CokaKoala&lt;/a&gt;) who recently took over maintenance of the &lt;code&gt;svelte-add&lt;/code&gt; project and have joined as the newest Svelte maintainers in making this project an official part of Svelte. Also thank you to J (&lt;a href=&quot;https://github.com/babichjacob&quot;&gt;babichjacob&lt;/a&gt;) for creating the &lt;code&gt;svelte-add&lt;/code&gt; project and successfully stewarding it for years as an important part of the Svelte community.&lt;/p&gt;
&lt;p&gt;To see the CLI in action, check out this demo from Ben Davis and t3.gg...&lt;/p&gt;
&lt;div&gt;
&lt;figure style=&quot;max-width: 960px; margin: 0 auto&quot;&gt;
&lt;div style=&quot;aspect-ratio: 1.777777778; position: relative; margin: 0 auto;&quot;&gt;
	&lt;iframe style=&quot;position: absolute; width: 100%; height: 100%; left: 0; top: 0; margin: 0;&quot; src=&quot;https://www.youtube.com/embed/31CyquY8RNE?si=qvI28kFHkEL9LNOr&amp;amp;start=514&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;figcaption&gt;Introducing &lt;code&gt;sv&lt;/code&gt; at &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit Fall 2024&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;...or run &lt;code&gt;npx sv&lt;/code&gt; to try it out yourself.&lt;/p&gt;</description><pubDate>Thu, 24 Oct 2024 00:00:00 GMT</pubDate></item><item><title>Svelte 5 誕生</title><link>https://svelte.dev/blog/svelte-5-is-alive</link><author>The Svelte team</author><description>&lt;p&gt;およそ18ヶ月の開発を経て、そしてたくさんのコントリビューターによる数千ものコミットによって、ついに Svelte 5 は安定版(stable)になりました。&lt;/p&gt;
&lt;p&gt;このプロジェクトの歴史上、最も重要なリリースとなります。Svelte 5 は根本から書き直されました: あなたのアプリはより高速に、よりサイズが小さく、そしてより信頼性が高くなります。あなたはより一貫性があり、よりイディオマティックなコードを書くことができます。Svelte を使用したことがない方からすると、学ぶべきことがより少なくなりました。&lt;/p&gt;
&lt;p&gt;それにもかかわらず、Svelte はほぼ完全に Svelte 4 と後方互換性があります。ユーザーの多くは、最初のアップグレードを完全にシームレスに行うことができるでしょう:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;json&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	&quot;devDependencies&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;span class=&quot;highlight remove&quot;&gt;		&quot;@sveltejs/vite-plugin-svelte&quot;: &quot;^3.0.0&quot;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;span class=&quot;highlight remove&quot;&gt;		&quot;svelte&quot;: &quot;^4&quot;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;span class=&quot;highlight add&quot;&gt;		&quot;@sveltejs/vite-plugin-svelte&quot;: &quot;^4.0.0&quot;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;span class=&quot;highlight add&quot;&gt;		&quot;svelte&quot;: &quot;^5&quot;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;		// …&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;What-is-Svelte&quot;&gt;&lt;span&gt;What is Svelte?&lt;/span&gt;&lt;a href=&quot;#What-is-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte is a framework for building user interfaces on the web. It uses a compiler to convert declarative component code, based on HTML, CSS and JavaScript, into tightly optimised JavaScript.&lt;/p&gt;
&lt;p&gt;Because the compiler shifts a lot of the work out of the browser and into &lt;code&gt;npm run build&lt;/code&gt;, Svelte apps are small and fast. But beyond that, Svelte is designed to be an enjoyable and intuitive way to build apps: it prioritises getting stuff done.&lt;/p&gt;
&lt;p&gt;The team behind Svelte also maintains SvelteKit, an application framework that handles routing and data loading and server-side rendering and all the gory details that go into building modern websites and apps.&lt;/p&gt;
&lt;h2 id=&quot;What-changed-and-why&quot;&gt;&lt;span&gt;What changed, and why?&lt;/span&gt;&lt;a href=&quot;#What-changed-and-why&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For one thing, we’ve overhauled our website. You can read more about that &lt;a href=&quot;the-omnisite&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As for Svelte itself, we’ll cover the &lt;em&gt;why&lt;/em&gt; first. We’re not fans of change for change’s sake — in fact, Svelte changed less than any other major framework between 2019 (when we launched Svelte 3) and now, which is an eon in front end development. And people really liked Svelte 3 and 4 — it routinely tops developer surveys of satisfaction.&lt;/p&gt;
&lt;p&gt;So when we make changes, we don’t make them lightly.&lt;/p&gt;
&lt;p&gt;With more and more people building more and bigger applications with Svelte, the limitations of some of our original design decisions started to become more apparent. For example, in Svelte 4, reactivity is driven entirely by the compiler. If you change a single property of a reactive object in Svelte 4, the entire object is invalidated, because that’s all the compiler can realistically do. Meanwhile, other frameworks have adopted fine-grained reactivity based on &lt;em&gt;signals&lt;/em&gt;, leapfrogging Svelte’s performance.&lt;/p&gt;
&lt;p&gt;Equally, component composition is more awkward in Svelte 4 than it should be, largely because it treats event handlers and ‘slotted content’ as separate concepts, distinct from the props that are passed to components. This is because in 2019 it seemed likely that web components would become the primary distribution mechanism for components, and we wanted to align with the platform. This was a mistake.&lt;/p&gt;
&lt;p&gt;And while the &lt;code&gt;$:&lt;/code&gt; construct for reactively re-running statements is a neat trick, it turned out to be a footgun. It conflated two concepts (derived state and side-effects) that really should be kept separate, and because dependencies are determined when the statement is compiled (rather than when it runs), it resists refactoring and becomes a magnet for complexity.&lt;/p&gt;
&lt;p&gt;Svelte 5 removes these inconsistencies and footguns. It introduces &lt;em&gt;runes&lt;/em&gt;, an explicit mechanism for (among other things) declaring reactive state:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;let count = 0;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;$state&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(initial&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;$state&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Declares reactive state.&lt;/p&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;$state&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://svelte.dev/docs/svelte/$state&quot;&gt;https://svelte.dev/docs/svelte/$state&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;initial&lt;/span&gt; The initial value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;$state&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Interacting with state is unchanged: with Svelte — unlike other frameworks — &lt;code&gt;count&lt;/code&gt; is just a number, rather than a function, or an object with a &lt;code&gt;value&lt;/code&gt; property, or something that can only be changed with a corresponding &lt;code&gt;setCount&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;increment&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Console&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;The &lt;code&gt;console&lt;/code&gt; module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.&lt;/p&gt;
&lt;p&gt;The module exports two specific components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Console&lt;/code&gt; class with methods such as &lt;code&gt;console.log()&lt;/code&gt;, &lt;code&gt;console.error()&lt;/code&gt; and &lt;code&gt;console.warn()&lt;/code&gt; that can be used to write to any Node.js stream.&lt;/li&gt;
&lt;li&gt;A global &lt;code&gt;console&lt;/code&gt; instance configured to write to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstdout&quot;&gt;&lt;code&gt;process.stdout&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstderr&quot;&gt;&lt;code&gt;process.stderr&lt;/code&gt;&lt;/a&gt;. The global &lt;code&gt;console&lt;/code&gt; can be used without importing the &lt;code&gt;node:console&lt;/code&gt; module.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;/em&gt;: The global console object&amp;rsquo;s methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#a-note-on-process-io&quot;&gt;&lt;code&gt;note on process I/O&lt;/code&gt;&lt;/a&gt; for
more information.&lt;/p&gt;
&lt;p&gt;Example using the global &lt;code&gt;console&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints error message and stack trace to stderr:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//   Error: Whoops, something bad happened&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]:5:15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Script.runInThisContext (node:vm:132:18)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Object.runInThisContext (node:vm:309:38)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/process/execution:77:19&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]-wrapper:6:22&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at evalScript (node:internal/process/execution:76:60)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/main/eval_string:23:3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to stderr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example using the &lt;code&gt;Console&lt;/code&gt; class:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(out&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;err);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: [Error: Whoops, something bad happened], to err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to err&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@see&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/v20.11.1/lib/console.js&quot;&gt;source&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;optionalParams: any[]):&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;overload)&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Prints to &lt;code&gt;stdout&lt;/code&gt; with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to &lt;a href=&quot;http://man7.org/linux/man-pages/man3/printf.3.html&quot;&gt;&lt;code&gt;printf(3)&lt;/code&gt;&lt;/a&gt;
(the arguments are all passed to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count: %d&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count:&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@since&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;v0.1.100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Runes can be used in &lt;code&gt;.svelte.js&lt;/code&gt; and &lt;code&gt;.svelte.ts&lt;/code&gt; modules in addition to &lt;code&gt;.svelte&lt;/code&gt; components, meaning you can create reusable reactive logic using a single mechanism.&lt;/p&gt;
&lt;p&gt;Event handlers are now just props like any other, making it easy to (for example) know whether the user of your component supplied a particular event handler (which can be useful for avoiding expensive setup work), or to spread arbitrary event handlers onto some element — things that are particularly important for library authors.&lt;/p&gt;
&lt;p&gt;And the &lt;code&gt;slot&lt;/code&gt; mechanism for passing content between components (together with the confusing &lt;code&gt;let:&lt;/code&gt; and &lt;code&gt;&amp;lt;svelte:fragment&amp;gt;&lt;/code&gt; syntax) has been replaced with &lt;code&gt;{#snippet …}&lt;/code&gt;, a much more powerful tool.&lt;/p&gt;
&lt;p&gt;Beyond these changes are countless improvements: native TypeScript support (no more preprocessors!), many bugfixes, and performance and scalability improvements across the board.&lt;/p&gt;
&lt;h2 id=&quot;How-do-I-upgrade&quot;&gt;&lt;span&gt;How do I upgrade?&lt;/span&gt;&lt;a href=&quot;#How-do-I-upgrade&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you’re currently on Svelte 3, begin by &lt;a href=&quot;/docs/svelte/v4-migration-guide&quot;&gt;migrating to Svelte 4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;From there, you can update your &lt;code&gt;package.json&lt;/code&gt; to use the newest version of &lt;code&gt;svelte&lt;/code&gt; and ancillary dependencies like &lt;code&gt;vite-plugin-svelte&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You don’t &lt;em&gt;have&lt;/em&gt; to update your components immediately — in almost all cases, your app will continue working as-is (except faster). But we recommend that you begin to migrate your components to use the new syntax and features. You can migrate your entire app with &lt;code&gt;npx sv migrate svelte-5&lt;/code&gt;, or — if you’re using VS Code with the Svelte extension — you can migrate components one at a time by selecting ‘Migrate Component to Svelte 5 Syntax’ in your command palette.&lt;/p&gt;
&lt;p&gt;Svelte has a large and robust ecosystem of component libraries that you can use in your applications such as &lt;a href=&quot;https://shadcn-svelte.com/&quot;&gt;shadcn-svelte&lt;/a&gt;, &lt;a href=&quot;https://www.skeleton.dev/&quot;&gt;Skeleton&lt;/a&gt;, and &lt;a href=&quot;https://flowbite-svelte.com/&quot;&gt;Flowbite Svelte&lt;/a&gt;. But you don’t have to wait for these libraries to upgrade to Svelte 5 in order to upgrade your own application.&lt;/p&gt;
&lt;p&gt;Eventually, support for Svelte 4 syntax will be phased out, but this won’t happen for a while and you’ll have plenty of warning.&lt;/p&gt;
&lt;p&gt;For more details, see the &lt;a href=&quot;/docs/svelte/v5-migration-guide&quot;&gt;comprehensive Svelte 5 migration guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;Our-new-CLI&quot;&gt;&lt;span&gt;Our new CLI&lt;/span&gt;&lt;a href=&quot;#Our-new-CLI&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Along with a new version of Svelte, we have a new Command Line Interface (CLI), &lt;code&gt;sv&lt;/code&gt;, to go with it. You can learn all about it in &lt;a href=&quot;sv-the-svelte-cli&quot;&gt;the announcement blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-next&quot;&gt;&lt;span&gt;What’s next?&lt;/span&gt;&lt;a href=&quot;#What&#39;s-next&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We plan to release a new version of SvelteKit in the near future that takes advantage of the new Svelte 5 features. In the meantime, you can use Svelte 5 with SvelteKit today, and &lt;code&gt;npx sv create&lt;/code&gt; will create a new SvelteKit project with Svelte 5 installed alongside it.&lt;/p&gt;
&lt;p&gt;After that, we have a laundry list of ideas we want to implement in Svelte itself. This release is the foundation for many improvements that would have been impossible to build on top of Svelte 4, and we can’t wait to roll up our sleeves.&lt;/p&gt;</description><pubDate>Tue, 22 Oct 2024 00:00:00 GMT</pubDate></item><item><title>The Omnisite</title><link>https://svelte.dev/blog/the-omnisite</link><author>Rich Harris</author><description>&lt;p&gt;Launching &lt;a href=&quot;svelte-5-is-alive&quot;&gt;Svelte 5&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=fAPFsRP-mbc#t=3h15m40s&quot;&gt;the brand new &lt;code&gt;sv&lt;/code&gt; CLI&lt;/a&gt; wasn&amp;rsquo;t enough: we&amp;rsquo;ve also released a brand new website. You&amp;rsquo;re looking at it.&lt;/p&gt;
&lt;p&gt;Up until now, we&amp;rsquo;ve maintained multiple different sites under the &lt;code&gt;svelte.dev&lt;/code&gt; domain — the main site, for Svelte itself, along with &lt;code&gt;kit.svelte.dev&lt;/code&gt; and &lt;code&gt;learn.svelte.dev&lt;/code&gt;. This had some minor benefits, but was mostly a nuisance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;inability to search across sites&lt;/li&gt;
&lt;li&gt;subtly different navigation&lt;/li&gt;
&lt;li&gt;potential for broken links (at build time, SvelteKit automatically validates that every internal link is correct, but links to other sites are a different matter)&lt;/li&gt;
&lt;li&gt;preferences such as dark mode are not shared between sites&lt;/li&gt;
&lt;li&gt;navigating between (for example) documentation and the tutorial involves a full page reload&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From an implementation perspective, keeping multiple sites in sync proved to be a headache.&lt;/p&gt;
&lt;p&gt;Having everything under a single roof means you&amp;rsquo;ll have an easier time finding the information you need. Right now, the site includes documentation for &lt;a href=&quot;/docs/svelte&quot;&gt;Svelte&lt;/a&gt; and &lt;a href=&quot;/docs/kit&quot;&gt;SvelteKit&lt;/a&gt;; soon, it will also cover the CLI and additional packages like &lt;code&gt;vite-plugin-svelte&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;New-look&quot;&gt;&lt;span&gt;New look&lt;/span&gt;&lt;a href=&quot;#New-look&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We&amp;rsquo;ve also given the site a facelift. Our logo and hero artwork (&amp;lsquo;the machine&amp;rsquo;), designed by the brilliant Achim Vedam, are unchanged — these, and the Svelte orangey-red colour, are still the cornerstones of our visual identity.&lt;/p&gt;
&lt;p&gt;But many other aspects of the site have been cleaned up, starting with the five Bs — boxes, backgrounds, borders, box-shadows, bold text — which are tempting to overuse when organising information on a page. By getting rid of most of these and simplifying our colour palette, the site is calmer, more cohesive and less cramped.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve also updated our button styles so that they actually look like buttons (a radical concept in modern UI design, unfortunately).&lt;/p&gt;
&lt;h2 id=&quot;What-the-font&quot;&gt;&lt;span&gt;What the font?&lt;/span&gt;&lt;a href=&quot;#What-the-font&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Of course, the most salient difference is the typography. Previously, we used &lt;a href=&quot;https://overpassfont.org/&quot;&gt;Overpass&lt;/a&gt; for everything except code — logo, headers, UI elements and body copy. It&amp;rsquo;s surprisingly versatile given its origins as an adaptation of &lt;a href=&quot;https://en.wikipedia.org/wiki/Highway_Gothic&quot;&gt;Highway Gothic&lt;/a&gt; (the typeface used on road signs in the US since 1948, aside from a &lt;a href=&quot;https://www.bloomberg.com/news/articles/2016-01-27/the-official-u-s-highway-sign-font-is-changing-from-clearview-to-highway-gothic&quot;&gt;brief flirtation with Clearview&lt;/a&gt;), but it&amp;rsquo;s really not meant to be used for everything. We found ourselves making all sorts of ad hoc adjustments (tweaking colours, casing, line heights, spacing, weights and so on) and breaking other design rules (misaligning copy, adding unnecessary borders) to create hierarchy and reduce monotony. We needed a change.&lt;/p&gt;
&lt;p&gt;At the same time, we couldn&amp;rsquo;t bring ourselves to look the same as every other documentation site. Modern web design is stiflingly anodyne: everything is boxes, purple glowy nonsense, and the same handful of sans serif typefaces.&lt;/p&gt;
&lt;p&gt;We should find that last part strange. Open any book or magazine and it&amp;rsquo;s overwhelmingly likely that it will have been set in a serif typeface. There&amp;rsquo;s a reason for that: serifs make individual letters more distinct, aiding readability, and help to define the type&amp;rsquo;s personality.&lt;/p&gt;
&lt;p&gt;On screens, serif type is less common. That&amp;rsquo;s partly for historical and technological reasons: on the lower resolution screens of yore, particularly on Windows with its inferior font rendering, serifs lack definition and make readability &lt;em&gt;worse&lt;/em&gt;. But most users today have much sharper screens, making this less of an issue. Indeed, most newspaper and magazine websites, and many blogs, use serifs for their body copy.&lt;/p&gt;
&lt;p&gt;I suspect the real reason is mostly cultural: because we&amp;rsquo;ve come to associate serif type with the printed word, it is viewed as less &lt;em&gt;modern&lt;/em&gt;. Conversely, sans serif type is associated with digital products.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know about you, but I&amp;rsquo;ve come to associate digital products with unreliability: with bugs, cookie banners, exploitative business models, a disregard for privacy, planned obsolescence, and the many other sins of the technology industry.&lt;/p&gt;
&lt;p&gt;I want the things I use to have analog sensibilities. I like things that feel &lt;em&gt;weighty&lt;/em&gt;, that have an almost physical presence. (Svelte&amp;rsquo;s HTML-first design, and ‘the machine&amp;rsquo;, are, in a way, manifestations of this, even though we are inescapably a digital product.)&lt;/p&gt;
&lt;p&gt;Above all, I want a web that isn&amp;rsquo;t so damn homogeneous.&lt;/p&gt;
&lt;p&gt;So our new site uses a selection of typefaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DM Serif Display for headings&lt;/li&gt;
&lt;li&gt;EB Garamond for body copy, falling back to Georgia on low-resolution screens&lt;/li&gt;
&lt;li&gt;Fira Sans for UI elements&lt;/li&gt;
&lt;li&gt;Fira Mono for code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We know this is a controversial choice! Many people today engage with the written word almost exclusively through screens, and so the sight of serif typefaces might seem offensively strange. It may take some getting used to. We also recognise that there may be some legitimate readability concerns for some people with some combinations of operating system/screen/dark mode preference, and so we beg your understanding while we get everything just so.&lt;/p&gt;
&lt;h2 id=&quot;Contributing&quot;&gt;&lt;span&gt;Contributing&lt;/span&gt;&lt;a href=&quot;#Contributing&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;As with any big update, there are a few details that still need polish, some of which may have escaped our notice until now. &lt;a href=&quot;https://github.com/sveltejs/svelte.dev&quot;&gt;The codebase is now open source&lt;/a&gt;, and we welcome your contributions.&lt;/p&gt;</description><pubDate>Mon, 21 Oct 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: October 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-october-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;It&amp;rsquo;s October! Which can only mean one thing... &lt;a href=&quot;https://www.sveltesummit.com/2024/fall&quot;&gt;Svelte Summit Fall&lt;/a&gt; is only 19 days away! Stay up to date with the latest Svelte Summit news by &lt;a href=&quot;https://marketing.sveltesociety.dev/forms/nfrm_weLJnLY5&quot;&gt;subscribing to its official newsletter&lt;/a&gt; or follow along during the stream &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;on the Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks to the number of folks who have been trying the Svelte 5 release candidates, the maintainers have been hard at work in addressing bugs and implementing performance improvements for the upcoming release. This month, we&amp;rsquo;ll cover the most notable changes along with the many apps, resources and libraries that the community has created over the last few weeks.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Have you been wanting to migrate your project to Svelte 5? Want to test out the migration tool and give the team feedback? Then you should give the &lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages/migrate&quot;&gt;svelte-migrate tool&lt;/a&gt; a try! &lt;code&gt;npx svelte-migrate svelte-5&lt;/code&gt; is all you need to get started. If you run into any problems, please &lt;a href=&quot;https://github.com/sveltejs/svelte/issues&quot;&gt;file an issue&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what else is new...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Legacy components can now be manually instantiated asynchronously with the &lt;code&gt;sync&lt;/code&gt; option (&lt;strong&gt;5.0.0-next.237&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12970&quot;&gt;#12970&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;each&lt;/code&gt; block is now much better in SSR mode - removing an unnecessary declaration and caching the length of the array before iterating over it (&lt;strong&gt;5.0.0-next.242&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13060&quot;&gt;#13060&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A callstack will now appear if an infinite loop is detected - with the last ten effects printed out - in development mode (&lt;strong&gt;5.0.0-next.246&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13231&quot;&gt;#13231&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Projects that use &lt;code&gt;@sveltejs/enhanced-img&lt;/code&gt; should see a much smaller bundle thanks to module variables being inlined into the template (&lt;strong&gt;5.0.0-next.246&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13075&quot;&gt;#13075&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;There are now a11y warnings for &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; elements that are missing an aria-label and content (&lt;strong&gt;5.0.0-next.250&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13130&quot;&gt;#13130&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Animations now take into account &lt;code&gt;zoom&lt;/code&gt; when calculating transforms (&lt;strong&gt;5.0.0-next.254&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13317&quot;&gt;#13317&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;svelte:self&amp;gt;&lt;/code&gt; is now deprecated in runes mode. It&amp;rsquo;s not necessary since components can now import themselves (&lt;strong&gt;5.0.0-next.256&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/13333&quot;&gt;#13333&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte-check&lt;/code&gt;, the CLI is used by almost every Svelte project, is now much smaller (&lt;a href=&quot;https://github.com/sveltejs/language-tools/tree/master/packages/svelte-check&quot;&gt;repo&lt;/a&gt;, &lt;a href=&quot;https://x.com/BenjaminMcCann/status/1839349949605236753&quot;&gt;post&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Curious to see all that the maintainers have been up to in getting Svelte 5 production ready? Check out the &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; to see all the fixes - big and small!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SvelteKit now suports typed arrays in &lt;code&gt;load&lt;/code&gt; functions. It&amp;rsquo;s &amp;ldquo;not something to over-use, since it uses base64 encoding which is 33% larger than the raw data, but useful when you need it&amp;rdquo;(&lt;strong&gt;2.6.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12716&quot;&gt;#12716&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Components typed through Svelte 5&amp;rsquo;s &lt;code&gt;Component&lt;/code&gt; interface get proper intellisense (&lt;strong&gt;extensions-109.0.1&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Apps &amp;amp; Sites built with Svelte&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte0.dev/&quot;&gt;svelte0.dev&lt;/a&gt; lets you generate Svelte UIs using &lt;code&gt;shadcn/ui&lt;/code&gt; via a text prompt&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1fc2zy4/mini_spreadsheet_component_with_svelte_5/&quot;&gt;Mini Spreadsheet Component&lt;/a&gt; is a great introduction to how reactivity works in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://poofnote.com/&quot;&gt;Poof&lt;/a&gt; is a self-destructing notes app that includes features like an optional to do list, email alerts and deleting after a specific date&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kunft.cloud/&quot;&gt;kunft&lt;/a&gt; is a cloud platform for deploying docker containers and apps directly from GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://quickprompt.app/&quot;&gt;quickprompt&lt;/a&gt; is a browser extension to make saving and retrieving ChatGPT prompts easy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/fauntleroy/dither&quot;&gt;Dither&lt;/a&gt; is a lo-fi GIF chat app inspired by Return of the Obra Dinn and Meatspac.es&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/imputnet/cobalt&quot;&gt;cobalt&lt;/a&gt; helps you save anything from your favorite websites: video, audio, photos or gifs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-looper/bidjeabmcpopfddfcnpniceojmkklcje&quot;&gt;YouTube Looper&lt;/a&gt; is a custom loops extension for Youtube videos&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://leetlnk.com/&quot;&gt;LeetLink&lt;/a&gt; is a linktree-a-like with customizable themes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://whatchord.org/&quot;&gt;WhatChord&lt;/a&gt; is a chord finder for piano&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jxqu3/aiui&quot;&gt;AIUI&lt;/a&gt; is a web UI for OAI-Compatible APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Learning Resources&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://khromov.se/dockerizing-your-sveltekit-applications-a-practical-guide/&quot;&gt;Dockerizing Your SvelteKit Applications: A Practical Guide&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GJ3tObziewU&quot;&gt;Is Local First the future of web development?&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=5Sm6Igq0PQM&quot;&gt;The hidden benefit of upgrading to Svelte 5 - smaller bundle sizes&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=39sIJgr7B2Y&quot;&gt;SvelteKit Streaming Explained: When and How to Use It&lt;/a&gt; - Videos by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OETs1LKhW0A&quot;&gt;Svelte 5 - everything about the new APIs&lt;/a&gt; with Simon Holthausen at CITYJS CONFERENCE&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OlWWIbRz438&quot;&gt;Learn How To Use Svelte 5 Snippets&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=BWh-jVB3Hk8&quot;&gt;Svelte London - September 2024&lt;/a&gt; feat. maya with &amp;ldquo;The Joy of Side Projects ✨&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;This Week in Svelte&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nMs4X8-L_yo&quot;&gt;Ep. 74&lt;/a&gt; — Changelog, race and maybeStream, svelte:component obsolete&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=bFodoz9Mlbw&quot;&gt;Ep. 75&lt;/a&gt; — Changelog, $props, $state&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UeVKFYNXCrE&quot;&gt;Ep. 76&lt;/a&gt; — Changelog, svelte-fsm, script module, trailing slash&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9hUAhxWwgyg&quot;&gt;Ep. 77&lt;/a&gt; — Changelog, Context API, JSX and Single FIle Components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wb53pDClQm0&quot;&gt;Ep. 78&lt;/a&gt; — Changelog, Indeterminate checkbox, classes and actions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Svienna 09/2024&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=j51whPgjhns&quot;&gt;How to embrace Zod in your SvelteKit&lt;/a&gt; by Sasan Jaghori&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9HBVmUv7gpU&quot;&gt;Dates an intersection of a romantic story and Dates in JS&lt;/a&gt; by Domenik Reitzner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=iMUEZWaSzG8&quot;&gt;Svelte 5: Why the hell did you do that&lt;/a&gt; by Simon Holthausen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1frg58w/my_thoughts_on_upgrading_a_15000_loc_project_to/&quot;&gt;My thoughts on upgrading a ~15,000 LOC project to Svelte 5&lt;/a&gt; by /u/practisingdeeplurk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://matthewdavis.io/how-to-publish-an-unbundled-svelte-package-to-npm/&quot;&gt;How to Publish an Unbundled Svelte Package to npm&lt;/a&gt; by Matthew Davis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@wilkerlucio/migrating-youtube-looper-to-svelte-5-1a8b9b759582&quot;&gt;Migrating YouTube Looper to Svelte 5&lt;/a&gt; by Wilker Lucio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zellwk.com/blog/svelte-reactive-statements-breakout/&quot;&gt;Breaking out of Svelte&amp;rsquo;s reactive statements&lt;/a&gt; by Zell Liew&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://datavisualizationwithsvelte.com/&quot;&gt;Data Visualizations using Svelte and D3&lt;/a&gt; by DataVizSvelte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=j9Wf_nyKin4&quot;&gt;Sveltekit Data Fetching in 2024 Explained&lt;/a&gt; by Ben Davis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=IFoqCz4ujls&quot;&gt;DB or not DB?&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=UML33lIcEOc&quot;&gt;Github issues as CMS?&lt;/a&gt; by With Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=H_bT84X1hKc&quot;&gt;Crash course on Sveltekit Superforms&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=kbL2gu6wVmM&quot;&gt;Build a Full-stack Ecommerce Platform with Sveltekit, Vendure, Houdinigql, Shadcn-svelte&lt;/a&gt; by Lawal Adebola&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Libraries, Tools &amp;amp; Components&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tzezars-datagrid.vercel.app/&quot;&gt;Tzezar&amp;rsquo;s Datagrid&lt;/a&gt; is an easy to use and easy to customize datagrid component&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/khromov/sparklepost&quot;&gt;SparklePost&lt;/a&gt; is a demo application that implements interface patterns commonly found in native iOS and Android apps, using modern and performant web development techniques&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/friendofsvelte/tipex&quot;&gt;tipex&lt;/a&gt; is a customizable rich text editor for SvelteKit; based on TipTap&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: September 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-september-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;A bunch of updates to Svelte dropped in the last few weeks, plus a few quality of life improvements in the Svelte language tools.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a look...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$state.frozen&lt;/code&gt; has been replaced with &lt;code&gt;$state.raw&lt;/code&gt; (&lt;strong&gt;5.0.0-next.218&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#state-raw&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12808&quot;&gt;#12808&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$state.is&lt;/code&gt; has been removed. RIP, little guy (&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12916&quot;&gt;#12916&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte:options&lt;/code&gt; now lets you set the &lt;code&gt;css: &amp;quot;inject&amp;quot;&lt;/code&gt; compiler option on a per-component basis (&lt;strong&gt;5.0.0-next.209&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12660&quot;&gt;#12660&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;svelte:component&amp;gt;&lt;/code&gt; is now unnecessary in runes mode and therefore is deprecated (&lt;strong&gt;5.0.0-next.203/217&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12646&quot;&gt;#12646&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12694&quot;&gt;#12694&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:global&lt;/code&gt; is now allowed in more places - making it easier to use in &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tags and fixing issues with Tailwind&amp;rsquo;s &lt;code&gt;@apply&lt;/code&gt; (&lt;strong&gt;5.0.0-next.199&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/documentation/docs/02-template-syntax/05-styles-and-classes.md&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12560&quot;&gt;#12560&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Svelte&amp;rsquo;s typescript definition generator that comes with &lt;code&gt;@sveltejs/package&lt;/code&gt; will now warn when its diagnostics detect that a &lt;code&gt;d.ts&lt;/code&gt; file was not generated (&lt;strong&gt;svelte2tsx@0.7.14&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2428&quot;&gt;#2428&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;You can now specify a tsconfig in &lt;code&gt;emitDts&lt;/code&gt; - helpful when working in a monorepo (&lt;strong&gt;svelte2tsx@0.7.16&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2454&quot;&gt;#2454&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not covered in this list are a ton of efficiency and performance improvements across css and javascript compilation. If you&amp;rsquo;re interested, check out the &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; for more on how destructuring, state proxies and actions/styles/classes have all improved since last month.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://podcasts.apple.com/us/browse&quot;&gt;Apple Podcasts for the web&lt;/a&gt; now uses Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.studentaffairs.ucla.edu/&quot;&gt;UCLA Student Affairs&lt;/a&gt; has created their website with SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kakajuro/tidytube&quot;&gt;tidytube&lt;/a&gt; is a browser extension to declutter Youtube&amp;rsquo;s UI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://graphite.rs/blog/graphite-progress-report-q2-2024/&quot;&gt;Graphite&lt;/a&gt; is an open source 2D procedural graphics editor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.yogi.my/&quot;&gt;My Yogi&lt;/a&gt; is a yoga sequence builder and manager&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://markofdestiny.com/&quot;&gt;Mark Of Destiny&lt;/a&gt; is a multiplayer online strategy game where you are the ruler of a small developing kingdom&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/deozza/roguejack&quot;&gt;Dungeons and Jacks&lt;/a&gt; is a game mixing blackjack and roguelite elements&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/isaxk/ytdesk&quot;&gt;YT Desk&lt;/a&gt; is a standalone player for YouTube and Youtube Music with a miniplayer, Discord &amp;ldquo;Rich Presence&amp;rdquo; and global shortcuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://h.tronic247.com/introducing-synapsis-the-complete-ai-based-learning-platform&quot;&gt;Synapsis&lt;/a&gt; is an AI-based learning platform&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltecareers.com/&quot;&gt;SvelteCareers&lt;/a&gt; is a new Svelte job site that posts job alerts every Monday&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fR6DFKq13J0&quot;&gt;React VS Svelte - Which one should you choose in 2024?&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=_SpO5T96AYY&quot;&gt;Svelte 5 Runes - How to talk to the compiler&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=i-BkN3rTK0Q&quot;&gt;Creating your JavaScript framework?&lt;/a&gt; by Prismic (featuring Rich Harris)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7gZGVT5wdX4&quot;&gt;Local First with Replicache - How to Build a Full Stack App with Data Syncing Part 1&lt;/a&gt; by Syntax&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7N4maEDhy4w&quot;&gt;Avoid Using Effects To Derive Values In Svelte&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=HRz_rU2BlZc&quot;&gt;Understanding Effects In Svelte And When To Use Them&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uqnbA1xDe8k&quot;&gt;Svelte Dev Vlog (with Simon) — July 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QUdntTVombw&quot;&gt;Svelte London - August&lt;/a&gt;: Svelte&amp;rsquo;s Boundary Areas and Prototyping Tools (in Svelte!)&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=cdbSCoJ6_SU&quot;&gt;Ep. 71&lt;/a&gt; — Listening to object updates using $effect, IntelliJ, Icons&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=g_XLZlrGEuc&quot;&gt;Ep. 72&lt;/a&gt; — Changelog, using AI with Svelte 4 and 5, Icon components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=w1PfHMMbkvw&quot;&gt;Ep. 73&lt;/a&gt; — Changelog, OptimistiKit, database options&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.webdevladder.net/blog/svelte-5-signals-fix-its-glitchy-and-inconsistent-reactivity&quot;&gt;Svelte 5 signals fix its glitchy and inconsistent reactivity&lt;/a&gt; by webdevladder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://behind.flatspot.pictures/svelte-for-iiot-hmis-the-future-of-industrial-interfaces/&quot;&gt;Why Svelte is a game changer for IIoT development&lt;/a&gt; by Peter Repukat&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://captaincodeman.com/local-first-with-cloud-sync-using-firestore-and-svelte-5-runes&quot;&gt;Local First with Cloud Sync using Firestore and Svelte 5 Runes&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.yuki-dev.com/blogs/jv8q0pt_42vl#hef725b6a43&quot;&gt;SvelteKit - Potential Information Leakage from the State&lt;/a&gt; by Yuki Ishii&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/fine-grained-reactivity-in-svelte-5/&quot;&gt;Fine-Grained Reactivity in Svelte 5&lt;/a&gt; by Frontend Masters&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@wilkerlucio/broadcasting-messages-on-chrome-extensions-6f7718c662f5&quot;&gt;Broadcasting messages on Chrome extensions&lt;/a&gt; by Wilker Lucio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@jeooocarlo/everything-you-need-to-know-about-svelte-b63ff0f5d1b4&quot;&gt;Everything you need to know about: Svelte&lt;/a&gt; by Jeo Carlo Lubao&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CbZUXGhxZX8&quot;&gt;Svelte 4 vs Svelte 5 🎇. what are the difference&lt;/a&gt; by Lawal Adebola&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Yle8DtdMYmo&quot;&gt;How to deploy your Sveltekit application with Firebase Hosting and Firebase Functions (adapter-node)&lt;/a&gt; by Melchisedek Dulcio&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/playground/790fd75f954846be83afaa9e5ea821a8?version=4.2.18&quot;&gt;This gooey tooltip&lt;/a&gt; is fluid and satisfying&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/snehalbaghel/select-kit&quot;&gt;select-kit&lt;/a&gt; is a one-stop solution for all your select/combobox/autocomplete needs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/meursyphus/ssgoi&quot;&gt;ssgoi&lt;/a&gt; is a page transition library thats support animated page transition with every browser - including Safari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-put-next.vnphanquang.com/docs/preaction&quot;&gt;@svelte-put/preaction&lt;/a&gt; is a proof-of-concept Svelte preprocessor that allows usage of &amp;ldquo;preaction&amp;rdquo; - an extension to Svelte action with the ability to add static attributes on server-side&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/brenoliradev/svelte-standalone&quot;&gt;svelte-standalone&lt;/a&gt; is a series of configurations that aims to process any svelte widget to a single standalone javascript file&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/theetrain/svelte-cartesian&quot;&gt;svelte-cartesian&lt;/a&gt; is a single component that helps with rendering all prop combinations of a provided component for visual regression testing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Sun, 01 Sep 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: August 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-august-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;The ramp up to the Svelte 5 release has led to a bunch of huge improvements to both performance and customizability. Also in this month&amp;rsquo;s round-up: some minor SvelteKit updates and a return of the Svelte Dev Vlog.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Below, you&amp;rsquo;ll find the highlights from the Svelte 5 release notes (currently in &lt;a href=&quot;https://www.npmjs.com/package/svelte?activeTab=versions&quot;&gt;Release Candidate&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breaking: The names of the &lt;code&gt;svelte/reactivity&lt;/code&gt; helpers have been updated to include a &lt;code&gt;Svelte&lt;/code&gt; prefix (&lt;strong&gt;5.0.0-next.169&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/imports#svelte-reactivity&quot;&gt;Docs&lt;/a&gt; &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12248&quot;&gt;#12248&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Branch effects now have better DOM boundaries - reducing bugs in &lt;code&gt;{#each}&lt;/code&gt; blocks and during DOM manipulation (&lt;strong&gt;5.0.0-next.171&lt;/strong&gt; and &lt;strong&gt;5.0.0-next.182&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12215&quot;&gt;#12215&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12258&quot;&gt;#12258&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12383&quot;&gt;#12383&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Single-pass hydration has reduced DOM size and significantly improved hydration speed (&lt;strong&gt;5.0.0-next.179&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12335&quot;&gt;#12335&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12339&quot;&gt;#12339&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Breaking: Transitions now play on mount by default (&lt;strong&gt;5.0.0-next.177&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12351&quot;&gt;#12351&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS can now be included in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; when the &lt;code&gt;css: &amp;#39;injected&amp;#39;&lt;/code&gt; compiler option is enabled. This makes it trivial to include styles when rendering things like emails and OG cards, as well as massively simplifying toy setups where you can&amp;rsquo;t be bothered to figure out how to get CSS from the compiler into your server-rendered HTML (&lt;strong&gt;5.0.0-next.180&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/imports#svelte-server-render&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12374&quot;&gt;#12374&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Svelte will now warn in dev on &lt;code&gt;{@html ...}&lt;/code&gt; block hydration mismatches (&lt;strong&gt;5.0.0-next.182&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12396&quot;&gt;#12396&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;warningFilter&lt;/code&gt; compiler option lets you disable certain warnings for the whole application without having to add &lt;code&gt;svelte-ignore&lt;/code&gt; comments everywhere (&lt;strong&gt;5.0.0-next.186&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12296&quot;&gt;#12296&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;createRawSnippet&lt;/code&gt; API, allows low-level creation of programmatic snippets outside of Svelte templates (&lt;strong&gt;5.0.0-next.189&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/imports#svelte-createrawsnippet&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12425&quot;&gt;#12425&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit-and-beyond&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit and beyond&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-and-beyond&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The HTML attributes &lt;code&gt;enctype&lt;/code&gt; and &lt;code&gt;formenctype&lt;/code&gt; are now respected for forms with &lt;code&gt;use:enhance&lt;/code&gt; (plus, some other bug fixes in the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/main/packages/kit/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The cloudflare, cloudflare-workers, netlify and vercel adapters have all been updated to copy &lt;code&gt;.eot&lt;/code&gt;, &lt;code&gt;.otf&lt;/code&gt;, .&lt;code&gt;ttf&lt;/code&gt;, &lt;code&gt;.woff&lt;/code&gt;, and &lt;code&gt;.woff2&lt;/code&gt; font files when bundling (&lt;a href=&quot;https://github.com/sveltejs/kit/tree/main/packages&quot;&gt;CHANGELOGs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte-preprocess&lt;/code&gt;, the tool used in nearly every Svelte project, is now dependency free! The team has gradually reduced it from 44 dependencies in 5.0.0 down to zero in the latest release (&lt;a href=&quot;https://x.com/BenjaminMcCann/status/1810698991820321028&quot;&gt;Tweet&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;prerendered redirects will now be appended to the &lt;code&gt;_redirects&lt;/code&gt; file in the Cloudflare Pages adapter (&lt;strong&gt;adapter-cloudflare@4.7.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12199&quot;&gt;#12199&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2024/07/24/developers-want-more-more-more-the-2024-results-from-stack-overflow-s-annual-developer-survey/&quot;&gt;The StackOverflow 2024 Developer Survey&lt;/a&gt; results site was built using Svelte. Even better, the results show that 73% of developers that used it want to keep working with Svelte (More info in this &lt;a href=&quot;https://x.com/SvelteSociety/status/1816497535839858792&quot;&gt;tweet&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://azigy.com/&quot;&gt;azigy&lt;/a&gt; is a live, multiplayer quiz and trivia application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Hugo-Dz/on-device-transcription&quot;&gt;on-device-transcription&lt;/a&gt; is a ready-to-use, minimal app that converts any speech into text&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/braden-w/whispering&quot;&gt;Whispering&lt;/a&gt; is an open-source transcription application that provides global speech-to-text functionality&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.frogment.app/&quot;&gt;Frogment&lt;/a&gt; is an OpenAPI specification editor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://glance.sticai.com/&quot;&gt;SticAI Glance&lt;/a&gt; summarizes reddit post to actionable insights&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.overrice.nyc/&quot;&gt;Over Rice&lt;/a&gt; tracks the best halal carts around New York City&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ryanatkn/earbetter&quot;&gt;earbetter&lt;/a&gt; is an ear trainer and tools for playing and programming music and audio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://moonglow.app/&quot;&gt;Moonglow&lt;/a&gt; is a deep planetary simulation using GPGPU&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/imdj/opml-editor/&quot;&gt;opml-editor&lt;/a&gt; is an online OPML editor tailored for managing subscription lists more easily&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://praxis.trade/&quot;&gt;Praxis&lt;/a&gt; is an AI-powered trading journal that analyzes your trades and uncovers patterns&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lokal.so/&quot;&gt;Lokal&lt;/a&gt; lets you share your localhost with Public and https .local Address&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://formcrafts.com/&quot;&gt;formcrafts&lt;/a&gt; lets you create incredible forms like application forms, lead generation forms, surveys, payment forms, and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shootmail.app/&quot;&gt;Shootmail&lt;/a&gt; is a template-first mail platform with scheduling and analytics&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/HelgeSverre/supersaw&quot;&gt;Supersaw&lt;/a&gt; is Open Source Web Based Digital Audio Workstation (DAW)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=4TGwlWFoGvM&quot;&gt;Svelte Dev Vlog (with Rich) — June 2024&lt;/a&gt; on Svelte Society YouTube&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gujnZDyLDwU&quot;&gt;Svelte London — July 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-meets-vite-a-deep-dive-with-matias-capeletto-patakdev&quot;&gt;Svelte Meets Vite: A Deep Dive with Matias Capeletto (patakdev)&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Q7q77c5j7bQ&quot;&gt;Unleashing the Power of Claude Artifacts with Svelte and Sonnet 3.5&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=zNkw5K2W8AQ&quot;&gt;Perfect AI development setup for any programming language with Sonnet 3.5 and Claude Projects&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Qoqh9Mdmk80&quot;&gt;Local First from Scratch - How to make a web app with local data&lt;/a&gt; by Syntax.&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9yy1s7TAvXE&quot;&gt;Ep. 67&lt;/a&gt; — Changelog, Popover API, starting-style, resetting file inputs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=G6Z0l2plyIk&quot;&gt;Ep. 68&lt;/a&gt; — Changelog, EATView, Capacitor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sVp0RukyfYk&quot;&gt;Ep. 69&lt;/a&gt; — Changelog, socket activation, open source support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Da-xOep6hcs&quot;&gt;Ep. 70&lt;/a&gt; — Changelog, Taiwind CSS and Svelte Motion, when tu use $derived&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1e5522o/from_react_to_svelte_our_experience_as_a_dev_shop/&quot;&gt;From React To Svelte - Our Experience as a Dev Shop&lt;/a&gt; by gimp3695&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.aakashgoplani.in/series/sveltekitauth-sveltekit&quot;&gt;Authentication in SvelteKit using SvelteKitAuth&lt;/a&gt; by Aakash Goplani&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thespatula.io/svelte/sveltekit_supabase/&quot;&gt;SvelteKit (Svelte 5) and Supabase&lt;/a&gt; by the spatula&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://captaincodeman.com/firebase-signinwithredirect-localhost-and-sveltekit&quot;&gt;Firebase signInWithRedirect, localhost, and SvelteKit&lt;/a&gt;, &lt;a href=&quot;https://www.captaincodeman.com/dealing-with-dialogs-in-svelte&quot;&gt;Dealing with Dialogs in Svelte&lt;/a&gt; and &lt;a href=&quot;https://www.captaincodeman.com/build-a-docker-container-from-a-pnpm-monorepo&quot;&gt;Build a Docker Container from a pnpm monorepo&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/introducing-svelte-5/&quot;&gt;Introducing Svelte 5&lt;/a&gt; by Frontend Masters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=c2QqPuG6mw0&amp;t=683s&quot;&gt;Introduction to Sveltekit (#1) Parahack&amp;rsquo;s Let learn Sveltekit&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=pUlWbIqdkYE&quot;&gt;image optimization in sveltekit&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=pGS_07zP-no&quot;&gt;Deploy your sveltekit app to cloudflare pages&lt;/a&gt; by Lawal Adebola&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=IsJtmbvW2SI&quot;&gt;How Svelte runes syntax is better than plain JavaScript with signals&lt;/a&gt; by webdevladder&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sveaflet.vercel.app/&quot;&gt;Sveaflet&lt;/a&gt; is an open-source Map component library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://animation-svelte.vercel.app/&quot;&gt;Svelte Magic UI&lt;/a&gt; are componetns built using Tailwind CSS, Tweened, Spring and Svelte Motion&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://figblocks.mohanvadivel.com/&quot;&gt;Figblocks&lt;/a&gt; is an open-source UI component library for building Figma plugins with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1e26pfc/vs_code_supports_custom_tab_labels/&quot;&gt;VS Code Supports Custom Tab Labels&lt;/a&gt; (a good reminder for folks who haven&amp;rsquo;t sent it up yet)&lt;/li&gt;
&lt;li&gt;Storybook did a prerelease of &lt;code&gt;@storybook/addon-svelte-csf&lt;/code&gt; with support for Svelte v5. If you&amp;rsquo;re using it, share your feedback on their RFC: &lt;a href=&quot;https://github.com/storybookjs/addon-svelte-csf/discussions/191&quot;&gt;storybookjs/addon-svelte-csf#191&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paoloricciuti/sveltekit-search-params&quot;&gt;sveltekit-search-params&lt;/a&gt; released &lt;code&gt;v3.0.0&lt;/code&gt; with better types&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paoloricciuti/optimistikit&quot;&gt;optimistikit&lt;/a&gt; got revamped to fully support runes in &lt;code&gt;v1.0.0&lt;/code&gt; while keeping the &lt;code&gt;@legacy&lt;/code&gt; tag if you still can&amp;rsquo;t update from stores&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next month 👋&lt;/p&gt;</description><pubDate>Thu, 01 Aug 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: July 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-july-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;This month, we got a bunch of new features in the Svelte 5 release candidate, Rich Harris &lt;a href=&quot;https://www.youtube.com/live/uWLTDUjNrhQ&quot;&gt;explained to Prismic&amp;rsquo;s CEO&lt;/a&gt; how Svelte optimizes for vibes and Geoff Rich &lt;a href=&quot;https://cascadiajs.com/2024/talks/optimize-for-vibes-svelte-5-and-the-new-age-of-svelte&quot;&gt;shared even more about this philosophy at CascadiaJS 2024&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s jump in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Below, you&amp;rsquo;ll find the highlights from the Svelte 5 release notes (now in &lt;a href=&quot;https://www.npmjs.com/package/svelte?activeTab=versions&quot;&gt;Release Candidate&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now declare props in runes mode more succinctly using &lt;code&gt;let props = $props()&lt;/code&gt; (&lt;strong&gt;5.0.0-next.167&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12201&quot;&gt;#12201&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;on&lt;/code&gt; import from &lt;code&gt;svelte/events&lt;/code&gt; allows you to preserve the order in which event handlers are called in more situations (&lt;strong&gt;5.0.0-next.152&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/imports#svelte-events&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11912&quot;&gt;#11912&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;Component&lt;/code&gt; type now represents the new shape of Svelte components (&lt;strong&gt;5.0.0-next.143&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11775&quot;&gt;#11775&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;svelte:document&amp;gt;&lt;/code&gt; has new &lt;code&gt;activeElement&lt;/code&gt; and &lt;code&gt;pointerLockElement&lt;/code&gt; bindings (&lt;strong&gt;5.0.0-next.150&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11879&quot;&gt;#11879&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;svelte:element&amp;gt;&lt;/code&gt;, CSS custom property wrappers and string normalization have all been simplified and made more performant (&lt;strong&gt;5.0.0-next.152&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11773&quot;&gt;#11773&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11948&quot;&gt;#11948&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11954&quot;&gt;#11954&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11792&quot;&gt;#11792&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11949&quot;&gt;#11949&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;render&lt;/code&gt;, &lt;code&gt;mount&lt;/code&gt; and &lt;code&gt;hydrate&lt;/code&gt; options are now actually optional if no properties are required (&lt;strong&gt;5.0.0-next.163&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/imports#svelte&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/12111&quot;&gt;#12111&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The node and Cloudflare adapters got a few upgrades this month:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;BODY_SIZE_LIMIT&lt;/code&gt; environment variable adds unit suffixes support to the adapter-node - making it easier to write and comprehend large byte values (&lt;strong&gt;adapter-node@5.2.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/adapter-node#Environment-variables-BODY_SIZE_LIMIT&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11680&quot;&gt;#11680&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Node servers can now listen to the &lt;code&gt;sveltekit:shutdown&lt;/code&gt; event (replacing the more abrupt &lt;code&gt;exit&lt;/code&gt;) that is emitted after the HTTP server has closed all connections (&lt;strong&gt;adapter-node@5.1.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/adapter-node#Graceful-shutdown&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12153&quot;&gt;#12153&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Cloudflare adapter will now only throw a &lt;code&gt;_routes.json&lt;/code&gt; error when the file exists but there are no configured routes in svelte.config (&lt;strong&gt;adapter-cloudflare@4.5.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12360&quot;&gt;#12360&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://shootmail.app/&quot;&gt;Shootmail&lt;/a&gt; is an email template and content creation tool&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wplatest.co/&quot;&gt;wplatest&lt;/a&gt; automates your WordPress plugin updates across multiple websites&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Michael-Obele/Svelte-MiniApps&quot;&gt;Svelte-MiniApps&lt;/a&gt; is a collection of bite-sized, user-friendly tools built with SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.interiorrenderai.com/&quot;&gt;Interior Render AI&lt;/a&gt; redesigns your interior with AI in seconds&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/uWLTDUjNrhQ&quot;&gt;Prismic 🧡 Svelte: Meetup with Rich Harris, creator of Svelte!&lt;/a&gt; by Prismic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QTJtR8IUsQM&quot;&gt;How Svelte and RSCs are Changing Web Development with Rich Harris, Creator of Svelte&lt;/a&gt; by This Dot Media&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?app=desktop&amp;v=1TSLEzNzGQM&quot;&gt;Learn Why JavaScript Frameworks Love Signals By Implementing Them&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=tErKyuUTzsM&quot;&gt;The Svelte 5 Reactivity Guide For The Modern Developer&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=HnNgkwHZIII&quot;&gt;Crafting Magical Spells Using Svelte&amp;rsquo;s Powerful Reactivity&lt;/a&gt; by Joy Of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=geAcAzheu_Y&quot;&gt;Practical Svelte 5 - Shopping Cart&lt;/a&gt; by Huntabyte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/cascadiajs-2024/&quot;&gt;CascadiaJS 2024: Optimize for vibes&lt;/a&gt; by Geoff Rich (Livestream of Geoff&amp;rsquo;s talk &lt;a href=&quot;https://www.youtube.com/live/o2VQXBI_yk8?si=Vv4FSZ367dC50Ii7&amp;t=4110&quot;&gt;starts at 1:08:30&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;This Week in Svelte - deep dives into the Svelte changelog and new learnings from the week:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yaAGazsz6Lc&quot;&gt;Ep. 66&lt;/a&gt; - adapter-node, new SvelteKit docs, Debugging Event modifiers in Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=5JNcz7mOfMI&quot;&gt;7 Jun&lt;/a&gt; - Validation libraries, $effect.active() usage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=edoYKNgUQQI&quot;&gt;31 May&lt;/a&gt; - Floating UI, StartStopNotifier&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Svelte Society Vienna&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=T4zwmtUW7Gw&quot;&gt;Ermin Celikovic — Building Web Components using Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=4idUQlFV02I&quot;&gt;Domenik Reitzner — Svelte 5 Runes explained for Vue devs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=J5srLwhlBdw&quot;&gt;Svelte London — June 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=4TGwlWFoGvM&quot;&gt;Svelte Dev Vlog — June 2024&lt;/a&gt; with Rich Harris&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1dggvhh/lessons_using_sveltekit_to_build_a_dataviz/&quot;&gt;Lessons using sveltekit to build a dataviz platform&lt;/a&gt; by DNLBLN on Reddit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://crystallize.com/blog/best-frontend-frameworks?utm_medium=social&amp;utm_source=Discord&quot;&gt;Frontend Frameworks in 2024 for eCommerce&lt;/a&gt; by Crystallize&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.launchfa.st/blog/sveltekit-unplugin-icons&quot;&gt;Using Unplugin Icons in SvelteKit: A Step-by-Step Guide&lt;/a&gt; by Rishi Raj Jain&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tronic247.com/migrating-tronic247-from-wordpress-to-sveltekit?_&quot;&gt;Migrating Tronic247 from WordPress to SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.tronic247.com/methods-to-load-data-in-svelte&quot;&gt;Methods to Load Data in Svelte and SvelteKit&lt;/a&gt; by tronic247&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ZT0yQgUIZho&quot;&gt;The Easiest Way to Build Web Apps&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=A-6MVm0yt20&quot;&gt;13 Svelte Concepts you Need to Know&lt;/a&gt; by Awesome&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=11AbCRomRhs&quot;&gt;SvelteKit Form Validation with Zod&lt;/a&gt; by Ross Robino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=6w3v9QD2ae4&quot;&gt;Bringing together Auth and Payments with AirBadge&lt;/a&gt; by Stripe Developers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=X37exLLQHwg&quot;&gt;Svelte 4 vs. Svelte 5 – Runes and Snippets&lt;/a&gt; by SvelteRust&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cardgraph22/svelte5-commenter&quot;&gt;svelte5-commenter&lt;/a&gt; is a component demonstration for the common comments section&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ssc-project/ssc&quot;&gt;SSC&lt;/a&gt; (Speedy Svelte Compiler) is a super-fast Svelte compiler written in Rust&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next month 👋&lt;/p&gt;</description><pubDate>Mon, 01 Jul 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: June 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-june-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;The maintainers have been hard at work getting the &lt;a href=&quot;/blog/svelte-5-release-candidate&quot;&gt;Svelte 5 Release Candidate&lt;/a&gt; ready for release. In this month&amp;rsquo;s newsletter, you&amp;rsquo;ll find highlights from the pre-release &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; and a host of items from our community showcase.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bind:&lt;/code&gt; is now disallowed on component exports in runes mode and has much better types to tell if a prop is &lt;code&gt;$bindable&lt;/code&gt; (&lt;strong&gt;5.0.0-next.113, 114 and 125&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#bindable&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11238&quot;&gt;#11238&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11225&quot;&gt;#11225&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11498&quot;&gt;#11498&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tons of work on the &lt;code&gt;migrate&lt;/code&gt; tool to make migrating to Svelte 5 syntax easier (&lt;strong&gt;5.0.0-next.116, 136 and 137&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/old-vs-new&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11334&quot;&gt;#11334&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11659&quot;&gt;#11659&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11704&quot;&gt;#11704&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MathML is now supported (&lt;strong&gt;5.0.0-next.120&lt;/strong&gt;, &lt;a href=&quot;https://www.w3.org/TR/mathml-core/#mathml-elements-and-attributes&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11387&quot;&gt;#11387&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Svelte Inspector is now supported (&lt;strong&gt;5.0.0-next.125&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/inspector.md&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11514&quot;&gt;#11514&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;$state.is&lt;/code&gt; rune lets you compare values or check if an object exists within a deeply reactive object/array (&lt;strong&gt;5.0.0-next.134&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#state-is&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11613&quot;&gt;#11613&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;rootDir&lt;/code&gt; compiler option makes filenames relative to simplify development in monorepos or complex folder structures (&lt;strong&gt;5.0.0-next.135&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11627&quot;&gt;#11627&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://onlook.dev/&quot;&gt;Onlook&lt;/a&gt; is a chrome extension that enables designers to contribute to their team&amp;rsquo;s UI codebase&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fluid-type.tolin.ski/&quot;&gt;Fluid Type Generator&lt;/a&gt; is a modern fluid type generator built with Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pauslyapp/lch-palette&quot;&gt;LCH Palette Generator&lt;/a&gt; is a tool that allows you to easily create and save gradient palettes to be used in UI design&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dezain.io/typepost/&quot;&gt;Typepost&lt;/a&gt; is a simple text post generator for social media&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://equimake.com/&quot;&gt;Equimake&lt;/a&gt; is a collaborative real-time 3D platform for learners, gamers, artists, and coders&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Neosoulink/svelte.dev-machine&quot;&gt;svelte.dev-machine&lt;/a&gt; is a physical based animation to replicate the Svelte machine on the svelte.dev homepage&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mjYt35lN3-k&quot;&gt;Svelte 5: Compiler, Signals, and Web App Performance&lt;/a&gt; by JSJ 627 with Rich Harris&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=EggM2qMzqdU&quot;&gt;Svelte London - May 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;This Week in Svelte - deep dives into the Svelte changelog and new learnings from the week:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8FXwOtj5NpY&quot;&gt;3 May&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3WcU7imp0lQ&quot;&gt;10 May&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=O1VoD-xhYqs&quot;&gt;17 May&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HDjPn8FH-X0&quot;&gt;24 May&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://captaincodeman.com/securing-your-sveltekit-app&quot;&gt;Securing Your SvelteKit App&lt;/a&gt; and &lt;a href=&quot;https://captaincodeman.com/prevent-waterfalls-from-multiple-sveltekit-server-hooks-in-sequence&quot;&gt;Prevent Waterfalls from Multiple SvelteKit Server Hooks in sequence&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.build/p/svelte-5-todo-app-with-firebase-X1Tr3J&quot;&gt;Svelte 5 Todo App with Firebase&lt;/a&gt; by Jonathan Gamble&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLBvLZ-dkskrKpA01nOZiQE_1SBFyFNB-6&quot;&gt;Svelte 5 Runes Demystified&lt;/a&gt; by Peter Makes Websites Ltd&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=S1lK4eJH0tI&amp;t=6s&quot;&gt;How to Build an eCommerce Store with SvelteKit&lt;/a&gt; by Crystallize&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/skeletonlabs/floating-ui-svelte&quot;&gt;Floating UI Svelte&lt;/a&gt; is a library for positioning floating elements and handling interaction&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tncrazvan/svelte-animated-pixels&quot;&gt;Svelte Animated Pixels&lt;/a&gt; provides an easy way to create pixelated canvas animations by just declaring maps of pixels a strings&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/passlock-dev/svelte-passkeys&quot;&gt;SvelteKit Passkey Template&lt;/a&gt; is a SvelteKit template project featuring Passkey authentication, Google sign in and mailbox verification&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ndom91/svelte-infinite&quot;&gt;svelte-infinite&lt;/a&gt; is an infinite scrolling library designed for Svelte 5 with runes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shinokada/svelte-next&quot;&gt;svelte-next&lt;/a&gt; attempts to automated Svelte library updates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next month 👋&lt;/p&gt;</description><pubDate>Sat, 01 Jun 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: May 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-may-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;Svelte Summit was last week - featuring a number of fantastic talks from across the community. In the final talk, What You Can Do For Your Framework, Rich Harris (with a little help from PuruVJ&amp;rsquo;s neoconfetti library) &lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=O5HR0PF-TDvNdVNf&amp;t=8898&quot;&gt;announced that Svelte 5 is now in the &amp;ldquo;Release Candidate&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lots of pre-release changes to cover in this post and a host of community showcase items... so let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id=&quot;Highlights-from-Svelte-Summit-Spring-2024&quot;&gt;&lt;span&gt;Highlights from Svelte Summit Spring 2024&lt;/span&gt;&lt;a href=&quot;#Highlights-from-Svelte-Summit-Spring-2024&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Below, you&amp;rsquo;ll find links to all the talks in the livestream version of Svelte Summit.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=ha0iruRIXv2Mql1w&amp;t=894&quot;&gt;Simple and Sustainable web development in academic libraries with Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=bqRe0Fbykm9sUqZS&amp;t=1517&quot;&gt;Building a SaaS module for SvelteKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=o3rn0WqGBBQckF_2&amp;t=2680&quot;&gt;Intro To LayerChart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=dBL-EfWTLtu4fYSt&amp;t=4026&quot;&gt;Spatial Programming with Threlte Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=5KKpLYXi0fLQqwZZ&amp;t=4891&quot;&gt;Convex (Sponsored talk)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=NMhjp5rBWgf3lV76&amp;t=5903&quot;&gt;Kitbook: Easily Build, Document, Inspect &amp;amp; Test Svelte Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=8p5CRD9z-LADsMtO&amp;t=6749&quot;&gt;Fullstack Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/gkJ09joGBZ4?si=h4LKM12I_vJBBLZ-&amp;t=8515&quot;&gt;What You Can Do For Your Framework&lt;/a&gt; - also covers a ton of the new features listed below&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These will all get broken up into more sharable (and rewatchable) videos over time, so make sure you subscribe to the &lt;a href=&quot;https://www.youtube.com/@SvelteSociety/featured&quot;&gt;Svelte Society YouTube channel&lt;/a&gt; to keep up to date.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/introduction&quot;&gt;Svelte 5 is officially in the Release Candidate stage&lt;/a&gt; and gets closer to release every day. Below, you&amp;rsquo;ll find some highlights from its pre-release &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;changelog&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hot module reloading is now supported in Svelte 5 (&lt;strong&gt;5.0.0-next.97 and 101&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11106&quot;&gt;#11106&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11132&quot;&gt;#11132&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;It is now possible to define global (or child global) styles in a block (&lt;strong&gt;5.0.0-next.111&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11276&quot;&gt;#11276&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Compiled code is even more efficient for &lt;code&gt;if&lt;/code&gt; blocks, &lt;code&gt;each&lt;/code&gt; blocks and attribute updates (&lt;strong&gt;5.0.0-next.83-85&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10906&quot;&gt;#10906&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10937&quot;&gt;#10937&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10917&quot;&gt;#10917&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The built-ins from &lt;code&gt;svelte/reactivity&lt;/code&gt; are now re-exported to be available on the server (&lt;strong&gt;5.0.0-next.88&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/imports#svelte-reactivity&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10973&quot;&gt;#10973&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new reactive URL object is now available in &lt;code&gt;svelte/reactivity&lt;/code&gt; (&lt;strong&gt;5.0.0-next.103&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/imports#svelte-reactivity&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11157&quot;&gt;#11157&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML tags are now faster with more efficient hydration markers (&lt;strong&gt;5.0.0-next.90-91&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10986&quot;&gt;#10986&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11019&quot;&gt;#11019&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;$host&lt;/code&gt; rune retrieves the &lt;code&gt;this&lt;/code&gt; reference of the custom element that contains a component - removing the need for &lt;code&gt;createEventDispatcher&lt;/code&gt; (&lt;strong&gt;5.0.0-next.96&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#host&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/11059&quot;&gt;#11059&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/1c6zylc/weve_just_raised_12m_launched_new_product_2year/&quot;&gt;Collabwriting&lt;/a&gt; just raised $1.2M and launched a new product - &lt;a href=&quot;https://www.producthunt.com/posts/collabwriting-for-teams&quot;&gt;Collabwriting for Teams&lt;/a&gt;. Congrats!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/GhostWalker562/css475-music-library&quot;&gt;Skypix&lt;/a&gt; is a music library that allows users to create playlists, add songs to their library, and share their music with friends&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Pelps12/jonze&quot;&gt;Jonze&lt;/a&gt; is an open-source but managed tool for managing member information. It features attendance tracking and membership plans&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TeemuKoivisto/midi-note-trainer&quot;&gt;midi-note-trainer&lt;/a&gt; is a music notation trainer app built with Web MIDI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://easyrd.dev/&quot;&gt;Easy-Rd&lt;/a&gt; is a free tool for coding-based ER diagram creation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gamera.app/&quot;&gt;Gamera&lt;/a&gt; is a simple site analytics tool for a privacy-first world&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://collecta.space/&quot;&gt;Collecta&lt;/a&gt; lets you collect your internet in a single space - organize images, bookmarks, inspiration, and share your vibe with friends&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://coldcraft.ai/&quot;&gt;ColdCraft&lt;/a&gt; writes for you by turning bullet points and LinkedIn profiles into effective cold emails&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kilroyjones/fourplay&quot;&gt;Fourplay&lt;/a&gt; is a multiplayer word game written with Rust and Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.how-long-is-a-click.com/&quot;&gt;how-long-is-a-click&lt;/a&gt; is a site that measures how long &lt;em&gt;exactly&lt;/em&gt; a click is on the web&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FNIwqQx7mOo&quot;&gt;Preprocessors Are The Most Powerful Svelte Feature No One Talks About&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=mWt7jsgZIWw&quot;&gt;How To Make A Custom Markdoc Renderer&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=b9N1qLTVhvs&quot;&gt;Responsive CSS Grid Layout In One Line Of Code&lt;/a&gt; by JoyOfCode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/phoenix-liveview-and-svelte-with-wout-de-puysseleir&quot;&gt;Phoenix LiveView and Svelte with Wout De Puysseleir&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;li&gt;Svelte London - April 2024:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/IJh7w6DtOIs?si=Y7f0U3y8FUGtdU_X&amp;t=191&quot;&gt;Auth in SvelteKit, the hard &amp;amp; easy ways&lt;/a&gt; by Ajit Krishna&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/IJh7w6DtOIs?si=uOoqnEa1MWUZsHJp&amp;t=1993&quot;&gt;3 stories of walking in the fire with my SvelteKit project&lt;/a&gt; by Rowan Aldean&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OqwVuE2I5lM&quot;&gt;29 Mar&lt;/a&gt; - Superforms&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MmiBRw8aoXI&quot;&gt;5 Apr&lt;/a&gt; - When to go serverless?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WQFjaM1-Hm0&quot;&gt;12 Apr&lt;/a&gt; - svelte-api-keys with Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=r_snb9XDX6Q&quot;&gt;19 Apr&lt;/a&gt; - Multiple Action Forms&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=TbZpK-LtCME&quot;&gt;26 Apr&lt;/a&gt; - Service Workers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.sequin.io/liveview-is-best-with-svelte/&quot;&gt;LiveView is best with Svelte&lt;/a&gt; by Anthony Accomazzo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.refact0r.dev/blog/optimizing-sveltekit&quot;&gt;Optimizing My SvelteKit Blog&lt;/a&gt; by refac0r&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://omrecipes.dev/blog/lucia-best-auth-library-sveltekit&quot;&gt;Why Lucia might be the best authentication library for SvelteKit&lt;/a&gt; by Justin Ahinon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.klevertopee.com/post?id=d85fccb0-ed24-4175-8165-b601e661a37d&quot;&gt;Deploying a Svelte App with Docker and Node.js: A Developer&amp;rsquo;s Guide&lt;/a&gt; by Klevert Opee&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.build/p/sveltekit-todo-app-with-firebase-admin-tqdc5j&quot;&gt;SvelteKit Todo App with Firebase Admin&lt;/a&gt; by Jonathan Gamble&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kylenazario.com/blog/dependency-injection-in-svelte&quot;&gt;Dependency injection in Svelte for fun and profit&lt;/a&gt; by Kyle Nazario&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://inlang.com/g/mqlyfa7l/guide-lorissigrist-dontlazyload&quot;&gt;Don&amp;rsquo;t Lazy-Load Translations&lt;/a&gt; by Loris Sigrist&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thnee.se/sveltekit-view-transitions&quot;&gt;View Transitions in SvelteKit&lt;/a&gt; by Mattias Tomas Bobo Lindvall&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.zackwebster.com/blogs/why-is-svelte-better&quot;&gt;Why is Svelte better?&lt;/a&gt; by Zack Webster&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tylergaw.com/blog/mocking-sveltekit-stores-in-storybook/&quot;&gt;Mocking SvelteKit Stores in Storybook&lt;/a&gt; by Tyler Gaw&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.launchfa.st/blog/deploy-sveltekit-aws-amplify&quot;&gt;Deploy SvelteKit to AWS Amplify: A Step-by-Step Guide&lt;/a&gt; by Rishi Raj Jain&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thespatula.io/projects/sveltekit-stripe-demo/demo/&quot;&gt;SvelteKit and Stripe demo&lt;/a&gt; by the spatula&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scottspence.com/posts/sveltekit-turso-flyio-app-guide&quot;&gt;SvelteKit Turso Fly.io App Guide&lt;/a&gt; by Scott Spence&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=v5Ncz5AcXjI&quot;&gt;Build a Animated Website with SvelteKit, GSAP &amp;amp; Prismic&lt;/a&gt; by Prismic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kvFqpaTP0a0&quot;&gt;Svelte 5: What&amp;rsquo;s New&lt;/a&gt; by Simon Holthausen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=b2ftRSX1iZ0&amp;t=47s&quot;&gt;Build the Ultimate Learning Platform with SvelteKit, PocketBase &amp;amp; TailwindCSS!&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=5urk4ui_l5o&quot;&gt;Lets Build A Filtering System with Svelte 5 , Sveltekit 2, Tailwind, Upstash&lt;/a&gt; by Lawal Adebola&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=apIJlWJ3HgQ&quot;&gt;Porting a vanilla JavaScript library to Svelte 5&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TheDahoom/Sveltekit-seo/&quot;&gt;sk-seo&lt;/a&gt; is a dead simple, no dependencies, svelte component that automates a lot of the annoying SEO parts for you&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shinokada/svelte-lib-helpers&quot;&gt;Svelte Lib Helpers&lt;/a&gt; is a utility package designed to streamline various tasks when developing Svelte libraries&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/michaelcuneo/sveltekit-sst-auth&quot;&gt;skitsa&lt;/a&gt; is a simple yet fully fledged operational demonstration of SvelteKit Magic Links using SST, hosted on AWS, as a Lambda application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-zoomable-circles&quot;&gt;svelte-zoomable-circles&lt;/a&gt; is a Svelte component for displaying and browsing hierarchical data using zoomable circles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next month 👋&lt;/p&gt;</description><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate></item><item><title>Svelte 5 Release Candidate</title><link>https://svelte.dev/blog/svelte-5-release-candidate</link><author>The Svelte team</author><description>&lt;p&gt;Svelte 5 is now in the Release Candidate phase. This means that the design of the framework is largely settled, with no anticipated breaking changes between now and the stable release, and that the most egregious bugs have been stomped.&lt;/p&gt;
&lt;p&gt;It &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; mean that it&amp;rsquo;s ready for production, or that nothing will change between now and 5.0. But if you&amp;rsquo;ve held off on dabbling with Svelte 5 during the public beta phase, now is a great time to try it out. You can select the &amp;lsquo;Try the Svelte 5 preview&amp;rsquo; option when starting a new SvelteKit project...&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;create&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;...or you can add Svelte 5 to an existing project...&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;install&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;--save-dev&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte@next&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;...or you can tinker in the &lt;a href=&quot;https://svelte-5-preview.vercel.app&quot;&gt;Svelte 5 Preview&lt;/a&gt; website.&lt;/p&gt;
&lt;h2 id=&quot;I&#39;m-out-of-the-loop.-What&#39;s-Svelte-5&quot;&gt;&lt;span&gt;I&amp;rsquo;m out of the loop. What&amp;rsquo;s Svelte 5?&lt;/span&gt;&lt;a href=&quot;#I&#39;m-out-of-the-loop.-What&#39;s-Svelte-5&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For the last several months, we&amp;rsquo;ve been hard at work rewriting Svelte from the ground up to be faster, easier to use and more robust, applying the lessons we&amp;rsquo;ve collectively learned from several years of building apps with Svelte.&lt;/p&gt;
&lt;p&gt;You can learn more about the new features from the &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs&quot;&gt;preview documentation&lt;/a&gt;, and by watching the presentation from the most recent &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;max&quot;&gt;
&lt;figure style=&quot;max-width: 1040px; margin: 0 auto&quot;&gt;
&lt;div style=&quot;aspect-ratio: 1.755; position: relative; margin: 0 auto;&quot;&gt;
	&lt;iframe style=&quot;position: absolute; width: 100%; height: 100%; left: 0; top: 0; margin: 0;&quot; src=&quot;https://www.youtube-nocookie.com/embed/xCeYmdukOKI&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;figcaption&gt;What You Can Do For Your Framework&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;The highlights include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/runes&quot;&gt;runes&lt;/a&gt;, the new signal-powered reactivity API that sits at the heart of Svelte 5 and unlocks &lt;em&gt;universal, fine-grained reactivity&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;overhauled event handling with less boilerplate and more flexibility&lt;/li&gt;
&lt;li&gt;better component composition through &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/snippets&quot;&gt;&lt;em&gt;snippets&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;native TypeScript support, including inside your markup&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Will-I-need-to-rewrite-everything&quot;&gt;&lt;span&gt;Will I need to rewrite everything?&lt;/span&gt;&lt;a href=&quot;#Will-I-need-to-rewrite-everything&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Components written for Svelte 4 will continue to work with Svelte 5, with a &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/breaking-changes&quot;&gt;handful of exceptions&lt;/a&gt;. If you install Svelte 5 in an existing app, the only real change should be that things get faster. If you maintain a Svelte app, we recommend updating to Svelte 5 as soon as it&amp;rsquo;s stable. (In the meantime, if you&amp;rsquo;re currently on Svelte 3 then you should &lt;a href=&quot;/docs/v4-migration-guide&quot;&gt;update to Svelte 4&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Eventually — in Svelte 6 or 7 — support for certain Svelte 4 features will be dropped in favour of their modern replacements. Because of that, we do encourage you to incrementally migrate your components (you can mix and match old and new components in the same app). We&amp;rsquo;ll release a command line tool for automating much of this migration, and you can try an experimental version of that tool in the &lt;a href=&quot;https://svelte-5-preview.vercel.app&quot;&gt;playground&lt;/a&gt; by pasting in some Svelte 4 code and clicking the &amp;lsquo;migrate&amp;rsquo; button.&lt;/p&gt;
&lt;h2 id=&quot;When-is-the-stable-release&quot;&gt;&lt;span&gt;When is the stable release?&lt;/span&gt;&lt;a href=&quot;#When-is-the-stable-release&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/sveltejs/svelte/milestone/9&quot;&gt;When it&amp;rsquo;s done&lt;/a&gt;, and we&amp;rsquo;ve updated all the documentation. Bear with us!&lt;/p&gt;</description><pubDate>Tue, 30 Apr 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: April 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-april-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;Spring is just around the corner (for half the globe at least), which means &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit Spring&lt;/a&gt; is coming soon! The event will be streamed on &lt;a href=&quot;https://youtube.com/sveltesociety&quot;&gt;the Svelte Society YouTube channel&lt;/a&gt; on April 27.&lt;/p&gt;
&lt;p&gt;Also, this month, a ton of new features have been merged into Svelte 5 to make it the best version of Svelte yet. We&amp;rsquo;ll get into them all below, so let&amp;rsquo;s jump right in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/introduction&quot;&gt;Svelte 5 is in preview&lt;/a&gt; and gets closer to release every day. Below, you&amp;rsquo;ll find some highlights from its &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;changelog&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The new &lt;code&gt;Map&lt;/code&gt;, &lt;code&gt;Date&lt;/code&gt; and &lt;code&gt;Set&lt;/code&gt; classes can now be imported from &lt;code&gt;svelte/reactivity&lt;/code&gt; and used just like their native counterparts to fit into Svelte&amp;rsquo;s reactivity model (&lt;strong&gt;5.0.0-next.79&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#state-frozen-reactive-map-set-and-date&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10803&quot;&gt;#10803&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10622&quot;&gt;#10622&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10781&quot;&gt;#10781&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;state/derived/props can be explicitly exported from components again (&lt;strong&gt;5.0.0-next.62&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10523&quot;&gt;#10523&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind:value&lt;/code&gt; now allows for a dynamic &lt;code&gt;type&lt;/code&gt; attribute - fixing issues with common input bindings (&lt;strong&gt;5.0.0-next.66&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10608&quot;&gt;#10608&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SSR&lt;/code&gt; HTML mismatch validation has been improved and provides clearer error messages (&lt;strong&gt;5.0.0-next.69&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10658&quot;&gt;#10658&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; Slots inside templates with a &lt;code&gt;shadowrootmode&lt;/code&gt; attribute are now preserved (&lt;strong&gt;5.0.0-next.73&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10721&quot;&gt;#10721&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The &lt;code&gt;$props()&lt;/code&gt; no longer accepts a generic type argument. Instead, component authors should type their props like any other variable declaration (&lt;strong&gt;5.0.0-next.76&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10694&quot;&gt;#10694&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;$bindable&lt;/code&gt; rune allows parents to &lt;code&gt;:bind&lt;/code&gt; to a component&amp;rsquo;s prop in addition to using them as regular props (&lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#props-bindable&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10851&quot;&gt;#10851&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The webkitdirectory DOM boolean attribute is now supported (&lt;strong&gt;5.0.0-next.81&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10847&quot;&gt;#10847&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Form resets are now taken into account for two way bindings (&lt;strong&gt;5.0.0-next.82&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/breaking-changes#other-breaking-changes-bindings-now-react-to-form-resets&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10617&quot;&gt;#10617&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;adapter-vercel&lt;/code&gt; now has Skew Protection which ensures that the client and server stay in sync for any particular deployment (&lt;strong&gt;@sveltejs/adapter-vercel@5.2.0&lt;/strong&gt;, &lt;a href=&quot;https://vercel.com/docs/deployments/skew-protection&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11987&quot;&gt;#11987&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-vercel&lt;/code&gt;&amp;rsquo;s build output files now include framework metadata - improving observability on the platform (&lt;strong&gt;@sveltejs/adapter-vercel@5.2.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11800&quot;&gt;#11800&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-cloudflare&lt;/code&gt; and &lt;code&gt;adapter-cloudflare-workers&lt;/code&gt; now implement &lt;code&gt;adapter.emulate&lt;/code&gt; which allows the adapter to emulate the Cloudflare platform during dev and preview (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/11732&quot;&gt;#11732&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; &lt;code&gt;adapter-node&lt;/code&gt; now shuts down gracefully and supports the new &lt;code&gt;IDLE_TIMEOUT&lt;/code&gt; and &lt;code&gt;SHUTDOWN_TIMEOUT&lt;/code&gt; environment variables (&lt;strong&gt;@sveltejs/adapter-node@5.0.1&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/adapter-node#Environment-variables-SHUTDOWN_TIMEOUT&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11653&quot;&gt;#11653&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The default value of &lt;code&gt;precompress&lt;/code&gt; in &lt;code&gt;adapter-node&lt;/code&gt; is now &lt;code&gt;true&lt;/code&gt; - making sites faster by default (&lt;strong&gt;@sveltejs/adapter-node@5.0.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/adapter-node#Options-precompress&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11945&quot;&gt;#11945&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Google Cloud is now supported in &lt;code&gt;adapter-auto&lt;/code&gt; without any additional configuration (&lt;strong&gt;@sveltejs/adapter-auto@3.2.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/adapter-auto&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/12015&quot;&gt;#12015&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all the changes in SvelteKit, including bug fixes and adapter-specific changes check out the &lt;a href=&quot;https://github.com/sveltejs/kit/tree/f1e73c2fe54280d254a1bdfba430a678f4db527a/packages&quot;&gt;CHANGELOGs in each of the packages&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.usenotepad.com/&quot;&gt;notepad&lt;/a&gt; is a workspace for freelancers. Providing time tracking, tasks, reports, invoices and contacts all in one tool.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mateoroldos/tokenbase&quot;&gt;Tokenbase&lt;/a&gt; is a free tool for creating, managing and distributing Design Tokens. Easily create your Design Systems and export them to code in a few clicks.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mellobacon.github.io/mello_os/&quot;&gt;MelloOS&lt;/a&gt; is a fake OS desktop in the style of Windows 95&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://powderhound.io/&quot;&gt;PowerHound&lt;/a&gt; is an app for tracking snow conditions across Colorado&amp;rsquo;s ski resorts and backcountry&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://productsurveys.io/&quot;&gt;ProductSurveys&lt;/a&gt; gathers user feedback directly inside your product&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nestauk/dsp_waifinder&quot;&gt;WAIfinder&lt;/a&gt; is an interactive map shows entities operating in the AI industry in the UK&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkmedown.net/&quot;&gt;talkmedown&lt;/a&gt; is an emergency landing survival game using SvelteKit UI and Three.js graphics.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zonetecde/bird-flapping&quot;&gt;Bird Flapping&lt;/a&gt; is that game with a flapping bird (not to be confused with FlappyBird)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/wires5210/minesweeper-funnymode&quot;&gt;Minesweeper&lt;/a&gt; FUNNYMODE is minesweeper, but FUNNY&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.routickr.com/&quot;&gt;Routickr&lt;/a&gt; is a habit-tracking app with Firefox and Chrome extensions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://immich.app/&quot;&gt;immich&lt;/a&gt; is a self-hosted photo and video management solution&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Svienna (Svelte Society Vienna):&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=auqkebVQYXE&quot;&gt;Domenik Reitzner - A brief history of prototyping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=N8Hs-LVL_f8&quot;&gt;Lukas Stracke - Building an Error and Performance Monitoring SDK for SvelteKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=K8sKpMSCOiE&quot;&gt;Jean Yves Couët - Are you on the right route? &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wAttcVDP4Ec&quot;&gt;Lucas Martin - Using SvelteKit to Build An Interactive Portfolio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QiAMLIyM894&quot;&gt;22 Mar 2024&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_vQVkOa5K-s&quot;&gt;8 Mar 2024&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read/Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://criticalmoments.io/blog/how_we_built_our_marketing_page&quot;&gt;How we built our 41kb SaaS Website&lt;/a&gt; by Critical Moments&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jakeout.com/posts/2024-03-04-svelte&quot;&gt;Migrating a personal homepage to Svelte&lt;/a&gt; by Jake Ouelletee&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://svisualize.dev/&quot;&gt;Svisualize&lt;/a&gt; is a VS Code Extension that visualizes your components as you code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/aidan-neel/neel-ui&quot;&gt;Neel/UI&lt;/a&gt; is a shadcn-inspired set of customizable components that you can copy and paste into your SvelteKit apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blick.netlify.app/&quot;&gt;BLICKCSS&lt;/a&gt; is a small (~30kb) CSS library to build great websites and web apps quickly and easily&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next month 👋&lt;/p&gt;</description><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: March 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-march-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;This month, the Svelte maintainers made a ton of progress on Svelte 5 and Rich Harris talked to Prismic about how the team is working on making the framework even better.&lt;/p&gt;
&lt;p&gt;Lots to showcase too... so let&amp;rsquo;s dive in!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;As you may already have heard, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/introduction&quot;&gt;Svelte 5 is in preview&lt;/a&gt;. In the meantime, Svelte 4 (&lt;code&gt;@latest&lt;/code&gt;) has had &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/svelte-4/packages/svelte/CHANGELOG.md&quot;&gt;one bugfix&lt;/a&gt;. The Svelte 5 changelog has quite a few updates, though:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;breaking: &lt;code&gt;$derived.call&lt;/code&gt; is now &lt;code&gt;$derived.by&lt;/code&gt; (&lt;strong&gt;5.0.0-next.54&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#$derived-by&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10445&quot;&gt;#10445&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Destructuring derived object properties will now keep fine-grain reactivity (&lt;strong&gt;5.0.0-next.55&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#derived&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10488&quot;&gt;#10488&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;hydrate&lt;/code&gt; method makes hydration-related code treeshakeable (&lt;strong&gt;5.0.0-next.56&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/functions#hydrate&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10497&quot;&gt;#10497&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Nested CSS is now supported, along with better support for &lt;code&gt;:is(...)&lt;/code&gt; and &lt;code&gt;:where(...)&lt;/code&gt; (&lt;strong&gt;5.0.0-next.57&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10490&quot;&gt;#10490&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;breaking: The client-side API has been simplified by removing &lt;code&gt;createRoot&lt;/code&gt;, adjusting the &lt;code&gt;mount&lt;/code&gt; / &lt;code&gt;hydrate&lt;/code&gt; APIs and introducing &lt;code&gt;unmount&lt;/code&gt; (&lt;strong&gt;5.0.0-next.58&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/9827&quot;&gt;Issue#9827&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/10497&quot;&gt;#10516&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all the bug fixes, chores and underlying work required to get Svelte 5 to release-ready, check out &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;the CHANGELOG on main&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Mostly bug fixes, this month. Most notably is a fix to prevent stale values after navigation (&lt;strong&gt;2.5.1&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11870&quot;&gt;#11870&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Adapters can also now use an &lt;code&gt;emulate&lt;/code&gt; function to provide dev and preview functionality (&lt;strong&gt;2.5.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/writing-adapters&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11730&quot;&gt;#11730&lt;/a&gt;). This will allow for an improved experience developing for Cloudflare in the near future (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/11732&quot;&gt;11732&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For all the changes in SvelteKit, check out the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/main/packages/kit/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.wishgram.xyz/&quot;&gt;Wishgram&lt;/a&gt; is a tool to generate handwritten wishing cards&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jonathanjameswilliams26/rfidify&quot;&gt;rfidify&lt;/a&gt; is a Raspberry PI RFID reader that plays things on Spotify&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://listn.fyi/&quot;&gt;listn.fyi&lt;/a&gt; is a fun and easy way to share what music you&amp;rsquo;re currently into&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.meowrite.com/&quot;&gt;Meowrite&lt;/a&gt; is an AI writing tool for cover letters, essays and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.photomultitool.com/&quot;&gt;Photo Multitool&lt;/a&gt; is a free set of online tools for manipulating photos&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maxjerry0107/sveltekit-weather-app&quot;&gt;sveltekit-weather-app&lt;/a&gt; is a gorgeous weather app made with SvelteKit&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=z7n17ajJpCo&quot;&gt;How to make a great framework better? - Svelte 5 with Rich Harris&lt;/a&gt; by Prismic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=KB6zkvYJqoE&amp;lc=UgxFIaNKUG5as18CSzp4AaABAg&quot;&gt;Svelte 5 is a beast, but is it worth switching?&lt;/a&gt; by Syntax.FM&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;This-Week-in-Svelte:&quot;&gt;&lt;span&gt;This Week in Svelte:&lt;/span&gt;&lt;a href=&quot;#This-Week-in-Svelte:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;em&gt;To Read/Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://gitcontext.com/blog/svelte-5-upgrade&quot;&gt;Upgrading to Svelte 5&lt;/a&gt; by Mike Stachowiak&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kvak.io/meoweler&quot;&gt;Building with GPT4 and Svelte&lt;/a&gt; by Lev Miseri&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.bryce.io/mini-site-for-recommending-songs-using-svelte-deno&quot;&gt;Mini site for recommending songs using Svelte &amp;amp; Deno&lt;/a&gt; by Bryce Dorn&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.launchnow.pro/blog/sveltekit-openapi-sdk-generation&quot;&gt;Effortlessly Sync Your SvelteKit Frontend with Backend Using OpenAPI: A Step-by-Step Guide to Generating SDKs&lt;/a&gt; by Launchnow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteheadless.com/how-to-build-an-editable-website-in-15-minutes-in-2024&quot;&gt;How to build an editable website in 15 minutes in 2024&lt;/a&gt; by Svelte Headless&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://liveview-svelte-pwa.fly.dev/&quot;&gt;Local-First LiveView Svelte ToDo App&lt;/a&gt; by Tony Dang&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;This-Week-in-Svelte:-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#This-Week-in-Svelte:-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svecosystem/paneforge&quot;&gt;PaneForge&lt;/a&gt; provides components that make it easy to create resizable panes in your Svelte apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-ux.techniq.dev/&quot;&gt;Svelte UX&lt;/a&gt; and &lt;a href=&quot;https://www.layerchart.com/&quot;&gt;LayerChart&lt;/a&gt; now include theme support via semantic and state classes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hcengineering/platform&quot;&gt;Huly Platform&lt;/a&gt; is a robust framework designed to accelerate the development of business applications, such as CRM systems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/selemondev/svelte-marquee&quot;&gt;svelte-marquee&lt;/a&gt; is a beautiful marquee component for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ocluf/justship&quot;&gt;Just Ship&lt;/a&gt; is a SvelteKit auth boilerplate for Svelte 5&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/okcontract/cells&quot;&gt;cells&lt;/a&gt; is a functional &amp;amp; reactive library for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/webuildsociety/svelte-headless&quot;&gt;Svelte Headless&lt;/a&gt; is an example site showing how to create a simple blog site that plugs into a headless CMS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sugar-css.com/&quot;&gt;Sugar.css&lt;/a&gt; is a semantic, accessible, lightweight CSS framework&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Carza-104/apple-svelte&quot;&gt;apple-svelte&lt;/a&gt; is a component library for Svelte based on Apple&amp;rsquo;s Human Interface design language&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tncrazvan/sveltekit-sse&quot;&gt;SvelteKit SSE&lt;/a&gt; provides an easy way to produce and consume server sent events.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/huntabyte/formsnap&quot;&gt;Formsnap&lt;/a&gt;, an accessible wrapper for sveltekit-superforms, got a major rewrite and has improved &lt;a href=&quot;https://formsnap.dev&quot;&gt;its docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next month 👋&lt;/p&gt;</description><pubDate>Fri, 01 Mar 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: February 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-february-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;Since SvelteKit 2.0 released late last year, there&amp;rsquo;s been a bunch of new features to make the Kit dev experience even better! Meanwhile the Svelte team has been hard at work making Svelte 5 a reality.&lt;/p&gt;
&lt;p&gt;In case you missed it, Rich also posted &lt;a href=&quot;https://github.com/sveltejs/svelte/discussions/10085#discussion-6029409&quot;&gt;Tenets&lt;/a&gt;, &amp;ldquo;an attempt to articulate the Svelte philosophy — our bedrock principles, that guide our design decisions.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;So let&amp;rsquo;s dive in to check out what&amp;rsquo;s new and see what the rest of the community has been up to...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The client router is now tree shakeable (&lt;strong&gt;2.1.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11340&quot;&gt;#11340&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$env/static/public&lt;/code&gt; is now exposed in service workers (&lt;strong&gt;2.2.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/$env-static-public&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10994&quot;&gt;#10994&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;style-src-elem&lt;/code&gt; is now supported in environments with a Content Security Policy (&lt;strong&gt;2.2.1&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/@sveltejs-kit#CspDirectives&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11562&quot;&gt;#11562&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;reroute&lt;/code&gt; hook allows you to change how URLs are translated into routes (&lt;strong&gt;2.3.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/hooks#Universal-hooks-reroute&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11537&quot;&gt;#11537&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;read&lt;/code&gt; function is now available in the &lt;code&gt;$app/server&lt;/code&gt; module - allowing you to read assets from the filesystem (&lt;strong&gt;2.4.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/$app-server#read&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11649&quot;&gt;#11649&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Adapters can now &lt;code&gt;emulate&lt;/code&gt; the prod environment for dev and preview servers by implementing the corresponding functions. This is useful for providing access to e.g. KV namespaces in development (&lt;strong&gt;2.5.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/writing-adapters&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11730&quot;&gt;#11730&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In case you missed it, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/introduction&quot;&gt;Svelte 5 is in preview&lt;/a&gt;. In the meantime, Svelte 4 (&lt;code&gt;@latest&lt;/code&gt;) has had one bugfix release. There&amp;rsquo;s just one new feature to highlight from the Svelte 5 changelog:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Snippets can now take multiple arguments (&lt;strong&gt;5.0.0-next.42&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/snippets&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9988&quot;&gt;#9988&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all the bug fixes, chores and underlying work required to get Svelte 5 to release-ready, check out &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;the CHANGELOG on main&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.spritefusion.com/&quot;&gt;Sprite Fusion&lt;/a&gt; is a free level design tool to craft beautiful 2D tilemaps right in your browser using any tileset&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bskdany/typemeup&quot;&gt;TypeMeUp&lt;/a&gt; a typing website that teaches you how to type faster&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/baterson/pathfinding-visualizer&quot;&gt;Pathfinding Algorithm Visualizer&lt;/a&gt; is an interactive pathfinding algorithm visualizer with player functionality&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rochdog.com/en&quot;&gt;Roch Dog&lt;/a&gt; ranks businesses and hotels based on how dog-friendly they are&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://highlight.cool/&quot;&gt;highlight.cool&lt;/a&gt; is a free, customizable, and real-time highlighting tool for your blog&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.noladevs.org/&quot;&gt;Nola Devs&lt;/a&gt; is a vibrant and inclusive software developers group nestled in the heart of New Orleans. This site aggregates all their events across groups&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.fundingsimulator.com/&quot;&gt;Startup Funding Simulator&lt;/a&gt; is a tool to help founders understand how modern fundraising (with safes) works, and how much dilution you can expect when raising money.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=m4G-6dyF1MU&quot;&gt;New SvelteKit feature: &lt;code&gt;import { read } from &amp;#39;$app/server&amp;#39;&lt;/code&gt;&lt;/a&gt; by Rich Harris&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/sveltekit-read/&quot;&gt;Reading assets on the server in SvelteKit&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://packt.link/Z4hXD&quot;&gt;Tan Li Hau&amp;rsquo;s new book&lt;/a&gt;, &lt;em&gt;Real-World Svelte&lt;/em&gt; is out now&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=oH7XFAKh6W8&quot;&gt;Svelte Society San Diego - January 2024&lt;/a&gt;: Attila covers the latest updates on Svelte 5 and also SvelteKit.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eswNQiq4T2w&quot;&gt;Svelte London - January 2024&lt;/a&gt;: featuring talks from both Rich Harris and pngwn&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://syntax.fm/show/723/svelte-5-speed-simplicity-and-size&quot;&gt;Svelte 5: Speed, Simplicity &amp;amp; Size&lt;/a&gt; by Syntax.FM&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=86NNiIG_ncU&quot;&gt;12 Jan 2024&lt;/a&gt;: A deep dive into the SvelteKit Changelog&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AWL_xCPT-5Q&quot;&gt;19 Jan 2024&lt;/a&gt;: Showcasing a new library from Paolo Ricciuti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_SraKYKkQAc&quot;&gt;26 Jan 2024&lt;/a&gt;: Featuring &amp;ldquo;Cells&amp;rdquo; - a functional and reactive programming library&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.launchnow.pro/blog/customise-font-tailwindcss-sveltekit&quot;&gt;Customise font in TailwindCSS with SvelteKit&lt;/a&gt; by Launchnow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kylenazario.com/blog/svelte-from-angular-perspective-for-svelte&quot;&gt;Svelte from the perspective of an Angular developer (for Svelte devs)&lt;/a&gt; and &lt;a href=&quot;https://kylenazario.com/blog/sveltekit-blog-sitemap&quot;&gt;How to create a sitemap for your SvelteKit blog&lt;/a&gt; by Kyle Nazario&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.icacademy.at/blog/svelte-ic-starter&quot;&gt;Get Up and Running with Svelte on the Internet Computer&lt;/a&gt; by Roland BOLE&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devr.me/socket-io-deno&quot;&gt;SvelteKit + Socket.io server deployed on deno&lt;/a&gt; by Devr&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lucia-auth/lucia/discussions/1361&quot;&gt;Lucia&lt;/a&gt; - an auth library written in TypeScript that abstracts away the complexity of handling sessions - has just released its 3.0 version&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://inlang.com/m/dxnzrydw/library-inlang-paraglideJsAdapterSvelteKit&quot;&gt;Paraglide JS Adapter SvelteKit&lt;/a&gt; is a SvelteKit integration for ParaglideJS - a tool for i18n routing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See ya next month!&lt;/p&gt;</description><pubDate>Thu, 01 Feb 2024 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: January 2024</title><link>https://svelte.dev/blog/whats-new-in-svelte-january-2024</link><author>Dani Sandoval</author><description>&lt;p&gt;Happy New Year! It&amp;rsquo;s been a busy month for the Svelte maintainers - with tons of new features dropping in the Svelte 5 preview and the &lt;a href=&quot;/blog/sveltekit-2&quot;&gt;release of SvelteKit 2&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;You can find all the new features in both projects below, along with a bunch of resources and sites built with Svelte in the Community Showcase.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s jump in...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit-(2.0-and-more-)&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit (2.0 and more!)&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-(2.0-and-more-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;With its 2.0 release, SvelteKit is now more capable than ever. Be sure to check out the docs links in each update for more info on how to use each feature as well as the new &lt;a href=&quot;/docs/kit/performance&quot;&gt;Performance&lt;/a&gt; page - which explains how SvelteKit works to make your applications as performant as possible.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;resolvePath&lt;/code&gt; has been replaced by &lt;code&gt;resolveRoute&lt;/code&gt; in &lt;code&gt;$app/paths&lt;/code&gt;. Use it to populate a route ID with params to resolve a pathname (&lt;strong&gt;1.29.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/$app-paths#resolveRoute&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11261&quot;&gt;#11261&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;response.arrayBuffer()&lt;/code&gt; will now be inlined during SSR (&lt;strong&gt;1.30.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/load#Making-fetch-requests&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10535&quot;&gt;#10535&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/kit/blob/main/packages/kit/CHANGELOG.md#200&quot;&gt;SvelteKit 2.0.0&lt;/a&gt; adds:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;untrack&lt;/code&gt; to &lt;code&gt;load&lt;/code&gt; to opt-out of invalidation (&lt;a href=&quot;/docs/kit/load#Rerunning-load-functions-Untracking-dependencies&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11311&quot;&gt;#11311&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;shallow routing to create history entries without navigating (&lt;a href=&quot;/docs/kit/shallow-routing&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11307&quot;&gt;#11307&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;html typings (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/11222&quot;&gt;#11222&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;redacted internal stack traces when reporting config errors (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/11292&quot;&gt;#11292&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fine grained invalidation of search params (&lt;a href=&quot;/docs/kit/load#Rerunning-load-functions&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/11258&quot;&gt;#11258&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find a migration guide for SvelteKit 2.0 &lt;a href=&quot;/docs/kit/migrating-to-sveltekit-2&quot;&gt;on the SvelteKit docs&lt;/a&gt;. Things should be pretty seamless with the &lt;code&gt;svelte-migrate&lt;/code&gt; command doing much (if not all) for you!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;With &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/introduction&quot;&gt;Svelte 5 in preview&lt;/a&gt;, Svelte 4 (&lt;code&gt;@latest&lt;/code&gt;) has only been getting bug fixes - with its current version at &lt;code&gt;4.2.8&lt;/code&gt;. The updates below are from version 5&amp;rsquo;s preview branch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The new &lt;code&gt;$inspect&lt;/code&gt; rune is like &lt;code&gt;console.log&lt;/code&gt; except that it will re-run whenever its argument changes (&lt;strong&gt;5.0.0-next.16&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#inspect&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9705&quot;&gt;#9705&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$state&lt;/code&gt; is now proxied to make reactivity nested by default. This is a response to user feedback with plenty of context in the PR - so check it out if you&amp;rsquo;re interested on how the syntax has improved during the preview (&lt;strong&gt;5.0.0-next.18&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/fine-grained-reactivity&quot;&gt;Docs/Examples&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9739&quot;&gt;#9739&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fallback values for bindings are disallowed in runes mode since they&amp;rsquo;re confusing, and a source of bugginess and implementation complexity (5.0.0-next.19, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9784&quot;&gt;#9784&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fallback props are now readonly (unless used with &lt;code&gt;bind:&lt;/code&gt;). By extension, default values should also be readonly (&lt;strong&gt;5.0.0-next.19&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9789&quot;&gt;#9789&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;unstate&lt;/code&gt; function allows you to remove reactivity from objects and arrays created with &lt;code&gt;$state&lt;/code&gt; (&lt;strong&gt;5.0.0-next.19&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/functions#unstate&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9776&quot;&gt;#9776&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;GamepadEventHandlers for window.addEventListener (&lt;code&gt;gamepadconnected&lt;/code&gt; and &lt;code&gt;gamepaddisconnected&lt;/code&gt;) have been added (&lt;strong&gt;5.0.0-next.23&lt;/strong&gt;, &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/GamepadEvent&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9861&quot;&gt;#9861&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{@const}&lt;/code&gt; can now be used inside snippet blocks (&lt;strong&gt;5.0.0-next.24&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9904&quot;&gt;#9904&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;$state.frozen&lt;/code&gt; rune lets you access a read-only version of &lt;code&gt;$state&lt;/code&gt; that cannot be mutated. This is useful if you want to work with data using immutable patterns rather than mutable patterns (&lt;strong&gt;5.0.0-next.27&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#state-frozen&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9851&quot;&gt;#9851&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all the release notes going forward, check out &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;the CHANGELOG on main&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Ilyas-Codes/eCourse&quot;&gt;eCourse&lt;/a&gt; is a sleek and customizable website template designed for effortless self-hosting of your online course&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://typogram.co/&quot;&gt;Typogram&lt;/a&gt; is a brand design tool with &amp;ldquo;a sprinkle of AI&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ethanlynn/calcium&quot;&gt;calcium&lt;/a&gt; is a browser extension for devs with fuzzy-find on browser tabs, bookmarks, history
and common developer docs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/willuhmjs/hintable&quot;&gt;hintable&lt;/a&gt; is an exciting word guessing game&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://domian.io/&quot;&gt;domian.io&lt;/a&gt; retrieves a list of the most likely misspellings for your domain, their availability, and an easy way to register them&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/6182be0c3ada4a15b5046f7d0d031727?version=4.2.8&quot;&gt;Story Scroller&lt;/a&gt; is a REPL showcasing how Svelte can be used to make a scrollable cards list&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://datatopics.worldbank.org/sdgatlas?lang=en&quot;&gt;The Atlas of Sustainable Development Goals 2023&lt;/a&gt; presents interactive storytelling and data visualizations about the 17 Sustainable Development Goals.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lingotrack.com/&quot;&gt;Lingotrack&lt;/a&gt; is a social platform for you as a language learner to track your progress and find engaging new media&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nico-mayer/lofi-flow&quot;&gt;Lofi Flow&lt;/a&gt; lets you save your best-loved YouTube lofi live radios and videos in one spot&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-in-dynamic-e-commerce-widgets-with-jacob-stordahl&quot;&gt;Svelte in dynamic e-commerce widgets with Jacob Stordahl&lt;/a&gt; and &lt;a href=&quot;https://www.svelteradio.com/episodes/slicing-svelte-with-sam-littlefair-and-prismic&quot;&gt;Slicing Svelte with Sam Littlefair and Prismic&lt;/a&gt; from Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=B19DEGEclfk&quot;&gt;I already love SvelteKit v2&lt;/a&gt; by Huntabyte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=E9HxrW5yivs&quot;&gt;14 Awesome Real World Projects That Use Svelte&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8HaAagG6V-Q&quot;&gt;Building a SvelteKit Adapter for WinterJS&lt;/a&gt; with Willow and Kev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sveltevietnam.dev/en/blog/20231220-behind-the-screen-progressive-splashscreen&quot;&gt;Progressive Splash Screen&lt;/a&gt; by Quang Phan (Svelte Vietnam)&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GH5NxbdCZ74&quot;&gt;2023 Dec 1&lt;/a&gt; - Svelte 4.2.8, reusing searchParams, peerDependencies!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kgrIhRQ9sh8&quot;&gt;2023 Dec 8&lt;/a&gt; - validating forms UX, suppress ESLint warnings, bound functions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=57tawstksmc&quot;&gt;2023 Dec 15&lt;/a&gt; - SvelteKit 2.0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=O5ElGJICg0s&quot;&gt;22 Dec 2023&lt;/a&gt; - SvelteKit 2.0.6, handling peerDependencies, action params&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=byeF6ECbvGY&quot;&gt;29 Dec 2023&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch/Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=6RhSzX7Ac0k&quot;&gt;Let&amp;rsquo;s Build A Dropbox clone With SvelteKit And Firebase 🔥, Tailwind css, Shad-cn svelte etc 😁&lt;/a&gt; by Lawal Adebola&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=suuxXrMs5P4&quot;&gt;&amp;ldquo;App-like&amp;rdquo; List → Detail View Transitions 🦸 with SvelteKit&lt;/a&gt; by Johnny Magrippis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=N6wf2QXEHYk&quot;&gt;Learn SvelteKit · Build a Modern Landing Page w. SvelteKit &amp;amp; TailwindCSS&lt;/a&gt; by Smoljames&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.captaincodeman.com/deploy-a-sveltekit-app-to-github-pages&quot;&gt;Deploy a SvelteKit App to GitHub Pages&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bentilling.com/a-practical-guide-to-mocking-svelte-stores-with-vitest&quot;&gt;A Practical Guide to Mocking Svelte Stores with Vitest&lt;/a&gt; by Ben Tilling&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kylenazario.com/blog/svelte-5-runes-impressions&quot;&gt;Svelte 5 is good, but runes need improvement&lt;/a&gt; by Kyle Nazario&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://untested.sonnet.io/Shader+Park+and+2D&quot;&gt;Shader Park and 2D&lt;/a&gt; by Untested&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://routify.dev/blog/routify-3-release-candidate&quot;&gt;Routify&lt;/a&gt;, the popular routing library used in many Svelte apps, has its first Release Candidate for version 3&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.encodeart.dev/superforms-v2-supporting-all-validation-libraries&quot;&gt;Superforms v2&lt;/a&gt; is out now - supporting all validation libraries&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Kreonovo/SvelteKit-Design-Pattern&quot;&gt;SvelteKit-Design-Pattern&lt;/a&gt; is a template showcase Kreonovo&amp;rsquo;s SvelteKit MVC Design patterns (more info in &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/18ndcd8/our_design_pattern_for_sveltekit_how_we_organize/&quot;&gt;the Reddit post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/selemondev/vscode-shadcn-svelte&quot;&gt;Shadcn&amp;rsquo;s Svelte VSCode extension&lt;/a&gt; helps you install and use Shadcn components directly without leaving your IDE&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mpiorowski/sgsg&quot;&gt;SGSG&lt;/a&gt; is an alternative &amp;ldquo;full-stack application&amp;rdquo; template based on Svelte, Go, SQLite and gRPC&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kevmodrome/mistral-kit&quot;&gt;mistral-kit&lt;/a&gt; is a prompt-to-code site using mistral-7b and ollama&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/repalash/svelte-browser-import&quot;&gt;svelte-browser-import&lt;/a&gt; provides functions to import and render a Svelte App/Component (.svelte files) directly inside a browser without a build step.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/progressbar-svelte&quot;&gt;progressbar-svelte&lt;/a&gt; is a Svelte package for customizable progress bars&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lovelindhoni/mdcraft&quot;&gt;MdCraft&lt;/a&gt; is an open-source web app that serves as an in-browser Markdown editor and previewer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Have a great year 🥳&lt;/p&gt;</description><pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate></item><item><title>Announcing SvelteKit 2</title><link>https://svelte.dev/blog/sveltekit-2</link><author>The Svelte team</author><description>&lt;p&gt;Version 2.0 of &lt;a href=&quot;https://kit.svelte.dev&quot;&gt;SvelteKit&lt;/a&gt;, the official framework for building apps with Svelte, is now available. It is an incremental release that adds support for the newly-released &lt;a href=&quot;https://vitejs.dev/blog/announcing-vite5&quot;&gt;Vite 5&lt;/a&gt; along with a bevy of small improvements and one much-requested feature.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve been paying close attention to Svelte in recent months, you&amp;rsquo;ll know that we&amp;rsquo;ve been &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/introduction&quot;&gt;hard at work on Svelte 5&lt;/a&gt;, which is possibly the most anticipated release in the project&amp;rsquo;s history. Upgrading to SvelteKit 2 will smooth the path for Svelte 5 when it is released in 2024, and we encourage all users to upgrade when you get a chance.&lt;/p&gt;
&lt;p&gt;We recommend updating to the most recent 1.x release first, along with Svelte 4, in order to address any deprecation warnings. Then, upgrade to SvelteKit 2 by running the automated migration tool:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npx&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte-migrate&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;sveltekit-2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;a href=&quot;/docs/kit/migrating-to-sveltekit-2&quot;&gt;migration guide&lt;/a&gt; has more details about what&amp;rsquo;s new.&lt;/p&gt;
&lt;h2 id=&quot;Shallow-routing&quot;&gt;&lt;span&gt;Shallow routing&lt;/span&gt;&lt;a href=&quot;#Shallow-routing&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Way back in the mists of time — May, to be precise — we &lt;a href=&quot;https://www.youtube.com/watch?v=HdkJTOTY-Js&quot;&gt;teased a new feature&lt;/a&gt; that allows you to associate state with a history entry without causing navigation. It&amp;rsquo;s very useful for creating modals that you can dismiss by swiping back, or pop-up views of routes you don&amp;rsquo;t want to do a full navigation to.&lt;/p&gt;
&lt;p&gt;That feature is called &lt;a href=&quot;/docs/kit/shallow-routing&quot;&gt;shallow routing&lt;/a&gt;, and this week we finally dusted off the pull request and added it to the framework. We&amp;rsquo;re excited to see what you use it for.&lt;/p&gt;
&lt;h2 id=&quot;One-year-of-SvelteKit&quot;&gt;&lt;span&gt;One year of SvelteKit&lt;/span&gt;&lt;a href=&quot;#One-year-of-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Today is the one year anniversary of SvelteKit’s launch and we’re excited to celebrate how far SvelteKit has come. SvelteKit has been quickly embraced by the web development community:&lt;/p&gt;
&lt;figure&gt;
	&lt;img alt=&quot;Screenshot of @flaviocopes tweet with a poll titled &#39;You have to create a web app from scratch&#39;. SvelteKit is the winner above Next, Nuxt and Laravel with 42.1% of the vote&quot; src=&quot;/media/framework-poll.webp&quot;&gt;
	&lt;figcaption&gt;&lt;a href=&quot;https://twitter.com/flaviocopes/status/1730895911864189299&quot;&gt;Tweet from @flaviocopes&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;In the past year, we’ve seen a number of open source projects like &lt;a href=&quot;https://github.com/storybookjs/storybook/blob/next/code/frameworks/sveltekit/README.md&quot;&gt;Storybook&lt;/a&gt;, &lt;a href=&quot;https://tailwindcss.com/docs/guides/sveltekit&quot;&gt;Tailwind&lt;/a&gt;, and &lt;a href=&quot;https://playwright.dev/docs/test-components&quot;&gt;Playwright&lt;/a&gt; officially support SvelteKit as well as a number of commercial entities like &lt;a href=&quot;https://prismic.io/blog/svelte-sveltekit-tutorial&quot;&gt;Prismic&lt;/a&gt;, &lt;a href=&quot;https://docs.sentry.io/platforms/javascript/guides/sveltekit/&quot;&gt;Sentry&lt;/a&gt;, and &lt;a href=&quot;https://inlang.com/m/gerre34r/library-inlang-paraglideJs&quot;&gt;InLang&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;SvelteKit continues to benefit from the Svelte community, which has developed numerous great UI libraries like &lt;a href=&quot;https://www.skeleton.dev/&quot;&gt;Skeleton&lt;/a&gt;, &lt;a href=&quot;https://www.shadcn-svelte.com/&quot;&gt;shadcn-svelte&lt;/a&gt;, &lt;a href=&quot;https://melt-ui.com/&quot;&gt;Melt UI&lt;/a&gt;, &lt;a href=&quot;https://flowbite-svelte.com/&quot;&gt;Flowbite Svelte&lt;/a&gt;, &lt;a href=&quot;https://daisyui.com/&quot;&gt;daisyUI&lt;/a&gt;, and &lt;a href=&quot;https://sveltesociety.dev/packages?category=design-system&quot;&gt;many more&lt;/a&gt;. And &lt;a href=&quot;https://hack.sveltesociety.dev/&quot;&gt;our first ever hackathon&lt;/a&gt; saw winners from amazing Svelte projects like &lt;a href=&quot;https://superforms.rocks/&quot;&gt;Superforms&lt;/a&gt;, &lt;a href=&quot;https://threlte.xyz/&quot;&gt;Threlte&lt;/a&gt;, and &lt;a href=&quot;https://www.sveltelab.dev/&quot;&gt;SvelteLab&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, we’ve also launched major supporting projects like a new Svelte DevTools (&lt;a href=&quot;https://chromewebstore.google.com/detail/svelte-devtools/kfidecgcdjjfpeckbblhmfkhmlgecoff&quot;&gt;chrome web store&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte-devtools&quot;&gt;GitHub&lt;/a&gt;, &lt;a href=&quot;https://www.sveltesummit.com/2023/fall/exploring-svelte-devtools&quot;&gt;talk&lt;/a&gt;), Svelte Inspector (&lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/inspector.md&quot;&gt;docs&lt;/a&gt;, &lt;a href=&quot;https://www.sveltesummit.com/2023/spring/svelte-inspector-update&quot;&gt;talk&lt;/a&gt;), and experimental image optimization support (&lt;a href=&quot;/docs/kit/images&quot;&gt;docs&lt;/a&gt;, &lt;a href=&quot;https://www.sveltesummit.com/2023/fall/enhanced-img&quot;&gt;talk&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;Upcoming&quot;&gt;&lt;span&gt;Upcoming&lt;/span&gt;&lt;a href=&quot;#Upcoming&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In addition to the ongoing image work, we’ll be working to improve support for Svelte 5 and internationalization in upcoming releases. The first parts of that work have already landed in SvelteKit 2, which includes improved support for prerendering URLs with optional path segments often used to specify a language. Thank you to the team from InLang who contributed this improvement.&lt;/p&gt;</description><pubDate>Thu, 14 Dec 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: December 2023</title><link>https://svelte.dev/blog/whats-new-in-svelte-december-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;Svelte Summit Fall 2023 was epic! Featuring talks from across the ecosystem and the launches from the core team of new Svelte Dev Tools, image optimization, and a preview version of Svelte 5.0! The whole talk can be found &lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&quot;&gt;here&lt;/a&gt; (timestamps below):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=0s&quot;&gt;0:00&lt;/a&gt; Hype music!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=1100s&quot;&gt;18:20&lt;/a&gt; Exploring Svelte DevTools - Ignatius B (4 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=1527s&quot;&gt;25:27&lt;/a&gt; How does SvelteKit fare as a SPA Framework - Henry Lie (25 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=3180s&quot;&gt;53:00&lt;/a&gt; enhanced:img - Ben McCann (6 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=3824s&quot;&gt;1:03:44&lt;/a&gt; inlang-paraglide JS for SvelteKit i18n - Samuel Stroschein (10 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=4652s&quot;&gt;1:17:32&lt;/a&gt; How Svelte &amp;amp; GraphQL plays well together - Jean-Yves Couet (31 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=6790s&quot;&gt;1:53:10&lt;/a&gt; svelte-ecosystem-ci - Dominik G (10 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=8586s&quot;&gt;2:23:06&lt;/a&gt; Svelte for Creative Development - Steven Stavrakis (10 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=9333s&quot;&gt;2:35:33&lt;/a&gt; Translating the docs - Romain I&amp;rsquo;Ourson (11 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=10188s&quot;&gt;2:49:48&lt;/a&gt; ENHANCE! - Paolo Ricciuti (25 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=11905s&quot;&gt;3:18:25&lt;/a&gt; Accessibility tips with Svelte solutions - Enrico Sacchetti (25 minutes)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pTgIx-ucMsY&amp;t=13751s&quot;&gt;3:49:11&lt;/a&gt; svelte@next - Rich Harris (18 minutes)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today is also the first day of &lt;a href=&quot;https://advent.sveltesociety.dev/&quot;&gt;Advent of Svelte&lt;/a&gt;: A Svelte challenge for each day of December. Join the festivities and participate in a daily frontend challenge using Svelte!&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s dive into the updates...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-(5.0-Preview-)&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte (5.0 Preview!)&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-(5.0-Preview-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/introduction&quot;&gt;Svelte 5 preview&lt;/a&gt; is now available at &lt;a href=&quot;https://www.npmjs.com/package/svelte?activeTab=versions&quot;&gt;svelte@next&lt;/a&gt; while Svelte 4&amp;rsquo;s current version (&lt;code&gt;@latest&lt;/code&gt;) is &lt;code&gt;4.2.7&lt;/code&gt;. All the changes below are from the preview&amp;rsquo;s branch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TypeScript is now supported natively via acorn-typescript (&lt;strong&gt;5.0.0-next.9&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9482&quot;&gt;#9482&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;$effect.active&lt;/code&gt; rune returns a boolean to indicate if an effect is active. This lets you set up subscriptions when a value is read (in an effect, or in the template) but also read values without creating subscriptions (&lt;strong&gt;5.0.0-next.10&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#effect-active&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9591&quot;&gt;#9591&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;$effect.root&lt;/code&gt; rune creates a non-tracked scope that doesn&amp;rsquo;t auto-cleanup. This is useful for nested effects that you want to manually control (&lt;strong&gt;5.0.0-next.14&lt;/strong&gt;, &lt;a href=&quot;https://svelte-5-preview.vercel.app/docs/runes#effect-root&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/9638&quot;&gt;#9638&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all the release notes going forward, check out &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md&quot;&gt;the CHANGELOG on main&lt;/a&gt;. For the highlights, take a look below!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Creating a new SvelteKit project will now ask if you want to try the Svelte 5 beta (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/11026&quot;&gt;#11026&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Prettier 3 and &lt;code&gt;prettier-plugin-svelte&lt;/code&gt; 3 are now the default versions when creating new SvelteKit projects (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/10410&quot;&gt;#10410&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;nodejs20.x is now supported via the Vercel adapter (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/11067&quot;&gt;#11067&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@sveltejs/enhanced-img&lt;/code&gt; makes serving different sizes of images easy, thanks to pre-processing (&lt;a href=&quot;/docs/kit/images#sveltejs-enhanced-img&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10788&quot;&gt;#10788&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete list of bug fixes and performance updates, check out the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit CHANGELOG&lt;/a&gt;. You can also find adapter-specific CHANGELOGs in each of &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages&quot;&gt;the &lt;code&gt;adapter&lt;/code&gt; directories&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The latest version of language tools adds best-effort fallback typings to &lt;code&gt;$props()&lt;/code&gt; rune (&lt;strong&gt;extensions-108.1.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Language tools better supports the &lt;code&gt;@render&lt;/code&gt; tag by using the &lt;code&gt;Snippet&lt;/code&gt; type (&lt;strong&gt;extensions-108.0.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;The Svelte ESLint plugin has been updated to support the Svelte 5 preview (&lt;a href=&quot;https://github.com/sveltejs/eslint-plugin-svelte/releases/tag/v2.36.0-next.2&quot;&gt;v2.36.0-next.2&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mobileview.io/&quot;&gt;MobileView&lt;/a&gt; is a Chrome Extension for real-time, cross-device website simulation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.classroomio.com/&quot;&gt;ClassroomIO&lt;/a&gt; is an Open Source Platform for Tech Bootcamps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ekzhang/sshx&quot;&gt;sshx&lt;/a&gt; is a secure web-based, collaborative terminal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.toneshift.cc/&quot;&gt;ToneShift&lt;/a&gt; lets you clone any voice, create music, and join a community of voices&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.canvasgpt.com/&quot;&gt;CanvasGPT&lt;/a&gt; is Autonomous Mind Maps. Powered by AI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wordplay.dev/&quot;&gt;Wordplay&lt;/a&gt; is a new educational, accessible, and language-inclusive programming language for creating playful, interactive typography (&lt;a href=&quot;https://medium.com/bits-and-behavior/wordplay-accessible-language-inclusive-interactive-typography-e4b9027eaf10&quot;&gt;Blog Post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SikandarJODD/CodeFlow&quot;&gt;CodeFlow&lt;/a&gt; is a roadmap for programmers to learn, think and code better&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Valink-Solutions/teller&quot;&gt;Teller&lt;/a&gt; is a comprehensive Minecraft backup solution designed to facilitate both local backups and interfacing with the ChunkVault Backend&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/betofigueiredo/sudoku&quot;&gt;Sudoku&lt;/a&gt; is a board created with SvelteKit, Typescript and Tailwind&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/view-transitions-in-sveltekit-and-beyond-with-geoff-rich&quot;&gt;View Transitions in SvelteKit and beyond with Geoff Rich&lt;/a&gt; and &lt;a href=&quot;https://www.svelteradio.com/episodes/melting-uis-with-thomas-g-lopes&quot;&gt;Melting UIs with Thomas G. Lopes&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_jWnyJRKOvU&quot;&gt;Making The Best Svelte SVG Animation Library&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=Xvq8rCl1lIM&quot;&gt;How To Publish Your JavaScript Code To Npm With SvelteKit&lt;/a&gt;, and &lt;a href=&quot;https://www.youtube.com/watch?v=gGwnF-lxS_Q&quot;&gt;What&amp;rsquo;s New In Svelte 5? (Runes, Events, Snippets)&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;Svelte Society Talks&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Gh4ESdKP3yQ&quot;&gt;Svelte Society - San Diego November 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8HaAagG6V-Q&quot;&gt;Building a SvelteKit Adapter for WinterJS&lt;/a&gt; with Willow and Kev&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jCNl6dtFDn4&quot;&gt;2023 October 27&lt;/a&gt; - SvelteKit 1.27.1, the pillars of a component library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-cyO9xzBXtk&quot;&gt;2023 November 3&lt;/a&gt; - SvelteKit 1.27.2, choosing a database, preprocessors&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=1ZWqySQNrtQ&quot;&gt;2023 November 10&lt;/a&gt; - SvelteKit 1.27.4, Svelte 4.2.3, closing modals&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9lK6VvBEtL0&quot;&gt;2023 Nov 17&lt;/a&gt; - SvelteKit 1.27.6, Svelte 4.2.5, new Svelte 5 features!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=vofaP86-HKU&quot;&gt;2023 Nov 24&lt;/a&gt; - Svelte 4.2.7, TypeScript in markup, websockets in SvelteKit&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch/Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2023/10/31/why-stack-overflow-is-embracing-svelte/&quot;&gt;Why Stack Overflow is embracing Svelte&lt;/a&gt; by The Stack Overflow Podcast&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MoHtXyRI7CQ&quot;&gt;Building a Twitter Clone with Svelte, SvelteKit, ,Firebase, Tailwind Css, Shad-cn Svelte etc&lt;/a&gt; by Lawal Adebola&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QKxJW6VVp6w&quot;&gt;SvelteKit Crash Course: Build a Full Website in 90 min! - 2023 Tutorial&lt;/a&gt; by Prismic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://crystallize.com/blog/building-ecommerce-with-sveltekit&quot;&gt;Hands-On Experience: How to Build an eCommerce Store with SvelteKit?&lt;/a&gt; by Bård Farstad&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sveltevietnam.dev/en/blog/20231110-behind-the-screen-dark-mode-with-sveltekit-tailwindcss-and-postcss&quot;&gt;Productive Dark Mode with SvelteKit, PostCSS, and TailwindCSS (Behind the Screen)&lt;/a&gt; by Quang Phan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mainmatter.com/blog/2023/11/23/setting-up-oauth-with-auth-js-and-sveltekit/&quot;&gt;Setting up OAuth with Auth.js in a SvelteKit Project&lt;/a&gt; by Andrey Mikhaylov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mainmatter.com/blog/2023/11/28/sveltekit-storybook/&quot;&gt;SvelteKit 🤝 Storybook&lt;/a&gt; by Paolo Ricciuti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mainmatter.com/blog/2023/09/18/integrate-storybook-in-svelte-doing-it-the-svelte-way/&quot;&gt;Integrate Storybook in Svelte: Doing it the Svelte-way&lt;/a&gt; by Óscar Domínguez Celada&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@anasmohammed361/drizzle-orm-with-sveltekit-8aecbc8cc39d&quot;&gt;Drizzle ORM with Sveltekit&lt;/a&gt; and &lt;a href=&quot;https://medium.com/@anasmohammed361/sveltekit-streaming-ssr-40ce666daffa&quot;&gt;Sveltekit — Streaming SSR&lt;/a&gt; by Mohammed Anas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.udemy.com/course/svelte-wordpress-full-stack/&quot;&gt;Svelte &amp;amp; WordPress Full Stack Course&lt;/a&gt; by Artneo Web Design on udemy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://snippets.khromov.se/add-a-loading-indicator-to-a-form-action-in-sveltekit/&quot;&gt;Add a loading indicator to a Form Action in SvelteKit&lt;/a&gt; by Useful Snippets (Stanislav Khromov)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paoloricciuti/sveltekit-view-transition&quot;&gt;sveltekit-view-transition&lt;/a&gt; provides a simplified &lt;code&gt;view-transition-api&lt;/code&gt; for Sveltekit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://t18s.sigrist.dev/&quot;&gt;T18S&lt;/a&gt; aims to provide the best internationalization experience for SvelteKit, delivering typesafety, performance, and ease of use&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelteflow.dev/&quot;&gt;Svelte Flow&lt;/a&gt; is a customizable Svelte component for building node-based editors and interactive diagrams&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jasongitmail/super-sitemap&quot;&gt;Super Sitemap&lt;/a&gt; is a SvelteKit sitemap focused on ease of use and making it impossible to forget to add your paths&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-ux.techniq.dev/&quot;&gt;Svelte UX&lt;/a&gt; is a Tailwind-based component library to simplify creating highly interactive and visual applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tombroomfield/CanIKit&quot;&gt;CanIKit&lt;/a&gt; provides a simple way to add authorization to your SvelteKit application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Team-GOATS/svelte-toggles-npm-package&quot;&gt;Svelte Toggles&lt;/a&gt; manages light &amp;amp; dark mode interactions and preference storage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://baselime.io/docs/sending-data/cloudflare/pages/sveltekit/&quot;&gt;Baselime&lt;/a&gt; now supports SvelteKit for the edge-logger package&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Fri, 01 Dec 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: November 2023</title><link>https://svelte.dev/blog/whats-new-in-svelte-november-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;Mark your calendars! &lt;a href=&quot;https://www.sveltesummit.com/2023/fall&quot;&gt;Svelte Summit Fall&lt;/a&gt; is on November 11th. Join us on &lt;a href=&quot;https://www.youtube.com/@SvelteSociety/streams&quot;&gt;YouTube&lt;/a&gt; and in the &lt;a href=&quot;/chat&quot;&gt;Discord&lt;/a&gt; for hours of Svelte-focused fun 🎥&lt;/p&gt;
&lt;p&gt;Every month, maintainers within the Svelte ecosystem fix bugs, improve performance and bring new features to Svelte, SvelteKit and the tooling around them. This month&amp;rsquo;s releases brings an improved developer experience with better &lt;a href=&quot;https://code.visualstudio.com/docs/editor/codebasics#_folding&quot;&gt;block folding&lt;/a&gt;, inferred types and configuration for &lt;code&gt;use:enhance&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a closer look 👀...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte &amp;amp; Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Svelte 4.2.2 cleans up a few element-specific features (&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/packages/svelte/CHANGELOG.md#422&quot;&gt;Release Notes&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Extensions 107.12.0 improves block folding for functions, if statements and more (&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-107.12.0&quot;&gt;Release Notes&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2169&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Route parameter types will now be inferred from the applicable matcher&amp;rsquo;s guard check (&lt;strong&gt;kit@1.26.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/advanced-routing#Matching&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10755&quot;&gt;#10755&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;invalidateAll&lt;/code&gt; boolean option lets you turn on and off the &lt;code&gt;invalidateAll()&lt;/code&gt; form function within the &lt;code&gt;enhance&lt;/code&gt; callback (&lt;strong&gt;kit@1.27.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/form-actions#Progressive-enhancement-use:enhance&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/issues/9476&quot;&gt;#9476&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The output of the project creation wizard will now reflect which package manager you&amp;rsquo;re using (&lt;strong&gt;create-svelte@5.1.1&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10811&quot;&gt;#10811&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete list of bug fixes and performance updates, check out the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit CHANGELOG&lt;/a&gt;. You can also find adapter-specific CHANGELOGs in each of &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages&quot;&gt;the &lt;code&gt;adapter&lt;/code&gt; directories&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://4thsex.com/&quot;&gt;4THSEX&lt;/a&gt; is a creative website for the producer / creative director with the same name&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/syntaxfm/website&quot;&gt;Syntax.fm&lt;/a&gt; has been redesigned from the ground up with SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gitcontext.com/&quot;&gt;GitContext&lt;/a&gt; is an early-access tool to improve the process of reviewing code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lunier.fr/&quot;&gt;Lunier&lt;/a&gt; is a site to browse and buy handbags (site is in French)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://feldmanarchitecture.com/&quot;&gt;Feldman Architecture&lt;/a&gt; is a portfolio set for the architects of the same name&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://formulator.app/&quot;&gt;Formulator&lt;/a&gt; is a faster way to iterate, experiment, &amp;amp; build user interfaces&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dwarf.domains/&quot;&gt;Dwarf&lt;/a&gt; is a relaxed domain name marketplace for domain hoarders&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://teek.vercel.app/&quot;&gt;Teek&lt;/a&gt; is a simple, free time tracker for developers with an hourly rate&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/navorite/sessionic&quot;&gt;Sessionic&lt;/a&gt; is a web extension to easily save browser sessions and manage them&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pil.ink/&quot;&gt;Pilink&lt;/a&gt; is a &amp;ldquo;suckless&amp;rdquo; link shortener&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/wolfensvelte-3d-and-the-svelte-language-server-in-the-browser-with-jason-bradnick&quot;&gt;Wolfensvelte 3D and the Svelte Language Server in the Browser with Jason Bradnick&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RuM4KHTZqD4&quot;&gt;This Is How You Sveltify Any JavaScript Library&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=LGOqg0Y7sAc&quot;&gt;Svelte Actions Make Svelte The Best JavaScript Framework&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=L3uBfL-4dDM&quot;&gt;How Svelte Stores Make State Management Easy&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;Svelte Society Talks&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9FZYJTr24ZI&quot;&gt;Svelte Society - San Diego October 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SaccqQ-JrZ4&quot;&gt;Daniils Petrovs - SvelteKit: From landing page to offline PWAs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=V4Hup134wdA&quot;&gt;Lukas Stracke - State of Sentry for Svelte 2023&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SduFW1onshg&quot;&gt;2023 September 29&lt;/a&gt; - Svelte 4.2.1, SvelteKit 1.25.1, Runes FAQ, data mocking&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CMXST0R6xRY&quot;&gt;2023 October 6&lt;/a&gt; - Ordering attribs, client hints, async custom store with runes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Tp6ctouCX7A&quot;&gt;2023 October 13&lt;/a&gt; - SvelteKit 1.25.2, How Melt UI works&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=O13bGtOV-aA&quot;&gt;2023 October 20&lt;/a&gt; - Kit 1.26.0, Svelte 4.2.2, dynamically-loaded components&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-2UjwQzxvBQ&quot;&gt;SvelteKit &amp;amp; TailwindCSS Tutorial – Build &amp;amp; Deploy a Web Portfolio&lt;/a&gt; by freeCodeCamp.org&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FP4AylVsiT8&quot;&gt;Why SvelteKit? [Intro to SvelteKit 1.0, part 1]&lt;/a&gt; by Jeffrey Codes Javascript&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FcDj9_590Xg&quot;&gt;Build an AI Chatbot - it&amp;rsquo;s that easy?!&lt;/a&gt; by Simon Prammer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wWRhX_Hzyf8&quot;&gt;Introduction to SvelteKit | FREE 5 HOUR SVELTE WORKSHOP 2023 | Lessons + Coding Exercises&lt;/a&gt; by This Dot Media&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.datawrapper.de/migrating-our-web-app-to-sveltekit/&quot;&gt;What we learned from migrating our web app to SvelteKit&lt;/a&gt; by Marten Sigwart&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://prismic.io/blog/svelte-sveltekit-tutorial&quot;&gt;SvelteKit Tutorial: Build a Website From Scratch&lt;/a&gt; by Prismic has been updated based on the latest SvelteKit features&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltebyexample.com/&quot;&gt;Svelte by Example&lt;/a&gt; is a succinct, gentle introduction to Svelte &amp;amp; SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://khromov.se/the-comprehensive-guide-to-locals-in-sveltekit/&quot;&gt;The Comprehensive Guide to Locals in SvelteKit&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cpf.sh/blog/2023/10/27/how-to-build-a-blog-the-hard-way&quot;&gt;How to build a blog, the hard way&lt;/a&gt; by Curtis Parfitt-Ford&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.kylenazario.com/blog/full-content-rss-feed-with-sveltekit&quot;&gt;How to make a full-content RSS feed for your SvelteKit blog&lt;/a&gt; by Kyle Nazario&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://inorganik.net/posts/2023-10-08-routed-svelte-dialogs&quot;&gt;A simple hash-routed dialog system with Svelte&lt;/a&gt; by Jamie Perkins&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.robino.dev/posts/rendering-strategies&quot;&gt;When and Where to Render&lt;/a&gt; and &lt;a href=&quot;https://blog.robino.dev/posts/install-web-app&quot;&gt;One Less Reason to Build a Native App&lt;/a&gt; by Ross Robino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://theosteiner.de/open-neovim-from-your-browser-integrating-nvim-with-sveltes-inspector&quot;&gt;Open Neovim From Your Browser - Integrating nvim with Svelte’s Inspector&lt;/a&gt; by Theo Steiner&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Work to &lt;a href=&quot;https://github.com/denoland/deno/issues/17248&quot;&gt;support SvelteKit in Deno&lt;/a&gt; is ongoing and &lt;a href=&quot;https://github.com/denoland/deno/pull/21026&quot;&gt;Deno now supports&lt;/a&gt; creating SvelteKit projects out-of-the-box!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/WardPearce/Purplix.io&quot;&gt;Purplix&lt;/a&gt; is an open-source collection of tools dedicated to user privacy and creating trust with your audience&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Obra-Studio/obra-icons-svelte-public&quot;&gt;Obra Icons&lt;/a&gt; is a simple, consistent set of icons, perfect for user interfaces&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SimonPrammer/svelte-chat-langchain&quot;&gt;svelte-chat-langchain&lt;/a&gt; is a minimal version of &amp;ldquo;Chat LangChain&amp;rdquo; implemented with SvelteKit, Vercel AI SDK and of course Langchain&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte.cloudinary.dev/&quot;&gt;Cloudinary just released&lt;/a&gt; an official Svelte SDK (&lt;a href=&quot;https://github.com/cloudinary-community/svelte-cloudinary&quot;&gt;GitHub&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Wed, 01 Nov 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: October 2023</title><link>https://svelte.dev/blog/whats-new-in-svelte-october-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;Svelte 5 isn&amp;rsquo;t out yet (you can, however, &lt;a href=&quot;https://svelte-5-preview.vercel.app/&quot;&gt;preview it now&lt;/a&gt;), but that doesn&amp;rsquo;t mean we don&amp;rsquo;t get a sneak peek! Most notably are &lt;a href=&quot;/blog/runes&quot;&gt;Runes&lt;/a&gt; - a simpler way to manage reactive variables in Svelte code. There&amp;rsquo;s lots of links the showcase section for deeper dives on all things Runes, but let&amp;rsquo;s talk about what else been released this month...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte &amp;amp; Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/packages/svelte/CHANGELOG.md#421&quot;&gt;Svelte 4.2.1&lt;/a&gt; was released with a bunch of fixes to HTML, CSS and sourcemap compilation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-107.11.0&quot;&gt;The latest version of the Svelte language tools&lt;/a&gt; &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2157&quot;&gt;enhances component references&lt;/a&gt; in the &amp;ldquo;Find All References&amp;rdquo; command, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/2160&quot;&gt;fixes a persistent issue with automated types going missing&lt;/a&gt; after restarting a project and &lt;a href=&quot;https://github.com/sveltejs/language-tools/issues/2156&quot;&gt;adds fallback handling to auto-types&lt;/a&gt; (like those found in SvelteKit&amp;rsquo;s &lt;code&gt;+server.js&lt;/code&gt; files)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;+server.js&lt;/code&gt; now has a catch-all handler that handles all unimplemented valid server requests. Just export a &lt;code&gt;fallback&lt;/code&gt; function! (&lt;strong&gt;1.25.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/routing#server-Fallback-method-handler&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9755&quot;&gt;#9755&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s all for the new features! If you&amp;rsquo;re looking for other patches and performance updates, check out the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit CHANGELOG&lt;/a&gt;. You can also find adapter-specific CHANGELOGs in each of &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages&quot;&gt;the &lt;code&gt;adapter&lt;/code&gt; directories&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit Fall&lt;/a&gt; is happening on Nov 11, 2023. The 7th Virtual Svelte Conference is &lt;a href=&quot;https://sessionize.com/svelte-summit-fall-2023/&quot;&gt;open for proposals until October 15&lt;/a&gt; - anyone can submit!&lt;/p&gt;
&lt;p&gt;Threlte &lt;a href=&quot;https://threlte.xyz/hackathon&quot;&gt;is throwing a hackathon&lt;/a&gt; (&lt;strong&gt;motion warning for the landing page&lt;/strong&gt; - it will respect Reduce Motion settings). The kickoff event is on Sunday, 15 October 2023 16:00 UTC.&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/StephenGunn/game-of-life-svelte&quot;&gt;game-of-life-svelte&lt;/a&gt; is a Conway&amp;rsquo;s Game of Life implementation using SvelteKit tech&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://limey.io/&quot;&gt;Limey&lt;/a&gt; is an easy-to-use website builder for simple sites and landing pages&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://appwrite.io/&quot;&gt;Appwrite&amp;rsquo;s new landing page&lt;/a&gt; is now written with SvelteKit (previously covered was their &lt;a href=&quot;https://github.com/appwrite/console&quot;&gt;console UI&lt;/a&gt; in Svelte)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Dae314/placeit-game&quot;&gt;PlaceIt&lt;/a&gt; is a game about numbers and places&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltroid.vercel.app/&quot;&gt;Sveltroid&lt;/a&gt; is a fan-made recreation of Metroid Prime: Remastered (&lt;a href=&quot;https://github.com/TylerTonyJohnson/Metroid&quot;&gt;code&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bolighub.dk/&quot;&gt;Bolighub&lt;/a&gt; is a Denmark housing search portal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sigrist.dev/dithering&quot;&gt;Dithering&lt;/a&gt; is a tool to dither photos with plenty of options&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.rockymountainslam.com/&quot;&gt;Rocky Mountain Slam&lt;/a&gt; is an interactive map to follow Jason Heyn as he attempts to complete the first ever Rocky Mountain Slam (&lt;a href=&quot;https://github.com/martyheyn/rocky-mnt-slam&quot;&gt;code&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RVnxF3j3N8U&quot;&gt;Svelte 5: Introducing Runes... with Rich Harris&lt;/a&gt; and its follow-up: &lt;a href=&quot;https://www.youtube.com/watch?v=NR8L5m73dtE&quot;&gt;Svelte 5 runes: what&amp;rsquo;s the deal with getters and setters?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/conditionally-stream-data/&quot;&gt;Conditionally stream data in SvelteKit&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=TOTUXiYZhf4&quot;&gt;Svelte Runes Change How Reactivity Works In Svelte&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=f9fd1L1FEts&quot;&gt;Make A 3D GitHub Skyline With Svelte To Flex On Your Peers&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=q_2irZO4SS8&quot;&gt;Simple Page Transitions Using The View Transitions API With SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=N9OjaQ0XtKQ&quot;&gt;Using JavaScript Libraries With Svelte Is Easy&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://modernweb.podbean.com/e/modern-web-podcast-s11e2-exploring-svelte-open-source-and-discord-bots-with-willow-ghost/&quot;&gt;Modern Web Podcast S11E2&lt;/a&gt; - Exploring Svelte, Open Source, and Discord Bots with Willow (GHOST)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/we-are-back-svelte-5-transitions-whats-new&quot;&gt;We are back! Svelte 5, Transitions, What&amp;rsquo;s New?!&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fonBnVCIrjE&quot;&gt;2023 September 1&lt;/a&gt; - SvelteKit 1.24.0, View Transitions API, AbortController&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jfBjmczZwRc&quot;&gt;2023 September 8&lt;/a&gt; - SvelteKit 1.24.1, Capacitor walkthrough, reusing prop types&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qH2FavwhU88&quot;&gt;2023 September 15&lt;/a&gt; - SvelteKit 1.25.0, deserialize form data, magic is coming&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ek7KE1EDu2w&quot;&gt;2023 September 22&lt;/a&gt; - Svelte 5 Runes!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=iCK1coch1wA&quot;&gt;RUNES - Coming in Svelte v5 | My Take&lt;/a&gt; by Coding Garden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=DgNWssn2vpc&quot;&gt;Don&amp;rsquo;t Sleep on Svelte 5&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=-vjNAyL2JCQ&quot;&gt;Level Up Your Svelte Stores&lt;/a&gt; by Huntabyte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gihSBVfyFbI&quot;&gt;Introduction To Svelte Runes (Every Svelte Rune Explained)&lt;/a&gt; by Cooper Codes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JRZCqUOmFwY&quot;&gt;Svelte Runes: Awesome or Awful?&lt;/a&gt; by Jack Herrington&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=65yMfpsoH4o&quot;&gt;Let Build A Youtube Clone With SvelteKit (Svelte, Tailwind Css, RapidApi, Shadcn Svelte, Axios, etc)&lt;/a&gt; by Lawal Adebola&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/jdgamble555/create-the-perfect-sharable-rune-in-svelte-ij8&quot;&gt;Create the Perfect Sharable Rune in Svelte&lt;/a&gt; by Jonathan Gamble&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kaviisuri.com/you-dont-need-to-learn-svelte&quot;&gt;You Don&amp;rsquo;t Need to &amp;ldquo;Learn&amp;rdquo; Svelte&lt;/a&gt; by KaviiSuri&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://prismic.io/blog/sveltekit-prismic-integration&quot;&gt;Build Websites with Prismic and SvelteKit&lt;/a&gt; by Angelo Ashmore&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.okupter.com/blog/php-embed-svelte&quot;&gt;How to embed Svelte apps inside PHP?&lt;/a&gt; by Justin Ahinon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/theether0/using-web-browsers-indexed-db-in-sveltekit-3oo3&quot;&gt;Using Web Browser&amp;rsquo;s Indexed DB in SvelteKit&lt;/a&gt; by Shivam Meena&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mainmatter.com/blog/2023/09/18/integrate-storybook-in-svelte-doing-it-the-svelte-way/&quot;&gt;Integrate Storybook in Svelte: Doing it the Svelte-way&lt;/a&gt; by Oscar Dominguez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tntman.tech/posts/sveltekit-guide-part-1&quot;&gt;The Sveltekit tutorial: Part 1 | What, why, and how?&lt;/a&gt; by Suyashtnt&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/okupter/kitforstartups&quot;&gt;KitForStartups&lt;/a&gt; is an Open Source SvelteKit SaaS boilerplate&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/0xDjole/super-navigation&quot;&gt;SuperNavigation&lt;/a&gt; is a mobile-like navigation UX for the web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/plasmatech8/skeleton-material-theme&quot;&gt;skeleton-material-theme&lt;/a&gt; is a Material theme for the Skeleton UI library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/versiobit/better-i18n-for-svelte&quot;&gt;better-i18n-for-svelte&lt;/a&gt; is a SEO focused library for multi-language SvelteKit sites&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rossrobino/uico&quot;&gt;uico&lt;/a&gt; is a Tailwind plugin that provides utility classes for basic UI elements&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-maskify&quot;&gt;svelte-maskify&lt;/a&gt; is a action wrapper for AlpineJS masks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Hugos68/sveltekit-capacitor&quot;&gt;sveltekit-capacitor&lt;/a&gt; is a template for building a SvelteKit SPA with Capacitor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/HugeLetters/7a2813897dfe08fa948a13cac8a359c7&quot;&gt;router-gen.ts&lt;/a&gt; is a type-safe router for SvelteKit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate></item><item><title>Hacktoberfest 2023 with SvelteKit</title><link>https://svelte.dev/blog/hacktoberfest</link><author>Willow (GHOST) &amp; Braden Wiggins</author><description>&lt;h2 id=&quot;Sveltekit-Hacktoberfest&quot;&gt;&lt;span&gt;Sveltekit 🧡 Hacktoberfest&lt;/span&gt;&lt;a href=&quot;#Sveltekit-Hacktoberfest&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We&amp;rsquo;re excited to announce SvelteKit&amp;rsquo;s participation in this year&amp;rsquo;s Hacktoberfest! Hacktoberfest is a global event that takes place every October, during which developers are encouraged to contribute to open-source projects like SvelteKit. The goal is to foster a vibrant open-source community, celebrate shared knowledge, and make the world of coding more accessible to all. You can find other participating repositories by searching the &lt;a href=&quot;https://github.com/topics/hacktoberfest&quot;&gt;&lt;code&gt;hacktoberfest&lt;/code&gt; topic&lt;/a&gt; on github.&lt;/p&gt;
&lt;h2 id=&quot;Getting-Started&quot;&gt;&lt;span&gt;Getting Started&lt;/span&gt;&lt;a href=&quot;#Getting-Started&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The first step is to &lt;a href=&quot;https://hacktoberfest.com/register&quot;&gt;register for Hacktoberfest&lt;/a&gt;. Once you&amp;rsquo;ve registered, any PRs submitted to Sveltekit will count towards your participation in the event!&lt;/p&gt;
&lt;h2 id=&quot;Contributing&quot;&gt;&lt;span&gt;Contributing&lt;/span&gt;&lt;a href=&quot;#Contributing&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you need inspiration when looking for an issue to fix, check out the &lt;a href=&quot;https://github.com/sveltejs/kit/labels/low%20hanging%20fruit&quot;&gt;low hanging fruit&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/labels/contributions-welcome&quot;&gt;contributions-welcome&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/labels/ready%20to%20implement&quot;&gt;ready to implement&lt;/a&gt;, or &lt;a href=&quot;https://github.com/sveltejs/kit/labels/documentation&quot;&gt;documentation&lt;/a&gt; tags.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a good idea to communicate clearly and often about what you&amp;rsquo;re trying to solve or take on. You can do this by commenting on the issues you intend to take on. This helps avoid duplicate work and ensures that your contribution is in line with the project&amp;rsquo;s goals. Nobody likes to have their work rejected, so it&amp;rsquo;s best to ask questions early and often!&lt;/p&gt;
&lt;p&gt;Join our &lt;a href=&quot;/chat&quot;&gt;Discord&lt;/a&gt; and ask questions in the dedicated &lt;code&gt;#hacktoberfest&lt;/code&gt; channel. We&amp;rsquo;re happy to help you get started!&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited to see what you&amp;rsquo;ve got in store for SvelteKit! Happy hacking! 🎃&lt;/p&gt;</description><pubDate>Sun, 01 Oct 2023 00:00:00 GMT</pubDate></item><item><title>Rune 導入 (Introducing runes)</title><link>https://svelte.dev/blog/runes</link><author>The Svelte team</author><description>&lt;p&gt;2019 年、Svelte 3 は JavaScript を &lt;a href=&quot;/blog/svelte-3-rethinking-reactivity&quot;&gt;リアクティブな言語&lt;/a&gt; に変えました。Svelte はコンパイラを使用する web UI フレームワークで、このような宣言的なコンポーネントを…&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.svelte&quot;&gt;App&lt;/span&gt;&lt;input class=&quot;ts-toggle raised&quot; checked title=&quot;Toggle language&quot; type=&quot;checkbox&quot; aria-label=&quot;Toggle JS/TS&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{increment}&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {count}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{increment}&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {count}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;…&lt;code&gt;count&lt;/code&gt; のようなステートが変化したときに document を更新する、タイトに最適化された JavaScript に変換します。コンパイラは &lt;code&gt;count&lt;/code&gt; が参照されている場所を &amp;lsquo;把握&amp;rsquo; することができるので、生成されるコードは&lt;a href=&quot;/blog/virtual-dom-is-pure-overhead&quot;&gt;非常に効率的&lt;/a&gt;です。また、扱いにくい API を使用するのではなく、&lt;code&gt;let&lt;/code&gt; や &lt;code&gt;=&lt;/code&gt; などの構文をジャックしているため、&lt;a href=&quot;/blog/write-less-code&quot;&gt;コード量を減らす&lt;/a&gt;ことができます。&lt;/p&gt;
&lt;p&gt;私たちがよく受けるフィードバックとして、&amp;rsquo;JavaScript をすべてこのように書けたらいいのに&amp;rsquo; というものがあります。コンポーネント内のものが魔法のように更新されることに慣れていると、退屈で古い手続き型のコードに戻ることは、まるでカラーから白黒に戻るように感じられます。&lt;/p&gt;
&lt;p&gt;Svelte 5 では、&lt;em&gt;rune&lt;/em&gt; によって全てを変え、&lt;em&gt;ユニバーサルできめ細やかなリアクティビティ(universal, fine-grained reactivity)&lt;/em&gt; を実現します。&lt;/p&gt;
&lt;div class=&quot;max&quot;&gt;
&lt;figure style=&quot;max-width: 960px; margin: 0 auto&quot;&gt;
&lt;div style=&quot;aspect-ratio: 1.755; position: relative; margin: 0 auto;&quot;&gt;
	&lt;iframe style=&quot;position: absolute; width: 100%; height: 100%; left: 0; top: 0; margin: 0;&quot; src=&quot;https://www.youtube-nocookie.com/embed/RVnxF3j3N8U&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;figcaption&gt;Rune 導入&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;h2 id=&quot;before-we-begin&quot;&gt;&lt;span&gt;前書き&lt;/span&gt;&lt;a href=&quot;#before-we-begin&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;内部の動作を変更しているのですが、Svelte 5 はほとんどの方の場合ドロップインで置き換えられるはずです。この新機能はオプトインであるため、既存のコンポーネントを引き続き使用することができます。&lt;/p&gt;
&lt;p&gt;Svelte 5 のリリース日はまだ決まっていません。ここでお見せするものはまだ作業中のものであり、変更される可能性があります！&lt;/p&gt;
&lt;h2 id=&quot;what-are-runes&quot;&gt;&lt;span&gt;Rune とは&lt;/span&gt;&lt;a href=&quot;#what-are-runes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;blockquote class=&quot;note&quot;&gt;&lt;p&gt; &lt;strong&gt;rune&lt;/strong&gt; /ro͞on/ &lt;em&gt;noun&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;神秘的で魔法的なシンボルとして使用される文字、またはマーク。&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Rune は Svelte コンパイラに働きかけるシンボルです。現在の Svelte では &lt;code&gt;let&lt;/code&gt;、&lt;code&gt;=&lt;/code&gt;、&lt;a href=&quot;https://learn.svelte.jp/tutorial/declaring-props&quot;&gt;&lt;code&gt;export&lt;/code&gt;&lt;/a&gt; キーワード、そして &lt;a href=&quot;https://learn.svelte.jp/tutorial/reactive-declarations&quot;&gt;&lt;code&gt;$:&lt;/code&gt;&lt;/a&gt; ラベル を特殊なものとして意味するように使用するのに対し、rune は同様のことを &lt;em&gt;関数の構文(function syntax)&lt;/em&gt; で実現します。&lt;/p&gt;
&lt;p&gt;例えば、リアクティブなステートを宣言するには、&lt;code&gt;$state&lt;/code&gt; という rune を使用します:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.svelte&quot;&gt;App&lt;/span&gt;&lt;input class=&quot;ts-toggle raised&quot; checked title=&quot;Toggle language&quot; type=&quot;checkbox&quot; aria-label=&quot;Toggle JS/TS&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{increment}&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {count}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{increment}&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {count}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一見すると、これは後退しているように見えるかもしれません。&lt;a href=&quot;https://twitter.com/stolinski/status/1438173489479958536&quot;&gt;Svelte らしくない(un-Svelte-like)&lt;/a&gt;、と。デフォルトで &lt;code&gt;let count&lt;/code&gt; がリアクティブであるほうが良いのではないか？と。&lt;/p&gt;
&lt;p&gt;いいえ、それは違います。実際、アプリケーションが複雑になってくるにつれ、どの値がリアクティブでどの値がリアクティブでないのか判別するのが難しくなってくるのです。また、このヒューリスティックはコンポーネントのトップレベルにある &lt;code&gt;let&lt;/code&gt; 宣言でのみ機能するため、混乱を招く可能性があります。コードの振る舞いが &lt;code&gt;.svelte&lt;/code&gt; ファイル内と &lt;code&gt;.js&lt;/code&gt; で異なっていると、コードのリファクタリングが難しくなります。例えば、何かを &lt;a href=&quot;/tutorial/svelte/introducing-stores&quot;&gt;store&lt;/a&gt; にして複数の場所で使えるようにする必要がある場合などです。&lt;/p&gt;
&lt;h2 id=&quot;beyond-components&quot;&gt;&lt;span&gt;コンポーネントを越えて&lt;/span&gt;&lt;a href=&quot;#beyond-components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;rune を使うと、リアクティビティが &lt;code&gt;.svelte&lt;/code&gt; ファイルの境界を越えて拡がっていきます。counter のロジックをコンポーネント間で再利用できるようにカプセル化したいとします。現在は、&lt;a href=&quot;/docs/svelte/stores&quot;&gt;custom store&lt;/a&gt; を &lt;code&gt;.js&lt;/code&gt; や &lt;code&gt;.ts&lt;/code&gt; ファイルで使用することになるでしょう:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.js&quot;&gt;counter&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;writable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;StartStopNotifier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Writable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Create a &lt;code&gt;Writable&lt;/code&gt; store that allows both updating and reading by subscription.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;value&lt;/span&gt; initial value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;writable&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;svelte/store&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;createCounter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;subscribe&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Subscriber&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;invalidate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Unsubscriber&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;createCounter&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;subscribe&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Subscriber&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;invalidate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Unsubscriber&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Subscribe on value changes.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;subscribe&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;updater&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Updater&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Update value using callback and inform subscribers.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;update&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;writable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;number&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;StartStopNotifier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;): Writable&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Create a &lt;code&gt;Writable&lt;/code&gt; store that allows both updating and reading by subscription.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;value&lt;/span&gt; initial value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;writable&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;subscribe&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Subscriber&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;invalidate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Unsubscriber&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;subscribe&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;increment&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;update&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;updater&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Updater&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Update value using callback and inform subscribers.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;updater&lt;/span&gt; callback&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;update&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;n&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これは &lt;em&gt;ストアコントラクト(store contract)&lt;/em&gt; を実装しているため、戻り値には &lt;code&gt;subscribe&lt;/code&gt; メソッドがあり、store の名前の先頭に &lt;code&gt;$&lt;/code&gt; を付けることで その store の値を参照することができます:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.svelte&quot;&gt;App&lt;/span&gt;&lt;input class=&quot;ts-toggle raised&quot; checked title=&quot;Toggle language&quot; type=&quot;checkbox&quot; aria-label=&quot;Toggle JS/TS&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight add&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ createCounter }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./counter.js&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;createCounter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight remove&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{increment}&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {count}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.increment}&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {$counter}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight add&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ createCounter }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./counter.js&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;createCounter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight remove&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{increment}&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight remove&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {count}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.increment}&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {$counter}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;動作しますが、かなり奇妙です！ store API は、複雑なことをやり始めるとかなり扱いにくくなることがわかりました。&lt;/p&gt;
&lt;p&gt;rune を使えば、もっとシンプルになります:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.js&quot;&gt;counter.svelte&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;import { writable } from &#39;svelte/store&#39;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;createCounter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;createCounter&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;const { subscribe, update } = writable(0);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;$state&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(initial&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;overload&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;$state&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Declares reactive state.&lt;/p&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;p&gt;Example:&lt;/p&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;$state&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://svelte.dev/docs/svelte/$state&quot;&gt;https://svelte.dev/docs/svelte/$state&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;initial&lt;/span&gt; The initial value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;$state&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;subscribe,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;increment: () =&gt; update((n) =&gt; n + 1)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;get&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;increment&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.svelte&quot;&gt;App&lt;/span&gt;&lt;input class=&quot;ts-toggle raised&quot; checked title=&quot;Toggle language&quot; type=&quot;checkbox&quot; aria-label=&quot;Toggle JS/TS&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ createCounter }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./counter&lt;span class=&quot;highlight add&quot;&gt;.svelte&lt;/span&gt;.js&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;createCounter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.increment}&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {$counter}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.count}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ createCounter }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./counter&lt;span class=&quot;highlight add&quot;&gt;.svelte&lt;/span&gt;.js&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;createCounter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.increment}&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {$counter}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;clicks: {&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;counter&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.count}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote class=&quot;note&quot;&gt;&lt;p&gt; rune は、&lt;code&gt;.svelte&lt;/code&gt; コンポーネント以外だと &lt;code&gt;.svelte.js&lt;/code&gt; モジュールと &lt;code&gt;.svelte.ts&lt;/code&gt; モジュールでのみ使うことができます。&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;戻り値のオブジェクトで &lt;a href=&quot;https://developer.mozilla.org/docs/Web/JavaScript/Reference/Functions/get&quot;&gt;get property&lt;/a&gt; を使用しているため、&lt;code&gt;counter.count&lt;/code&gt; はこの関数が呼ばれたときの値ではなく、常に現在の値を指すことにご留意ください。&lt;/p&gt;
&lt;h2 id=&quot;Runtime-reactivity&quot;&gt;&lt;span&gt;Runtime reactivity&lt;/span&gt;&lt;a href=&quot;#Runtime-reactivity&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;現在、Svelte は &lt;em&gt;コンパイル時のリアクティビティ(compile-time reactivity)&lt;/em&gt; を使用しています。これはつまり、依存しているものが変更されたときに自動的に再実行されるよう &lt;code&gt;$:&lt;/code&gt; ラベルを使用しているコードがある場合において、それらの依存関係 (dependencies) は Svelte がコンポーネントをコンパイルするときに決定される、ということです:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;width;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;height;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// コンパイラは、`width` や `height` のどちらかが変更されると&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// `area` を再計算する必要があることをわかっています…&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;area&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;width&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;height;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// …そして、`area` の値が変更されたときに&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// ログ出力することもわかっています…&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(area);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これは上手く機能します…が、上手くいかないこともあります。上記のコードをリファクタリングしたとしましょう:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;multiplyByHeight&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(width&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;multiplyByHeight&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;width&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;width&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;height&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;area&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;multiplyByHeight&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(width&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;multiplyByHeight&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;width&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この &lt;code&gt;$: area = ...&lt;/code&gt; の宣言では、&lt;code&gt;width&lt;/code&gt; しか &amp;lsquo;把握&amp;rsquo; することができないため、&lt;code&gt;height&lt;/code&gt; が変更されても再計算されなくなります。結果として、コードをリファクタリングするのが難しくなり、複雑さがあるレベルを越えてくると Svelte がいつどの値を更新するのか、ということを理解するのが難しくなってきます。&lt;/p&gt;
&lt;p&gt;Svelte 5 では &lt;code&gt;$derived&lt;/code&gt; rune と &lt;code&gt;$effect&lt;/code&gt; rune が導入され、評価されるときにその式の依存関係(dependencies)が決定されるようになります:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ width&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;height }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// instead of `export let`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;area&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;derived&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(width&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;height);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;effect&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(area);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;$state&lt;/code&gt; と同様、&lt;code&gt;$derived&lt;/code&gt; と &lt;code&gt;$effect&lt;/code&gt; も &lt;code&gt;.js&lt;/code&gt; ファイルや &lt;code&gt;.ts&lt;/code&gt; で使用することができます。&lt;/p&gt;
&lt;h2 id=&quot;Signal-boost&quot;&gt;&lt;span&gt;Signal boost&lt;/span&gt;&lt;a href=&quot;#Signal-boost&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;他のすべてのフレームワークと同じように、私たちは &lt;a href=&quot;https://knockoutjs.com/&quot;&gt;Knockout&lt;/a&gt; が正しかったことに気が付きました。&lt;/p&gt;
&lt;p&gt;Svelte 5 のリアクティビティは &lt;em&gt;signal&lt;/em&gt; によってもたらされており、これは本質的には &lt;a href=&quot;https://dev.to/this-is-learning/the-evolution-of-signals-in-javascript-8ob&quot;&gt;Knockout が 2010年に行っていたこと&lt;/a&gt;です。最近では、signal は &lt;a href=&quot;https://www.solidjs.com/&quot;&gt;Solid&lt;/a&gt; によって普及し、そして他の多くのフレームワークにも採用されています。&lt;/p&gt;
&lt;p&gt;しかし、私たちの方法は少し異なります。Svelte 5 では、signal は直接操作をするものではなく、内部実装の詳細です。これにより、同様の API の設計上の制約がないため、効率とエルゴノミクスの両方を最大化することができます。例えば、関数呼び出しで値にアクセスすることによって発生する型の絞り込み(type narrowing)の問題を避けることができ、また、サーバーサイドレンダリングーモードでコンパイルする際には signal を完全に取り除くことができます (サーバー上では signal はオーバーヘッドだからです)。&lt;/p&gt;
&lt;p&gt;Signal は &lt;em&gt;きめ細やかなリアクティビティ(fine-grained reactivity)&lt;/em&gt; を実現し、それはつまり (例えば) 大きいリストの中にある値を変更しても、そのリストの他のメンバーを最新化(invalidate)する必要がないということです。そのため、Svelte 5 はとてつもなく高速です。&lt;/p&gt;
&lt;h2 id=&quot;simpler-times-ahead&quot;&gt;&lt;span&gt;よりシンプルな時代の到来&lt;/span&gt;&lt;a href=&quot;#simpler-times-ahead&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Rune は付加的な機能ですが、既存のコンセプトの多くを不要なものにします:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;コンポーネントのトップレベルにある &lt;code&gt;let&lt;/code&gt; とそれ以外の場所にある &lt;code&gt;let&lt;/code&gt; の違い&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export let&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$:&lt;/code&gt; と、これに付随する風変わりなもの全て&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; と &lt;code&gt;&amp;lt;script context=&amp;quot;module&amp;quot;&amp;gt;&lt;/code&gt; の振る舞いの違い&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$$props&lt;/code&gt; と &lt;code&gt;$$restProps&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ライフサイクル関数 (&lt;code&gt;onMount&lt;/code&gt; などは &lt;code&gt;$effect&lt;/code&gt; 関数で良いでしょう)&lt;/li&gt;
&lt;li&gt;store API と &lt;code&gt;$&lt;/code&gt; 接頭辞 (store は不要になりますが、非推奨ではありません)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;すでに Svelte を使用している方々にとっては、新たに学ぶことがありますが、これが Svelte アプリの構築とメンテナンスをより簡単になればと思っています。これから Svelte を使う方は、全てを学習する必要はありません。ドキュメントに &amp;lsquo;old stuff&amp;rsquo; というタイトルのセクションがあるだけになるでしょう。&lt;/p&gt;
&lt;p&gt;これはまだ始まりに過ぎません。今後のリリースに向けて、Svelte をよりシンプルで高機能にするアイデアでいっぱいの長いリストがあります。&lt;/p&gt;
&lt;h2 id=&quot;Try-it&quot;&gt;&lt;span&gt;Try it!&lt;/span&gt;&lt;a href=&quot;#Try-it&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まだ Svelte 5 をプロダクションで使用することはできません。私たちは今現在作業中で、いつあなたのアプリで使えるようになるのかお伝えすることができません。&lt;/p&gt;
&lt;p&gt;しかし、私たちはみなさんを待たせたままにしたくありませんでした。&lt;a href=&quot;https://svelte-5-preview.vercel.app&quot;&gt;プレビューサイト&lt;/a&gt;を作成し、新機能の詳細な説明と、インタラクティブな playground を用意しました。また、&lt;a href=&quot;https://svelte.dev/chat&quot;&gt;Svelte Discord&lt;/a&gt; の &lt;code&gt;#svelte-5-runes&lt;/code&gt; チャンネルでより詳しく学ぶこともできます。みなさんのフィードバックをお待ちしております！&lt;/p&gt;</description><pubDate>Wed, 20 Sep 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: September 2023</title><link>https://svelte.dev/blog/whats-new-in-svelte-september-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;Happy September y&amp;rsquo;all! With all the &lt;a href=&quot;https://twitter.com/Rich_Harris/status/1688581184018583558&quot;&gt;sneak peeks at what&amp;rsquo;s coming soon in Svelte 5&lt;/a&gt;, we thought it&amp;rsquo;d be best to look back at the last month to see what&amp;rsquo;s shipped and what the community is building with Svelte.&lt;/p&gt;
&lt;p&gt;Before we jump in, a warm welcome to the new Svelte Ambassadors: &lt;a href=&quot;https://github.com/cainux&quot;&gt;@cainux&lt;/a&gt; and &lt;a href=&quot;https://github.com/grischaerbe&quot;&gt;@grischaerbe&lt;/a&gt;! Welcome to the crew ⛴️&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte &amp;amp; Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;svelteHTML&lt;/code&gt; has moved from language-tools into Svelte core so that &lt;code&gt;svelte/element&lt;/code&gt; types will now load correctly (&lt;strong&gt;4.2.0&lt;/strong&gt; in Svelte, &lt;strong&gt;107.10.0&lt;/strong&gt; in Language Tools)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;URL&lt;/code&gt; is now accepted in the &lt;code&gt;redirect&lt;/code&gt; function (&lt;strong&gt;1.23.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/@sveltejs-kit#redirect&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10570&quot;&gt;#10570&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Mistyped route filenames will now throw a warning (&lt;strong&gt;1.23.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10558&quot;&gt;#10558&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;onNavigate&lt;/code&gt; lifecycle function enables view transitions - Check out the &lt;a href=&quot;/blog/view-transitions&quot;&gt;blog post&lt;/a&gt; for more info (&lt;strong&gt;1.24.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/$app-navigation#onNavigate&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9605&quot;&gt;#9605&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But that&amp;rsquo;s just the new features! For all the patches and performance updates from this month, check out the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit CHANGELOG&lt;/a&gt;. You can also find adapter-specific CHANGELOGs in each of &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages&quot;&gt;the &lt;code&gt;adapter&lt;/code&gt; directories&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://planetofthebugs.xyz/&quot;&gt;Planet Of The Bugs&lt;/a&gt; allows developers to practice and hone their skill-sets by exposing them to an endless supply of unique, curated issues and bugs from popular open-source projects on Github&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ProductionPanic/minesweeper/tree/main&quot;&gt;Minesweeper&lt;/a&gt; is an Android game built with SvelteKit, Capacitor, TailwindCSS and DaisyUI (check it out on the &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.production.panic.minesweeper&amp;pli=1&quot;&gt;Google Play Store&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pendor.ai/&quot;&gt;Pendor&lt;/a&gt; is an AI component generator for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://senja.io/testimonial-widgets/avatars-pro&quot;&gt;Avatars Pro&lt;/a&gt; is a social proof widget made for the web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/con-dog/pomodoro-focus&quot;&gt;Pomodoro Focus&lt;/a&gt; is a pomodoro timer browser extension&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bhupeshpr25/memegen&quot;&gt;memegen&lt;/a&gt; is a Firefox web extension that allows users to generate memes using various templates&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://resgen.app/&quot;&gt;Resgen&lt;/a&gt; is a Chrome extension that tailors resumes based on job descriptions and your experiences&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.icono-search.com&quot;&gt;Icono Search&lt;/a&gt; is an AI-powered video search engine&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/danferns/digital-paper&quot;&gt;digital-paper&lt;/a&gt; is a writing app with no backspace or undo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/manhhungpc/ubuntu2204-svelte&quot;&gt;Ubuntu 22.04 in Svelte&lt;/a&gt; aims to replicate the Ubuntu 22.04 desktop experience on the web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.myqueue.so/&quot;&gt;My Queue&lt;/a&gt; creates a playlist of written articles by turning them into audio stories&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=90Psdk5rAnU&quot;&gt;Svelte Society - London August 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kevinak.se/blog/building-a-blog-using-sveltekit-and-nostr-as-a-cms-part-1-1690807337563&quot;&gt;Building a Blog using SvelteKit and Nostr as a CMS (Part 1&lt;/a&gt;) by Kev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MaF8kRbHbi0&quot;&gt;Mastering SvelteKit with Geoff Rich | JS Drops&lt;/a&gt; by This Dot Media&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/f9fd1L1FEts?si=3hbihW-X5-GKSJxN&quot;&gt;Using GitHub Contributions To Flex On The Normies&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=w2q9caYXgkg&quot;&gt;Learn Svelte By Making A Matching Game&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=T-lBPpeokfY&quot;&gt;Who Needs API Permission When You Can Use Web Scraping&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://khromov.se/the-missing-guide-to-understanding-adapter-static-in-sveltekit/&quot;&gt;The missing guide to understanding adapter-static in SvelteKit&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mvTEQ_C0qRQ&quot;&gt;2023 July 28&lt;/a&gt; - Screen reader market share, Svelte to plain JS, Web Components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Ye8cCJyPZjg&quot;&gt;2023 Aug 4&lt;/a&gt; - Svelte 4.1.2, SvelteKit 1.22.4, ES Modules, Types in markup&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8XUaiCVkCI&quot;&gt;2023 August 11&lt;/a&gt; - Svelte 4.2.0, SvelteKit 1.22.5, How to create Toggle Switches&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nJ5Wf3uL7dM&quot;&gt;2023 August 18&lt;/a&gt; - SvelteKit 1.22.6, accessible form error summaries&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JoPzvlBKXXE&quot;&gt;2023 August 25&lt;/a&gt; - SvelteKit 1.23.0, Bun and SvelteKit, Enhanced search&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Svienna (Svelte Society Vienna) Sessions&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=dSUmtijkFOc&quot;&gt;Ermin Celikovic - You might not need a slider library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=u41-MtPGH04&quot;&gt;Lukas Stracke - How to use sentry.io in your SvelteKit App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=N8d290fTzq8&quot;&gt;Jean-Yves Couet - SvelteKit &amp;amp; Remult... fullstack apps in minutes!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sirens Sessions&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=19Meb-yMsAg&quot;&gt;Prismic Slice Machines &amp;amp; SvelteKit&lt;/a&gt; with Sam Littlefair&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=rVVHxows9dY&quot;&gt;Medusa and SvelteKit E-Commerce Stack&lt;/a&gt; with Lacey Pevey&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=YHZaiIGSqsE&quot;&gt;Design Systems: Lessons Learned&lt;/a&gt; with Eric Liu&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=285vSLe9LQ8&quot;&gt;Image optimization in SvelteKit with vite-imagetools&lt;/a&gt; by hartenfellerdev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=w7is2bCTUg0&quot;&gt;Building a Todo App with Rust and SvelteKit: Complete Tutorial&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=o8gvCLgz1vs&quot;&gt;Stripe Payment In SvelteKit With Dynamic Pricing&lt;/a&gt; by SvelteRust&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JFctWXEzFZw&quot;&gt;Leaflet maps in SvelteKit like it&amp;rsquo;s 2023 (HowTo)&lt;/a&gt;
ShipBit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.aakashgoplani.in/series/i18n-in-sveltekit&quot;&gt;Internationalization in SvelteKit (Series)&lt;/a&gt; by Aakash Goplani&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://simon-prammer.vercel.app/blog/post/sveltekit-langchain&quot;&gt;The easiest Chatbot you will ever build&lt;/a&gt; and &lt;a href=&quot;https://simon-prammer.vercel.app/blog/post/langsmith&quot;&gt;Intro to LangSmith🦜️🛠️&lt;/a&gt; by Simon Prammer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/maxcore/sveltekit-how-to-make-code-based-router-instead-of-file-based-router-august-2023-5f9&quot;&gt;SvelteKit: How to make code-based router, instead of file-based router [August 2023]&lt;/a&gt; by Max Core&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.captaincodeman.com/sveltekit-hydration-gotcha&quot;&gt;SvelteKit Hydration Gotcha&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://alex-schnabl.medium.com/automatically-generate-sitemap-xml-in-sveltekit-910bd09d17e7&quot;&gt;Automatically generate sitemap.xml in SvelteKit&lt;/a&gt; by Alex Schnabl&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tronic247.com/discovering-svelte-things-i-learned-while-using-svelte/&quot;&gt;Discovering Svelte: Things I Learned While Using Svelte&lt;/a&gt; by Posandu Mapa&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/subhendupsingh/typed-fetch-with-sveltekit-and-hono-using-rpc-2clf&quot;&gt;Typed fetch with Sveltekit and Hono using RPC&lt;/a&gt; by Subhendu Pratap Singh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://raqueebuddinaziz.com/blog/svelte-context-module-scripts-explained&quot;&gt;Svelte Context Module Scripts Explained&lt;/a&gt; by raqueebuddin aziz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kvak.io/meoweler&quot;&gt;Building with GPT4 and Svelte&lt;/a&gt; by levmiseri&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://upstash.com/blog/lucia-sveltekit&quot;&gt;Type-safe User Authentication in SvelteKit with Lucia, Planetscale, and Upstash Redis&lt;/a&gt; by Chris Jayden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.robino.dev/posts/doc-comments-svelte&quot;&gt;Document Svelte Projects with HTML and JSDoc Comments&lt;/a&gt; by Ross Robino&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/BearToCode/carta-md&quot;&gt;Carta&lt;/a&gt; is a lightweight, fast and extensible Svelte Markdown editor and viewer, based on Marked&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://threlte.xyz/&quot;&gt;Threlte&lt;/a&gt;, the 3D framework built from Svelte and Three.js has released version 6&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vite-plugin-web-extension.aklinker1.io/guide/frontend-frameworks.html#svelte-integration&quot;&gt;vite-plugin-web-extension&lt;/a&gt; works great with Svelte to make building browser extensions easier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/salvia-kit/svelte-dashboards&quot;&gt;Salvia-kit Svelte Dashboards&lt;/a&gt; contains 10 free dashboard templates for SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rossrobino/drab&quot;&gt;drab&lt;/a&gt; is an Unstyled Svelte component library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-img-previewer?activeTab=readme&quot;&gt;svelte-img-previewer&lt;/a&gt; is a tool for displaying images from input file types in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paoloricciuti/sveltekit-search-params&quot;&gt;sveltekit-search-params&lt;/a&gt; describes itself as the fastest way to read AND write from query search params in SvelteKit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s it for this month! Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Fri, 01 Sep 2023 00:00:00 GMT</pubDate></item><item><title>Unlocking view transitions in SvelteKit 1.24</title><link>https://svelte.dev/blog/view-transitions</link><author>Geoff Rich</author><description>&lt;p&gt;The &lt;a href=&quot;https://developer.chrome.com/docs/web-platform/view-transitions/&quot;&gt;view transitions API&lt;/a&gt; has been sweeping the web development world lately, and for good reason. It streamlines the process of animating between two page states, which is especially useful for page transitions.&lt;/p&gt;
&lt;p&gt;However, until now, you couldn’t easily use this API in a SvelteKit app, since it was difficult to slot into the right place in the navigation lifecycle. SvelteKit 1.24 brought a new &lt;a href=&quot;/docs/kit/$app-navigation#onNavigate&quot;&gt;&lt;code&gt;onNavigate&lt;/code&gt;&lt;/a&gt; lifecycle hook to make view transitions integration much easier – let’s dive in.&lt;/p&gt;
&lt;h2 id=&quot;How-view-transitions-work&quot;&gt;&lt;span&gt;How view transitions work&lt;/span&gt;&lt;a href=&quot;#How-view-transitions-work&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;You can trigger a view transition by calling &lt;code&gt;document.startViewTransition&lt;/code&gt; and passing a callback that updates the DOM somehow. For our purposes today, SvelteKit will update the DOM as the user navigates. Once the callback finishes, the browser will transition to the new page state — by default, it does a crossfade between the old and the new states.&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Document&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/document&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;document&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.startViewTransition&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(callbackOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;ViewTransitionUpdateCallback): ViewTransition&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Document/startViewTransition&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;startViewTransition&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;async&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;domUpdate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;domUpdate&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// mock function for demonstration purposes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Behind the scenes, the browser does something really clever. When the transition starts, it captures the current state of the page and takes a screenshot. It then holds that screenshot in place while the DOM is updating. Once the DOM has finished updating, it captures the new state, and animates between the two states.&lt;/p&gt;
&lt;p&gt;While it’s only implemented in Chrome (and other Chromium-based browsers) for now, &lt;a href=&quot;https://github.com/WebKit/standards-positions/issues/48#issuecomment-1679760489&quot;&gt;WebKit is also in favor&lt;/a&gt; of it. Even if you’re on an unsupported browser, it’s a perfect candidate for progressive enhancement since we can always fall back to a non-animated navigation.&lt;/p&gt;
&lt;p&gt;It’s important to note that view transitions is a browser API, not a SvelteKit one. &lt;code&gt;onNavigate&lt;/code&gt; is the only SvelteKit-specific API we’ll use today. Everything else can be used wherever you write for the web! For more on the view transitions API, I highly recommend the &lt;a href=&quot;https://developer.chrome.com/docs/web-platform/view-transitions/&quot;&gt;Chrome explainer&lt;/a&gt; by Jake Archibald.&lt;/p&gt;
&lt;h2 id=&quot;How-onNavigate-works&quot;&gt;&lt;span&gt;How onNavigate works&lt;/span&gt;&lt;a href=&quot;#How-onNavigate-works&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Before learning how to write view transitions, let&amp;rsquo;s highlight the function that makes it all possible: &lt;a href=&quot;/docs/kit/$app-navigation#onNavigate&quot;&gt;&lt;code&gt;onNavigate&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until recently, SvelteKit had two navigation lifecycle functions: &lt;a href=&quot;/docs/kit/$app-navigation#beforeNavigate&quot;&gt;&lt;code&gt;beforeNavigate&lt;/code&gt;&lt;/a&gt;, which fires before a navigation starts, and &lt;a href=&quot;/docs/kit/$app-navigation#afterNavigate&quot;&gt;&lt;code&gt;afterNavigate&lt;/code&gt;&lt;/a&gt;, which fires after the page has been updated following a navigation. SvelteKit 1.24 introduces a third: &lt;code&gt;onNavigate&lt;/code&gt;, which will fire on every navigation, immediately before the new page is rendered. Importantly, it will run &lt;em&gt;after&lt;/em&gt; any data loading for the page has completed – since starting a view transition prevents any interaction with the page, we want to start it as late as possible.&lt;/p&gt;
&lt;p&gt;You can also return a promise from &lt;code&gt;onNavigate&lt;/code&gt;, which will suspend the navigation until it resolves. This will let us wait to complete the navigation until the view transition has started.&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;delayNavigation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;delayNavigation&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PromiseConstructor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;executor&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;reject&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(reason&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Creates a new Promise.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;executor&lt;/span&gt; A callback used to initialize the promise. This callback is passed two arguments:
a resolve callback used to resolve the promise with a value or the result of another promise,
and a reject callback used to reject the promise with a provided reason or error.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;Promise&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;res&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;setTimeout&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;callback&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(_&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;delay&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;NodeJS&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Timeout&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;overloads&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/setTimeout&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;setTimeout&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;res&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;res&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;onNavigate&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;async&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;navigation&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// do some work immediately before the navigation completes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// optionally return a promise to delay navigation until it resolves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;delayNavigation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;delayNavigation&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With that out of the way, let&amp;rsquo;s see how you can use view transitions in your SvelteKit app.&lt;/p&gt;
&lt;h2 id=&quot;Getting-started-with-view-transitions&quot;&gt;&lt;span&gt;Getting started with view transitions&lt;/span&gt;&lt;a href=&quot;#Getting-started-with-view-transitions&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The best way to see view transitions in action is to try it yourself. You can spin up the SvelteKit demo app by running &lt;code&gt;npm create svelte@latest&lt;/code&gt; in your local terminal, or in your browser on &lt;a href=&quot;https://sveltekit.new&quot;&gt;StackBlitz&lt;/a&gt;. Make sure to use a browser that supports the view transitions API. Once you have the app running, add the following to the script block in &lt;code&gt;src/routes/+layout.svelte&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;onNavigate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;callback&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(navigation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;@sveltejs/kit&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;OnNavigate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;MaybePromise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;A lifecycle function that runs the supplied &lt;code&gt;callback&lt;/code&gt; immediately before we navigate to a new URL except during full-page navigations.&lt;/p&gt;
&lt;p&gt;If you return a &lt;code&gt;Promise&lt;/code&gt;, SvelteKit will wait for it to resolve before completing the navigation. This allows you to — for example — use &lt;code&gt;document.startViewTransition&lt;/code&gt;. Avoid promises that are slow to resolve, since navigation will appear stalled to the user.&lt;/p&gt;
&lt;p&gt;If a function (or a &lt;code&gt;Promise&lt;/code&gt; that resolves to a function) is returned from the callback, it will be called once the DOM has updated.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;onNavigate&lt;/code&gt; must be called during a component initialization. It remains active as long as the component is mounted.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;onNavigate&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;$app/navigation&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;onNavigate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;callback&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(navigation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;@sveltejs/kit&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;OnNavigate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;MaybePromise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;A lifecycle function that runs the supplied &lt;code&gt;callback&lt;/code&gt; immediately before we navigate to a new URL except during full-page navigations.&lt;/p&gt;
&lt;p&gt;If you return a &lt;code&gt;Promise&lt;/code&gt;, SvelteKit will wait for it to resolve before completing the navigation. This allows you to — for example — use &lt;code&gt;document.startViewTransition&lt;/code&gt;. Avoid promises that are slow to resolve, since navigation will appear stalled to the user.&lt;/p&gt;
&lt;p&gt;If a function (or a &lt;code&gt;Promise&lt;/code&gt; that resolves to a function) is returned from the callback, it will be called once the DOM has updated.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;onNavigate&lt;/code&gt; must be called during a component initialization. It remains active as long as the component is mounted.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;onNavigate&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;navigation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;OnNavigate&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;navigation&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Document&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/document&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;document&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.startViewTransition&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(callbackOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;ViewTransitionUpdateCallback): ViewTransition&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Document/startViewTransition&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;startViewTransition&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PromiseConstructor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;executor&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PromiseLike&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;reject&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(reason&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Creates a new Promise.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;executor&lt;/span&gt; A callback used to initialize the promise. This callback is passed two arguments:
a resolve callback used to resolve the promise with a value or the result of another promise,
and a reject callback used to reject the promise with a provided reason or error.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;Promise&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PromiseLike&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;resolve&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Document&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/document&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;document&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.startViewTransition&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(callbackOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;ViewTransitionUpdateCallback): ViewTransition&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Document/startViewTransition&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;startViewTransition&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;async&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PromiseLike&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;resolve&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;navigation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;OnNavigate&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;navigation&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;NavigationBase&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.complete:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;void&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;A promise that resolves once the navigation is complete, and rejects if the navigation
fails or is aborted. In the case of a &lt;code&gt;willUnload&lt;/code&gt; navigation, the promise will never resolve&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;complete&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With that, every navigation that occurs will trigger a view transition. You can already see this in action – by default, the browser will crossfade between the old and new pages.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://sveltejs.github.io/assets/video/vt-demo-1.mp4&quot; controls muted playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;blockquote class=&quot;note&quot;&gt;&lt;details&gt;&lt;summary&gt;How the code works&lt;/summary&gt;&lt;p&gt;
This code may look a bit intimidating – if you&amp;rsquo;re curious, I can break it down line-by-line, but for now it’s enough to know that adding it will allow you to interact with the view transitions API during navigation.&lt;/p&gt;
&lt;p&gt;As mentioned above, the &lt;code&gt;onNavigate&lt;/code&gt; callback will run immediately before the new page is rendered after a navigation. Inside the callback, we check if &lt;code&gt;document.startViewTransition&lt;/code&gt; exists. If it doesn’t (i.e. the browser doesn’t support it), we exit early.&lt;/p&gt;
&lt;p&gt;We then return a promise to delay completing the navigation until the view transition has started. We use a &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise&quot;&gt;promise constructor&lt;/a&gt; so that we can control when the promise resolves.&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PromiseConstructor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;executor&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;reject&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(reason&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Creates a new Promise.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;executor&lt;/span&gt; A callback used to initialize the promise. This callback is passed two arguments:
a resolve callback used to resolve the promise with a value or the result of another promise,
and a reject callback used to reject the promise with a provided reason or error.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;Promise&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;resolve&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Document&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/document&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;document&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.startViewTransition&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(callbackOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;ViewTransitionUpdateCallback): ViewTransition&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Document/startViewTransition&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;startViewTransition&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;async&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;resolve&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;navigation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;complete&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Inside the promise constructor, we start the view transition. Inside the view transition callback we resolve the promise we just returned, which indicates to SvelteKit that it should finish the navigation. It’s important that the navigation waits to finish until &amp;gt; &lt;em&gt;after&lt;/em&gt; we start the view transition – the browser needs to snapshot the old state so it can transition to the new state.&lt;/p&gt;
&lt;p&gt;Finally, inside the view transition callback we wait for SvelteKit to finish the navigation by awaiting &lt;code&gt;navigation.complete&lt;/code&gt;. Once &lt;code&gt;navigation.complete&lt;/code&gt; resolves, the new page has been loaded into the DOM and the browser can animate between the two states.&lt;/p&gt;
&lt;p&gt;It’s a bit of a mouthful, but by not abstracting it we allow you to interact with the view transition directly and make any customizations you require.&lt;/p&gt;
&lt;/details&gt;&lt;/blockquote&gt;&lt;h2 id=&quot;Customizing-the-transition-with-CSS&quot;&gt;&lt;span&gt;Customizing the transition with CSS&lt;/span&gt;&lt;a href=&quot;#Customizing-the-transition-with-CSS&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We can also customize this page transition using CSS animation. In the style block of your &lt;code&gt;+layout.svelte&lt;/code&gt;, add the following CSS rules.&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;css&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;@keyframes&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;fade-in {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;from {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;opacity&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;@keyframes&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;fade-out {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;to {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;opacity&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;@keyframes&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;slide-from-right {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;from {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;transform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;translateX&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(30&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;@keyframes&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;slide-to-left {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;to {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;transform&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;translateX&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(-30&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;:root&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;::view-transition-old(root) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;animation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(0.4&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1) both fade-out&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(0.4&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1) both slide-to-left&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;:root&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;::view-transition-new(root) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;animation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;210&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1) 90&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;both fade-in&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(0.4&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1) both slide-from-right&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now when you navigate between pages, the old page will fade out and slide to the left, and the new page will fade in and slide from the right. These particular animation styles come from Jake Archibald’s excellent &lt;a href=&quot;https://developer.chrome.com/docs/web-platform/view-transitions/&quot;&gt;Chrome Developers article on view transitions&lt;/a&gt;, which is well worth a read if you want to understand everything you can do with this API.&lt;/p&gt;
&lt;p&gt;Note that we have to add &lt;code&gt;:root&lt;/code&gt; before the &lt;code&gt;::view-transition&lt;/code&gt; pseudoelements – these elements are only on the root of the document, so we don’t want Svelte to &lt;a href=&quot;/docs/svelte-components#style&quot;&gt;scope them&lt;/a&gt; to the component.&lt;/p&gt;
&lt;p&gt;You might have noticed that the entire page slides in and out, even though the header is the same on both the old and new page. To make for a smoother transition, we can give the header a unique &lt;code&gt;view-transition-name&lt;/code&gt; so that it is animated separately from the rest of the page. In &lt;code&gt;src/routes/Header.svelte&lt;/code&gt;, find the &lt;code&gt;header&lt;/code&gt; CSS selector in the style block and add a view transition name.&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;css&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;header&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;flex&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;justify-content&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;space-between&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;view-transition-name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;header&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, the header will not transition in and out on navigation, but the rest of the page will.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://sveltejs.github.io/assets/video/vt-demo-2.mp4&quot; controls muted playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;blockquote class=&quot;note&quot;&gt;&lt;details&gt;&lt;summary&gt;Fixing the types&lt;/summary&gt;&lt;p&gt;
Since &lt;code&gt;startViewTransition&lt;/code&gt; is not supported by all browsers, your IDE may not know that it exists. To make the errors go away and get the correct typings, add the following to your &lt;code&gt;app.d.ts&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;pre data-language=&quot;dts&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;declare&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;global {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// preserve any customizations you have here&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;namespace&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;App&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// interface Error {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// interface Locals {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// interface PageData {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// interface Platform {}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// add these lines&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ViewTransition&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;updateCallbackDone&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;ready&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;finished&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;skipTransition&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Document&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;startViewTransition&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;updateCallback&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ViewTransition&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;&lt;/blockquote&gt;&lt;h2 id=&quot;Transitioning-individual-elements&quot;&gt;&lt;span&gt;Transitioning individual elements&lt;/span&gt;&lt;a href=&quot;#Transitioning-individual-elements&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We just saw how giving an element a &lt;code&gt;view-transition-name&lt;/code&gt; separates it out from the rest of the page&amp;rsquo;s animation. Setting a &lt;code&gt;view-transition-name&lt;/code&gt; also instructs the browser to smoothly animate it to its new position after the transition completes. The &lt;code&gt;view-transition-name&lt;/code&gt; acts as a unique identifier so the browser can identify matching elements from the old and new states.&lt;/p&gt;
&lt;p&gt;Let’s see what that looks like – our demo app’s navigation has a small triangle indicating the active page. Right now, it abruptly appears in the new position after we navigate. Let’s give it a &lt;code&gt;view-transition-name&lt;/code&gt; so the browser animates it to its new position instead.&lt;/p&gt;
&lt;p&gt;Inside &lt;code&gt;src/routes/Header.svelte&lt;/code&gt;, find the CSS rule creating the active page indicator and give it a &lt;code&gt;view-transition-name&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;css&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;aria-current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;page&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;::before&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;/* other existing rules */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;view-transition-name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;active-page&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By adding that single line, the indicator will now smoothly slide to its new position instead of jumping.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://sveltejs.github.io/assets/video/vt-demo-3.mp4&quot; controls muted playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;(It might be easy to miss the difference – look at the small moving triangle indicator at the top of the screen!)&lt;/p&gt;
&lt;h2 id=&quot;Reduced-motion&quot;&gt;&lt;span&gt;Reduced motion&lt;/span&gt;&lt;a href=&quot;#Reduced-motion&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;It’s important to respect our users’ &lt;a href=&quot;https://web.dev/prefers-reduced-motion/&quot;&gt;motion preferences&lt;/a&gt; while implementing animation on the web. Just because you can implement an extreme page transition doesn’t mean you should. To disable all page transitions for users who prefer reduced motion, you can add the following to the global &lt;code&gt;styles.css&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;css&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;@media&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(prefers-reduced-motion) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;::view-transition-group(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;::view-transition-old(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;::view-transition-new(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;animation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;none&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;!important&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;While this may be the safest option, reduced motion does not necessarily mean no animation. Instead, you could consider your view transitions on a case-by-case basis. For instance, maybe we disable the sliding animation, but leave the default crossfade (which doesn’t involve motion). You can do so by wrapping the &lt;code&gt;::view-transition&lt;/code&gt; rules you want to disable in a &lt;code&gt;prefers-reduced-motion: no-preference&lt;/code&gt; media-query:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;css&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;@media&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(prefers-reduced-motion&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;no-preference) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;:root&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;::view-transition-old(root) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;animation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;90&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(0.4&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1) both fade-out&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(0.4&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1) both slide-to-left&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;:root&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;::view-transition-new(root) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;animation&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;210&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1) 90&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;both fade-in&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;ms&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cubic-bezier&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;(0.4&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0.2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1) both slide-from-right&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;What&#39;s-next&quot;&gt;&lt;span&gt;What’s next?&lt;/span&gt;&lt;a href=&quot;#What&#39;s-next&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;As you can see, SvelteKit doesn’t abstract a whole lot about &lt;em&gt;how&lt;/em&gt; view transitions work – you’re interacting directly with the browser’s built-in &lt;code&gt;document.startViewTransition&lt;/code&gt; and &lt;code&gt;::view-transition&lt;/code&gt; APIs, rather than framework abstractions like those found in Nuxt and Astro. We’re eager to see how people end up using view transitions in SvelteKit apps, and whether it makes sense to add higher level abstractions of our own in future.&lt;/p&gt;
&lt;h2 id=&quot;Resources&quot;&gt;&lt;span&gt;Resources&lt;/span&gt;&lt;a href=&quot;#Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;You can find the demo code from this post &lt;a href=&quot;https://github.com/geoffrich/sveltekit-onnavigate-demo&quot;&gt;on GitHub&lt;/a&gt; and the live version &lt;a href=&quot;https://sveltekit-onnavigate-demo.vercel.app/&quot;&gt;deployed to Vercel&lt;/a&gt;. Here are some other view transitions resources you may find helpful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API&quot;&gt;MDN view transitions docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.chrome.com/docs/web-platform/view-transitions/&quot;&gt;Chrome view transitions API explainer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/shorts/weOCWOD2UIo&quot;&gt;Rich Harris demoing view transitions with onNavigate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/K95TQ-Yh7Cw&quot;&gt;My Svelte Summit video showing how to use view transitions for FLIP animations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltekit-shared-element-transitions-codelab.vercel.app/fruits&quot;&gt;Fruit list demo&lt;/a&gt; (&lt;a href=&quot;https://github.com/geoffrich/sveltekit-view-transitions&quot;&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://http-203-svelte.vercel.app/&quot;&gt;Svelte Summit video list demo&lt;/a&gt; (based on a &lt;a href=&quot;https://http203-playlist.netlify.app/&quot;&gt;Jake Archibald demo&lt;/a&gt;) (&lt;a href=&quot;https://github.com/geoffrich/http-203-svelte&quot;&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 31 Aug 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: August 2023</title><link>https://svelte.dev/blog/whats-new-in-svelte-august-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;Some sweet new features have dropped in both Svelte and SvelteKit, this month. It&amp;rsquo;s also great to see how many products and side projects have launched using Svelte as their core technology!&lt;/p&gt;
&lt;p&gt;More on all that down below...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte &amp;amp; Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;There&amp;rsquo;s been a bunch of minor bugfixes since the Svelte 4 release. You can find them in the &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/packages/svelte/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;4.1.0 release&lt;/strong&gt; added the ability to further customize the custom element class that wraps the underlying Svelte component. Check out the &lt;a href=&quot;/docs/svelte/custom-elements&quot;&gt;Custom Elements API docs&lt;/a&gt; or the &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/8991&quot;&gt;PR&lt;/a&gt; for more info!&lt;/p&gt;
&lt;p&gt;In addition to supporting SvelteKit&amp;rsquo;s new &lt;code&gt;HEAD&lt;/code&gt; server method, Svelte&amp;rsquo;s language tools now support Prettier v3 (&lt;strong&gt;extensions-107.9.0&lt;/strong&gt;) and workspace trust settings are now used to support all settings in workspace (&lt;strong&gt;extensions-107.8.0&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;HEAD&lt;/code&gt; server method is now available in API routes (&lt;strong&gt;1.22.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/routing#server&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9753&quot;&gt;#9753&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Responses with &lt;code&gt;Vary&lt;/code&gt; headers are now cached, too (except for &lt;code&gt;Vary: *&lt;/code&gt;) (&lt;strong&gt;1.22.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/routing#server-Content-negotiation&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9993&quot;&gt;#9993&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s now a more helpful error for preview if SvelteKit&amp;rsquo;s build output doesn&amp;rsquo;t exist (&lt;strong&gt;1.22.2&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10337&quot;&gt;#10337&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all the patches and performance updates from this month, check out the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit CHANGELOG&lt;/a&gt;. You can also find adapter-specific CHANGELOGs in each of &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages&quot;&gt;the &lt;code&gt;adapter&lt;/code&gt; directories&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ColinLienard/gitlight&quot;&gt;GitLight&lt;/a&gt; brings GitHub &amp;amp; GitLab notifications to your desktop&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paprikka/days&quot;&gt;Days&lt;/a&gt; is paprikka&amp;rsquo;s life in days, inspired by Buster Benson&amp;rsquo;s Life in Weeks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mofi.loud.red/&quot;&gt;Mofi&lt;/a&gt; is a content-aware fill and trim for music&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Nico-Mayer/json-bucket&quot;&gt;JSON Bucket&lt;/a&gt; stores your JSON data so you can access it anywhere through generated API routes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cosmicplayground.org/soggy-planet&quot;&gt;Soggy Planet&lt;/a&gt; is an interactive map of Earth where sea levels rise and fall and the lights of civilization shine through the night (&lt;a href=&quot;https://github.com/ryanatkn/cosmicplayground&quot;&gt;Source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.paperclipapp.xyz/&quot;&gt;PaperClip&lt;/a&gt; is a Chrome extension that makes it easy to memorize details from papers in machine learning, computer vision, and natural language processing.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.maktaba.digital/&quot;&gt;Maktaba&lt;/a&gt; is a bookmark manager that &amp;ldquo;you will actually use&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/braden-w/whispering-extension&quot;&gt;Whispering&lt;/a&gt; is a Chrome extension that lets you access OpenAI&amp;rsquo;s Whisper API for fast transcription in the browser (including ChatGPT)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docutalk.co/&quot;&gt;DocuTalk&lt;/a&gt; is an AI Customer Support chatbot for your website&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/iamrishupatel/trello-clone&quot;&gt;Krello&lt;/a&gt; is a Trello clone built with Svelte, Appwrite and Flowbite&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://beeneverywhere.net/&quot;&gt;Been&lt;/a&gt; is a map builder with travel stats like visited countries, extreme visited points, etc.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brody.fyi/tools/image-to-social-media-thumbnail&quot;&gt;image-to-social-media-thumbnail&lt;/a&gt; lets you convert any image to a social media thumbnail&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sdekna/svelte-capacitor-store&quot;&gt;Svelte Capacitor Store&lt;/a&gt; is a persistent store that uses capacitor (preferences) storage on native devices, and localStorage otherwise, making it ideal for multi-platform projects&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=YOL0HGGVib4&quot;&gt;Exploring Svelte 4 w/ Kevin AK: Performance, Compatibility, &amp;amp; Web Component Support | Modern Web Pod&lt;/a&gt; by This Dot Media&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/live/YHZaiIGSqsE?feature=share&quot;&gt;Svelte Sirens Stream Design Systems: Lessons Learned&lt;/a&gt; featuring Eric Liu, creator of Carbon Components Svelte and the &lt;code&gt;sveld&lt;/code&gt; docgen library&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sDz4_BLoYQ4&quot;&gt;2023 June 30&lt;/a&gt; - Svelte 4.0.1, SK 1.21, lists, screen readers, loading&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0tq1ph4DDFA&quot;&gt;2023 July 7&lt;/a&gt; - Svelte 4.0.5, Kit 1.22.1, Svelte 5, local storage and markdown&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AG4_3kon3zU&quot;&gt;2023 July 21&lt;/a&gt; - Svelte 4.1.1, SvelteKit 1.22.3, Progressive enhancement&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch/Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2023/07/smashing-podcast-episode-63/?ref=dailydevbytes.com&quot;&gt;What is The Transitional Web? with Chris Ferdinandi&lt;/a&gt; by Smashing Podcast&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=H1eEFfAkIik&quot;&gt;SvelteKit in 100 seconds&lt;/a&gt; by Fireship&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ThInVXgxJ1Q&quot;&gt;Primo V2 Introduction&lt;/a&gt; by Primo (a &lt;a href=&quot;https://primocms.org/&quot;&gt;visual CMS&lt;/a&gt; based on Svelte)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=lYYGhm7p74Q&quot;&gt;Understanding Svelte (vs React)&lt;/a&gt; by Kodaps Academy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=6Vrc1VO8pgs&quot;&gt;Is it thàt simple? - Mastering SvelteKit&lt;/a&gt; by Threeveloper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VJFkyGd0FEA&quot;&gt;Markdown in SvelteKit with custom Components: mdsvex&lt;/a&gt; by hartenfellerdev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gXtWSb94704&quot;&gt;How To Add Confetti for Svelte and Sveltekit 🎉&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=Vn2bIv_J_UE&quot;&gt;Make Your SvelteKit Code 10x Faster With Rust and WebAssembly&lt;/a&gt; by SvelteRust&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hackmd.io/@roguegpu/r1RKQMdt3&quot;&gt;SvelteJS: My ecosystem is bigger than yours&lt;/a&gt; by roguegpu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.aakashgoplani.in/avoid-shared-state-on-the-server-in-sveltekit&quot;&gt;Avoid shared state on the server in SvelteKit&lt;/a&gt; by Aakash Goplani&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/sveltekit-fontaine/&quot;&gt;SvelteKit Fontaine: Reduce Custom Font CLS&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rgbstudios.org/blog/redirects-in-svelte-kit&quot;&gt;A Simple Guide to Redirects in Svelte Kit&lt;/a&gt; by Justin Golden&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gee-astro-personal.vercel.app/blog/post2&quot;&gt;React vs Svelte (Q3 2023)&lt;/a&gt; by Gee&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scottspence.com/posts/sveltekit-page-reaction-component-with-upstash-redis&quot;&gt;SvelteKit Page Reaction Component with Upstash Redis&lt;/a&gt; by Scott Spence&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://khromov.se/building-a-privacy-friendly-self-hosted-application-architecture-with-sveltekit/&quot;&gt;Building a privacy-friendly, self-hosted application architecture with SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://khromov.se/building-a-privacy-friendly-self-hosted-application-architecture-with-sveltekit/&quot;&gt;Building a privacy-friendly, self-hosted application architecture with SvelteKit&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/nnutnonn/deploying-sveltekit-on-iis--5gf6&quot;&gt;Deploying Sveltekit on IIS&lt;/a&gt; by Nutchapon Makelai&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eman.hashnode.dev/streamlined-authentication-and-secrets-management&quot;&gt;Streamlined Authentication and Secrets Management&lt;/a&gt; by Eman&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/melt-ui/melt-ui&quot;&gt;Melt UI&lt;/a&gt; is a set of headless, accessible component builders for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pngwn/MDsveX/releases/tag/mdsvex%400.11.0&quot;&gt;MDsveX&lt;/a&gt; has been updated to work with Svelte 4&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wobsoriano/svelte-sonner&quot;&gt;Svelte Sonner&lt;/a&gt; is an opinionated toast component for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kyle-n/WebExtensionTemplate&quot;&gt;WebExtensionTemplate&lt;/a&gt; lets you skip the boilerplate and write a Web Extension with TypeScript and Svelte or React&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Hugo-Dz/svelte-rust&quot;&gt;svelte-rust&lt;/a&gt; lets you run Rust code in your Svelte app&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tncrazvan/sveltekit-sse&quot;&gt;SvelteKit SSE&lt;/a&gt; provides an easy way to produce and consume server sent events&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tnthung/better-svelte-writable&quot;&gt;better-svelte-writable&lt;/a&gt; provides a type-safe writable which gives you more control over the container&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Bewinxed/svetch#readme&quot;&gt;Svetch.ts&lt;/a&gt; is a client/types/schema/docs generator for your API endpoints&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rinart73/sveltekit-localize-url&quot;&gt;sveltekit-localize-url&lt;/a&gt; handles URL localization and routing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/howesteve/elegua&quot;&gt;elegua&lt;/a&gt; is a small, reactive PWA router for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/renefournier/molly/tree/main&quot;&gt;Molly&lt;/a&gt; is a bash script and npm module that helps you clean up unused Svelte components in your project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/begoon/sveltekit-bot&quot;&gt;sveltekit-bot&lt;/a&gt; is a Telegram bot made with SvelteKit and Vercel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks for reading! As always, feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Tue, 01 Aug 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: July 2023</title><link>https://svelte.dev/blog/whats-new-in-svelte-july-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;Svelte 4 is out and folks have been building! There&amp;rsquo;s a bunch of new showcases, libraries and tutorials to share. So let&amp;rsquo;s get right into it...&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The big news this month was the release of Svelte 4.0! You can read all about it in the &lt;a href=&quot;/blog/svelte-4&quot;&gt;Announcing Svelte 4 post&lt;/a&gt;. From performance fixes and developer experience improvements to &lt;a href=&quot;/blog/svelte-dev-overhaul&quot;&gt;a brand new site, docs and tutorial&lt;/a&gt;... this new release sets the stage for Svelte 5 with minimal breaking changes.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re already on Node.js 16, it&amp;rsquo;s possible you won&amp;rsquo;t see any breaking changes in your project. But be sure to read the &lt;a href=&quot;/docs/svelte/v4-migration-guide&quot;&gt;migration guide&lt;/a&gt; for all the details.&lt;/p&gt;
&lt;p&gt;For a full list of all the changes to the Svelte compiler, including unreleased changes, check out the &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/packages/svelte/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This month there were lots of awesome &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;bug fixes&lt;/a&gt;, so be sure to upgrade to the latest version! There are also a few new features to mention:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The new &lt;code&gt;event.isSubRequest&lt;/code&gt; boolean indicates whether this is a same-origin fetch request to one of the app&amp;rsquo;s own APIs during a server request (&lt;strong&gt;1.21.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/@sveltejs-kit#RequestEvent&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10170&quot;&gt;#10170&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new config option, &lt;code&gt;config.kit.env.privatePrefix&lt;/code&gt; will set a private prefix on environment variables. This defaults to &lt;code&gt;&amp;#39;&amp;#39;&lt;/code&gt; (&lt;strong&gt;1.21.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/configuration&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9996&quot;&gt;#9996&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VERSION&lt;/code&gt; is now exported and accessible via &lt;code&gt;@sveltejs/kit&lt;/code&gt;. This can be used for feature detection or anything else that requires knowledge of the current version of SvelteKit (&lt;strong&gt;1.21.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/@sveltejs-kit#VERSION&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9969&quot;&gt;#9969&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For adapter-specific changes, check out the CHANGELOGs in each of &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages&quot;&gt;the &lt;code&gt;adapter&lt;/code&gt; directories&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/DreaminDani/heerdle&quot;&gt;Heerdle&lt;/a&gt; is a remake of Spotify&amp;rsquo;s now-defunct Heardle - the daily music guessing game&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://meoweler.com/&quot;&gt;Meoweler&lt;/a&gt; is a travel site filled with cats and helpful facts about popular destinations&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/13w4zg3/comment/jmaxial/?utm_source=share&amp;utm_medium=web2x&amp;context=3&quot;&gt;A tech lead from IKEA&lt;/a&gt; gave a few more details on the way they build pages (and page template) using Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://notes.ekzhang.com/papers/passwords&quot;&gt;The Quest to Replace Passwords&lt;/a&gt; features an interactive comparison visualization for all the popular password management tools&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://audiogest.app/en&quot;&gt;audiogest&lt;/a&gt; lets you turn speech to text &amp;amp; summarize any audio in one click&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.heroify.lol/&quot;&gt;heroify&lt;/a&gt; generates 3D graphics for your website with AI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://store.steampowered.com/app/1959140/Diesel_Legacy_The_Brazen_Age/&quot;&gt;Diesel Legacy: The Brazen Age&lt;/a&gt; is a fighting game whose leaderboard and profile pages were all built in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.markmyimages.com/&quot;&gt;markmyimages&lt;/a&gt; is a watermarking tool with bulk image resize, rename, effects, and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rossrobino/md&quot;&gt;md.robino.dev&lt;/a&gt; is a web based markdown editor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Yureien/YABin&quot;&gt;YABin&lt;/a&gt; is Yet Another Pastebin with some very specific features&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/svelte-4&quot;&gt;Announcing Svelte 4 post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/blog/svelte-dev-overhaul&quot;&gt;svelte.dev: A complete overhaul&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AOXq89h8saI&quot;&gt;Dev Vlog: June 2023&lt;/a&gt; - Svelte 4.0 with Rich Harris&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://podrocket.logrocket.com/svelte-4&quot;&gt;PodRocket: Svelte 4&lt;/a&gt; with Geoff&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-9gy_leMmcQ&quot;&gt;This Dot Media: Svelte 4 Launch Party&lt;/a&gt; with Simon, Ben, Geoff, and Puru&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kAfotLrebhY&quot;&gt;Exposing Svelte: Between Two Nerds&lt;/a&gt; is a comedic conversation between Rich Harris and Dax Raad&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=KbIFRVvdgA8&quot;&gt;Community Tutorial: Self-hosting SvelteKit with a VPS, Docker, CapRover and GitHub Actions&lt;/a&gt; with Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=1wH7rR7hZlg&quot;&gt;SvelteKit and Storybook&lt;/a&gt; with Jeppe Reinhold&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=B2AOYWs6eko&quot;&gt;2023 June 2&lt;/a&gt; - SvelteKit 1.20.1, Svelte 4 pre-release, Headless UI libraries&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OG70PKD0hEU&quot;&gt;2023 June 9&lt;/a&gt; - Updates, Self-hosting SvelteKit, Passing styles to children&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GNEbC5K34Po&quot;&gt;2023 June 16&lt;/a&gt; - Svelte 4 next.1, how to create a hamburger menu, group layouts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=o-qnnbMbmE4&quot;&gt;2023 June 23&lt;/a&gt; - Svelte 4, Popovers and hover, Real Time requests with SvelteKit&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Svelte Radio&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/sveltelab-a-svelte-repl-for-sveltekit-with-antonio-and-paolo&quot;&gt;SvelteLab - a Svelte REPL for SvelteKit&lt;/a&gt; with Antonio and Paolo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=72TIVhRtyWE&quot;&gt;Svelte Radio Live - Svelte 4 Summer Special&lt;/a&gt; with Simon and Puru&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=EkH0aMgeIKw&quot;&gt;Svelte Society - London June 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=dp-7NvLDrK4&quot;&gt;Using The Svelte Context API With Stores&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=ecP8RwpkiQw&quot;&gt;Impossible FLIP Layout Animations With Svelte And GSAP&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=67lqa5kTQkA&quot;&gt;Create Beautiful Presentations With Svelte&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VgCU0cVWgJE&quot;&gt;Server-side filtered, paginated and sorted Table in SvelteKit&lt;/a&gt; by hartenfellerdev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qJP6hC4YIhk&quot;&gt;Best Icon Library for Svelte and SvelteKit in 2023&lt;/a&gt; by SvelteRust&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.okupter.com/events/from-zero-to-production-with-sveltekit&quot;&gt;From Zero to Production with SvelteKit&lt;/a&gt; by Justin Ahinon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://claudioholanda.ch/en/blog/svelte-kit-after-3-billion-requests/&quot;&gt;Thoughts on Svelte(Kit), one year and 3 billion requests later&lt;/a&gt; by Claudio Holanda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://khromov.se/how-i-published-a-gratitude-journaling-app-for-ios-and-android-using-sveltekit-and-capacitor/&quot;&gt;How I published a gratitude journaling app for iOS and Android using SvelteKit and Capacitor&lt;/a&gt; by Stanislav Khromov&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.blackspike.com/blog/learning-svelte-by-building-a-single-page-application/&quot;&gt;Learning by doing - Vue devs build a Svelte Single Page App&lt;/a&gt; by Black Spike&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.aakashgoplani.in/generate-breadcrumb-and-navigation-in-sveltekit&quot;&gt;Generate Breadcrumb and Navigation in SvelteKit&lt;/a&gt;, &lt;a href=&quot;https://blog.aakashgoplani.in/sveltekit-authentication-using-sveltekitauth-and-oauth-providers-a-comprehensive-guide&quot;&gt;SvelteKit Authentication using SvelteKitAuth and OAuth providers: A Comprehensive Guide&lt;/a&gt; and &lt;a href=&quot;https://blog.aakashgoplani.in/sveltekitauth-with-salesforce-oauth-provider&quot;&gt;SvelteKitAuth with Salesforce OAuth provider&lt;/a&gt; by Aakash Goplani&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://node-jz.medium.com/instantly-find-and-remove-svelte-component-orphans-9b2838ea2d99&quot;&gt;Instantly find and remove Svelte component orphans&lt;/a&gt; by Jeremy Zaborowski&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.aakashgoplani.in/migration-guide-from-routify-to-sveltekit-router&quot;&gt;Migration Guide from Routify to SvelteKit Router&lt;/a&gt; by Aakash Goplani&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.datavizcubed.com/&quot;&gt;Creating 3D data visualization using Threlte and D3&lt;/a&gt; by DataViz Cubed&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/svelte-realtime-multiplayer-game/&quot;&gt;Svelte Real‑time Multiplayer Game: User Presence&lt;/a&gt; and &lt;a href=&quot;https://rodneylab.com/sveltekit-postcss-tutorial/&quot;&gt;SvelteKit PostCSS Tutorial: use Future CSS Today&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inow.dev/sveltekits-world-of-routing-unleash-power-of-your-app-using-dynamic-routes-and-parameters/&quot;&gt;SvelteKit’s World of Routing: Unleash power of your app using Dynamic Routes and Parameters&lt;/a&gt; by Igor Nowosad&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/blog/introducing-the-vercel-ai-sdk&quot;&gt;The Vercel AI SDK&lt;/a&gt; is an interoperable, streaming-enabled, edge-ready software development kit for AI apps built with React and Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://superforms.rocks/&quot;&gt;Superforms 1.0&lt;/a&gt; has been released. Check out the &lt;a href=&quot;https://superforms.rocks/migration&quot;&gt;migration guide&lt;/a&gt; and &lt;a href=&quot;https://superforms.rocks/whats-new-v1&quot;&gt;new feature list&lt;/a&gt; for more details&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://panda-css.com/docs/getting-started/svelte&quot;&gt;Panda CSS&lt;/a&gt; is CSS-in-JS with build time generated styles, RSC compatibility and multi-variant support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TIKramer/svelte-section-list&quot;&gt;svelte-section-list&lt;/a&gt; is a headless Svelte npm package that provides drag-and-drop functionality for managing items and sections&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/tomblachut/status/1669759906579185681?t=6WzLPUi65wsLtbVvYky7UQ&amp;s=19&quot;&gt;WebStorm&lt;/a&gt; is starting to use the Svelte Language Server in its IDE tooling&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.shadcn-svelte.com/&quot;&gt;shadcn-svelte&lt;/a&gt; is an unofficial port of &lt;a href=&quot;https://github.com/shadcn/ui&quot;&gt;shadcn/ui&lt;/a&gt; to Svelte that makes it easy to build your component library from common base components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MrNNP/sveltekit-multibuild&quot;&gt;sveltekit-multibuild&lt;/a&gt; is a starter repo to create Android apps, web sites, desktop apps, and Chrome extensions automatically&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jianyuan/sveltekit-ai-chatbot&quot;&gt;SvelteKit AI Chatbot&lt;/a&gt; is an open-source AI chatbot app template built with SvelteKit, the Vercel AI SDK, OpenAI, and Vercel KV.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kit-ai.vercel.app/&quot;&gt;KitAI&lt;/a&gt; provides batteries-included AI templates for SvelteKit and Next.js&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pragmatic-engineering/svelte-form-builder-community&quot;&gt;Svelte Form Builder&lt;/a&gt; is a no-code drag&amp;amp;drop form builder for Svelte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks for reading! As always, feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time 👋&lt;/p&gt;</description><pubDate>Sat, 01 Jul 2023 00:00:00 GMT</pubDate></item><item><title>svelte.dev: A complete overhaul</title><link>https://svelte.dev/blog/svelte-dev-overhaul</link><author>Puru Vijay</author><description>&lt;p&gt;When the initial version of Svelte v3 was released four years ago, it included the single-page documentation that folks have been familiar with. That documentation structure had stayed the same as Svelte&amp;rsquo;s API surface increased steadily and more details were added. As a result, the single page got larger and larger to the point where it was becoming difficult to find things. The community had been asking for a revamp, and now it&amp;rsquo;s here!&lt;/p&gt;
&lt;p&gt;Meet the new &lt;a href=&quot;https://svelte.dev&quot;&gt;svelte.dev&lt;/a&gt; — a complete overhaul of the old website.&lt;/p&gt;
&lt;h2 id=&quot;Multi-page-docs&quot;&gt;&lt;span&gt;Multi-page docs&lt;/span&gt;&lt;a href=&quot;#Multi-page-docs&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The table of contents had grown to be quite large and you had to scroll across half a dozen screens to see the whole thing. We heard you! The docs are all split up into multiple pages now and all pages list their sections in the righthand sidebar.&lt;/p&gt;
&lt;p&gt;All modules exposed by Svelte are also listed in the sidebar under the &lt;code&gt;Runtime&lt;/code&gt; section:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte&quot;&gt;svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte-store&quot;&gt;svelte/store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte-motion&quot;&gt;svelte/motion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte-transition&quot;&gt;svelte/transition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte-animate&quot;&gt;svelte/animate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte-easing&quot;&gt;svelte/easing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/svelte-action&quot;&gt;svelte/action&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;/docs/svelte-compiler&quot;&gt;svelte/compiler&lt;/a&gt; is under &lt;strong&gt;Compiler and API&lt;/strong&gt; section&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;We&amp;rsquo;ve also taken extra care to ensure that all the links from the old website will be redirected to the correct new page.&lt;/p&gt;
&lt;h2 id=&quot;Search&quot;&gt;&lt;span&gt;Search&lt;/span&gt;&lt;a href=&quot;#Search&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The lack of search functionality could make finding stuff a nuisance as &lt;kbd&gt;Ctrl+F&lt;/kbd&gt; only returns results in order of occurrence and not order of importance. While &lt;kbd&gt;Ctrl+F&lt;/kbd&gt; did have its benefits such as not requiring JS, now that the site has multiple pages, it&amp;rsquo;s not an option anymore.&lt;/p&gt;
&lt;p&gt;And for that, the new website comes with a search bar, which searches through the docs and the API surface. Hit &lt;kbd&gt;Ctrl+K&lt;/kbd&gt; (or &lt;kbd&gt;CMD+K&lt;/kbd&gt; for Mac users) and start searching — it even works without JavaScript!&lt;/p&gt;
&lt;h2 id=&quot;Lights-TypeScript-Action&quot;&gt;&lt;span&gt;Lights, TypeScript, Action!&lt;/span&gt;&lt;a href=&quot;#Lights-TypeScript-Action&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The new website comes with a JavaScript / TypeScript toggle, so you can view the docs in your preferred flavour. Every module&amp;rsquo;s exported types are listed at the bottom of the page for easy reference. The types are automatically generated from Svelte&amp;rsquo;s source code, so they&amp;rsquo;re always up to date.&lt;/p&gt;
&lt;p&gt;All the JavaScript and TypeScript code snippets have type hints available. Just hover over the variable to see its type. This allows the docs to be type checked at build time, which ensures they&amp;rsquo;re never out of date.&lt;/p&gt;
&lt;p&gt;We also (finally!) added documentation for &lt;a href=&quot;/docs/svelte-action&quot;&gt;Actions&lt;/a&gt;. Svelte Actions are a way to interact with the DOM, and are a great way to add interactivity to your app. The docs for Actions are also available in TypeScript.&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ Action }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;svelte/action&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Action&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(node)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// the node has been mounted in the DOM&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;destroy&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;				&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// the node has been removed from the DOM&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:foo /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;Dark-mode&quot;&gt;&lt;span&gt;Dark mode&lt;/span&gt;&lt;a href=&quot;#Dark-mode&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;After many years of users asking for dark mode on the website so they can read the docs for their night-time coding sessions, we finally added it! The website now has a dark mode toggle, which is also synced with your OS&amp;rsquo;s dark mode settings. It can be toggled from the top navbar (bottom navbar on mobile).&lt;/p&gt;
&lt;h2 id=&quot;Updated-REPL&quot;&gt;&lt;span&gt;Updated REPL&lt;/span&gt;&lt;a href=&quot;#Updated-REPL&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The REPL has been rewritten from scratch to be fully typesafe and comes with features like dark mode. It was reimplemented to upgrade to CodeMirror 6 which comes with many accessibility improvements, multi-select mode, performance improvements, tree-shaking, and many more features.&lt;/p&gt;
&lt;h2 id=&quot;Redesigned-homepage&quot;&gt;&lt;span&gt;Redesigned homepage&lt;/span&gt;&lt;a href=&quot;#Redesigned-homepage&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Is it a website redesign if the homepage doesn&amp;rsquo;t get the same amount of love? 🙃&lt;/p&gt;
&lt;p&gt;The homepage has also been updated to align with &lt;a href=&quot;https://kit.svelte.dev&quot;&gt;kit.svelte.dev&lt;/a&gt; and features the beautiful Svelte Machine by &lt;a href=&quot;https://github.com/vedam&quot;&gt;@vedam&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;Bottom-navigation&quot;&gt;&lt;span&gt;Bottom navigation!&lt;/span&gt;&lt;a href=&quot;#Bottom-navigation&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We sent out a &lt;a href=&quot;https://twitter.com/Rich_Harris/status/1664712880791404546&quot;&gt;tweet&lt;/a&gt; about experimenting with bottom navigation bar on mobile rather than the conventional top navbar. The response was overwhelmingly positive, so we went ahead and added it! This makes it easier to navigate the website on mobile with just one hand. We also made sure that you&amp;rsquo;ll get to where you want with as few interactions as possible. If you&amp;rsquo;re in the docs section of the site, you&amp;rsquo;ll likely want to browse other documentation pages, which is why the navbar will show these by default when opening it with the option to go one level up to the general site navigation.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re on mobile, you can already see it at the bottom. If you&amp;rsquo;re on desktop, you can see it by resizing your browser window to a smaller size.&lt;/p&gt;
&lt;h2 id=&quot;Unification-of-Svelte-websites&quot;&gt;&lt;span&gt;Unification of Svelte websites&lt;/span&gt;&lt;a href=&quot;#Unification-of-Svelte-websites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Now &lt;a href=&quot;https://svelte.dev&quot;&gt;svelte.dev&lt;/a&gt;, &lt;a href=&quot;https://kit.svelte.dev&quot;&gt;kit.svelte.dev&lt;/a&gt;, and &lt;a href=&quot;https://learn.svelte.dev&quot;&gt;learn.svelte.dev&lt;/a&gt; all use the same design system and are more consistent with each other. This makes it easier to navigate between the websites and also makes it easier to maintain them. We have a package shared across the sites called &lt;code&gt;@sveltejs/site-kit&lt;/code&gt;, which went through rigorous changes over last 4 months as we have been moving all common code into this package.&lt;/p&gt;
&lt;p&gt;For example, we implemented the dark mode toggle in &lt;code&gt;@sveltejs/site-kit&lt;/code&gt;. We then simply updated the package on &lt;a href=&quot;https://learn.svelte.dev&quot;&gt;learn.svelte.dev&lt;/a&gt; and &lt;a href=&quot;https://kit.svelte.dev&quot;&gt;kit.svelte.dev&lt;/a&gt; and those sites got the dark mode toggle automatically (this is also the reason why those sites got the dark mode toggle before the &lt;a href=&quot;https://svelte.dev&quot;&gt;svelte.dev&lt;/a&gt; relaunch).&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-next&quot;&gt;&lt;span&gt;What&amp;rsquo;s next&lt;/span&gt;&lt;a href=&quot;#What&#39;s-next&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We have many more things planned to do post-launch. Some of them are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redesigned blog page&lt;/li&gt;
&lt;li&gt;Improved search&lt;/li&gt;
&lt;li&gt;Playground: a unified REPL and Examples page&lt;/li&gt;
&lt;li&gt;Unify the infrastructure of the Svelte REPL and &lt;a href=&quot;/tutorial&quot;&gt;the tutorial&lt;/a&gt; by creating a webcontainer-based REPL with rollup as a fallback&lt;/li&gt;
&lt;li&gt;Address any feedback&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 29 Jun 2023 00:00:00 GMT</pubDate></item><item><title>Svelte 4 発表</title><link>https://svelte.dev/blog/svelte-4</link><author>The Svelte team</author><description>&lt;p&gt;数ヶ月の開発期間を経て、Svelte 4 の安定版リリースを発表できることを嬉しく思います。&lt;/p&gt;
&lt;p&gt;光陰矢の如し - Svelte 3 がリリースされたのはもう4年以上前です！ JavaScript フレームワークの時間としては、それは大昔のことです。Svelte のフレッシュさはずっと保たれたままでしたが、その間に Node.js と ブラウザの API は進化しており、その改善点を取り入れるため、今日、私たちは Svelte を更新します。Svelte 4 は主にメンテナンスリリースであり、要求される最小バージョンを上げ、特定エリアの設計を強化しました。これは、次世代の Svelte、つまり Svelte 5 のための基盤となります - きっとあなたにも気に入って頂けると思います。&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t tried Svelte yet, take it for a spin in our &lt;a href=&quot;/tutorial&quot;&gt;interactive tutorial&lt;/a&gt;, on &lt;a href=&quot;https://sveltekit.new/&quot;&gt;StackBlitz&lt;/a&gt;, or locally with &lt;code&gt;npm create svelte@latest&lt;/code&gt;. Svelte lets you easily put together web UIs leveraging the power of HTML, CSS, JS, and the Svelte compiler. Watch &lt;a href=&quot;https://www.youtube.com/watch?v=72TIVhRtyWE&quot;&gt;Svelte Radio Live&lt;/a&gt; to learn more about this release.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new&quot;&gt;&lt;span&gt;What&amp;rsquo;s new&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;What&#39;s-new-Performance&quot;&gt;&lt;span&gt;Performance&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-Performance&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;このリリースにより、ハイドレーションコードが小さくなり、高速になりました。そのインパクトが見たければ、SvelteKit ユーザーなら &lt;code&gt;.svelte-kit/output/client/_app/immutable/nodes&lt;/code&gt; フォルダを調べてみればコンパイル後の出力サイズが小さくなっていることがわかります。例えば、&lt;a href=&quot;https://kit.svelte.dev&quot;&gt;kit.svelte.dev&lt;/a&gt; のサイト全体で生成された JS は 12.7% 削減されました (126.3 kB から 110.2 kB になりました)。&lt;/p&gt;
&lt;p&gt;Svelte 4 reduces the Svelte package size by nearly 75% (10.6 MB down to 2.8 MB), which means less waiting on &lt;code&gt;npm install&lt;/code&gt;. This improvement will be especially noticeable for users who are loading &lt;a href=&quot;/tutorial&quot;&gt;our interactive learning experience&lt;/a&gt; for the first time, users of the Svelte REPL, and users with limited connectivity. The majority of the remaining package size is eslint support, which necessitates distributing a CJS build, and once &lt;a href=&quot;https://github.com/eslint/eslint/discussions/16557&quot;&gt;the eslint rewrite&lt;/a&gt; is completed the Svelte package size can drop by over another 50%.&lt;/p&gt;
&lt;p&gt;Svelte の dependencies の数は 61 から 16 に大幅に削減されました。つまり、ユーザーにとってはダウンロードが速くなるとともに、サプライチェーンアタックのリスクも低くなったということです。SvelteKit の最新バージョンでも、dependencies の数を少し減らせました。&lt;/p&gt;
&lt;h3 id=&quot;What&#39;s-new-Developer-experience&quot;&gt;&lt;span&gt;Developer experience&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-Developer-experience&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Svelte 4 では Svelte でのオーサリング・エクスペリエンスが、より一貫性があり直感的になりました: トランジションでは &lt;code&gt;|local&lt;/code&gt; がデフォルトとなったことでアニメーションがページトランジションをブロックしないようになり、プリプロセッサは書くのがより簡単になり、またいくつかの修正によって CSP の設定と使用が簡単になりました。&lt;/p&gt;
&lt;p&gt;web components のユーザーにとって、最も大きい変更点は Svelte で custom elements を作成する方法がオーバーホールされたことでしょう。生成方法が変わったことにより、あらゆるバグや不整合が取り除かれました。&lt;/p&gt;
&lt;p&gt;最後に、&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/8702&quot;&gt;IDE のオーサリングエクスペリエンスの改善&lt;/a&gt;もいくつか行いました:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;svelte モジュールで cmd+click すると、&lt;code&gt;.d.ts&lt;/code&gt; ファイルではなく実装に移動するようになりました&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte/internal&lt;/code&gt; からのインポートが非表示になり、オートコンプリート候補がきれいになりました&lt;/li&gt;
&lt;li&gt;auto-imports がより確実に動作するようになりました&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-Updated-site-docs-and-tutorial&quot;&gt;&lt;span&gt;Updated site, docs, and tutorial&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-Updated-site-docs-and-tutorial&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The official &lt;a href=&quot;https://svelte.dev&quot;&gt;svelte.dev&lt;/a&gt; site has gotten an overhaul. It’s now split into multiple pages with improved mobile nav, overhauled typescript docs, dark mode, and an enhanced REPL. The SvelteKit site is also being updated to match. And we’ve updated all the tutorial links to point to our new &lt;a href=&quot;/tutorial&quot;&gt;tutorial&lt;/a&gt; experience.&lt;/p&gt;
&lt;p&gt;近日、サイトの全ての変更点についてより詳細なブログ記事を掲載しますので、乞うご期待！&lt;/p&gt;
&lt;h2 id=&quot;Migrating&quot;&gt;&lt;span&gt;Migrating&lt;/span&gt;&lt;a href=&quot;#Migrating&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte 3 と互換性のあるアプリやライブラリのほとんどは、Svelte 4 にも互換性があるでしょう。ライブラリの作者の方は、もし &lt;code&gt;peerDependencies&lt;/code&gt; に &lt;code&gt;svelte&lt;/code&gt; が指定されている場合は version range に Svelte 4 を含めるように更新する必要があります。アプリケーションの作者の方は、新しくなった最小バージョンの要求 (Node.js 16 など) を満たすようにツールを更新する必要があるでしょう。その他多くの移行ステップは、&lt;code&gt;npx svelte-migrate@latest svelte-4&lt;/code&gt; で処理できます。&lt;/p&gt;
&lt;p&gt;完全な詳細については&lt;a href=&quot;/docs/v4-migration-guide&quot;&gt;マイグレーションガイド&lt;/a&gt;をお読みください。&lt;/p&gt;
&lt;h2 id=&quot;Svelte-5:-the-next-generation-of-Svelte&quot;&gt;&lt;span&gt;Svelte 5: the next generation of Svelte&lt;/span&gt;&lt;a href=&quot;#Svelte-5:-the-next-generation-of-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte 5 では Svelte コンパイラとランタイムの書き換えを行う予定です。Svelte 4 の主な目的は、古いバンドラーなの様々なテクノロジーのレガシーバージョンをドロップし、モダンなツールを取り入れ、将来の改善のための土台を整えることでした。これらの変更により、Svelte 5 と Svelte 4 のコードベースを比較するのが簡単になり、新しい実装に対して既存のテストを実行することができるようになり、様々なことが便利になります。Svelte 5 では、大きい新機能とパフォーマンスの改善を予定しています。変更についてはまだ作成中で、まだ共有できる段階ではありませんが、ご期待ください！&lt;/p&gt;
&lt;h2 id=&quot;Changelog&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;a href=&quot;#Changelog&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;変更点の完全なリストについては &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/packages/svelte/CHANGELOG.md&quot;&gt;changelog&lt;/a&gt; をご参照ください。&lt;/p&gt;
&lt;h2 id=&quot;Acknowledgements&quot;&gt;&lt;span&gt;Acknowledgements&lt;/span&gt;&lt;a href=&quot;#Acknowledgements&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;何よりもまず、このリリースを可能にしてくれた Svelte のメンテナー、コントリビューターの皆さまに感謝したいと思います。このリリースに対する複数の PR をコントリビュートしてくれた開発者は &lt;a href=&quot;https://github.com/dummdidumm&quot;&gt;@dummdidumm&lt;/a&gt;、&lt;a href=&quot;https://github.com/gtm-nayan&quot;&gt;@gtm-nayan&lt;/a&gt;、&lt;a href=&quot;https://github.com/benmccann&quot;&gt;@benmccann&lt;/a&gt;、&lt;a href=&quot;https://github.com/tanhauhau&quot;&gt;@tanhauhau&lt;/a&gt;、&lt;a href=&quot;https://github.com/Karlinator&quot;&gt;@Karlinator&lt;/a&gt;、&lt;a href=&quot;https://github.com/ngtr6788&quot;&gt;@ngtr6788&lt;/a&gt; です。また、&lt;a href=&quot;https://opencollective.com/svelte&quot;&gt;the Svelte OpenCollective&lt;/a&gt; に寄付してくれたコミュニティメンバーにも感謝したいと思います。この寄付で、&lt;a href=&quot;https://github.com/puruvj&quot;&gt;PuruVJ&lt;/a&gt; によるサイトのオーバーホールと、&lt;a href=&quot;https://github.com/gtm-nayan&quot;&gt;@gtm-nayan&lt;/a&gt; の多数の修正をスポンサーすることができました。&lt;/p&gt;
&lt;p&gt;最後に、このリリースの準備を助けてくれたエコシステムの多くのライブラリメンテナーにも感謝します。新しいバージョンの &lt;code&gt;aria-query&lt;/code&gt; や &lt;code&gt;axobject-query&lt;/code&gt; のリリースを助けてくれた &lt;a href=&quot;https://github.com/jessebeach&quot;&gt;@jessebeach&lt;/a&gt;、Storybook との互換性を確保してくれた &lt;a href=&quot;https://github.com/jreinhold&quot;&gt;@jreinhold&lt;/a&gt;、&lt;code&gt;svelte-testing-library&lt;/code&gt; をアップデートしてくれた &lt;a href=&quot;https://github.com/yanick&quot;&gt;@yanick&lt;/a&gt;、ありがとうございました。また、様々なものが動作していることを確認するために、&lt;a href=&quot;https://github.com/dominikg&quot;&gt;@dominikg&lt;/a&gt; がセットアップしてくれた &lt;a href=&quot;https://github.com/sveltejs/svelte-ecosystem-ci&quot;&gt;&lt;code&gt;svelte-ecosystem-ci&lt;/code&gt;&lt;/a&gt; は、彼が Vite のために行ってくれた同様の作業をモデルにしており、エコシステム内の主要なプロジェクトに対するテストを継続的に支援しています。&lt;/p&gt;</description><pubDate>Thu, 22 Jun 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2023年6月</title><link>https://svelte.dev/blog/whats-new-in-svelte-june-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;6月になりましたね。まず、&lt;a href=&quot;https://hack.sveltesociety.dev/winners&quot;&gt;SvelteHack の全カテゴリーの受賞者の皆さま&lt;/a&gt;、おめでとうございます！受賞者は5月6日の Svelte Summit で発表されました 🎉&lt;/p&gt;
&lt;p&gt;Summit のプレイリストは、&lt;a href=&quot;https://www.youtube.com/playlist?list=PL8bMgX1kyZTiODueVnrK5GR42u3hgN13X&quot;&gt;the Svelte Society YouTube channel&lt;/a&gt; からご覧いただけます (各講演ごとに動画がビデオが分割されています)。まだ見ていない場合は、チェックしてみてください。&lt;/p&gt;
&lt;p&gt;今月のニュースレターは、Svelte と Kit の改善点をたくせんお届けします…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte 4.0 の最初のプレリリースバージョンである &lt;a href=&quot;https://github.com/sveltejs/svelte/releases&quot;&gt;Svelte 4.0.0-next.0&lt;/a&gt; が公開されました！ このリリースの変更点、改善点、目的に関する説明は &lt;a href=&quot;https://github.com/sveltejs/svelte/releases/tag/svelte%404.0.0-next.0&quot;&gt;GitHub のリリースページ&lt;/a&gt; でご確認いただけます。Svelte の未来を先行して知りたければ、チェックしてみてください。移行ガイドも含まれておりますので、ごくわずかな破壊的変更・非推奨事項についてもご確認いただけます。&lt;/p&gt;
&lt;p&gt;Svelte 3.59.0 も公開され、新機能がたくさん追加されています:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;スプレッド構文 (&lt;code&gt;...&lt;/code&gt;) による配列の再構築が正しく処理されるようになりました (&lt;strong&gt;3.59.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/8552&quot;&gt;#8552&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/8554&quot;&gt;#8554&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;新たに追加された &lt;code&gt;a11y-autocomplete-valid&lt;/code&gt; 警告は、autocomplete 属性が HTML の仕様に従って使用されていない場合に警告を出します (&lt;strong&gt;3.59.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/d32a27fb64f4127d31e4e76bd08e319cfaf0ba53/docs/rules/autocomplete-valid.md&quot;&gt;Examples&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/8520&quot;&gt;#8520&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fullscreenElement&lt;/code&gt; と &lt;code&gt;visibilityState&lt;/code&gt; バインディングが &lt;code&gt;&amp;lt;svelte:document&amp;gt;&lt;/code&gt; 要素で使用できるようになりました (&lt;strong&gt;3.59.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/8507&quot;&gt;#8507&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;devicePixelRatio&lt;/code&gt; バインディングが &lt;code&gt;&amp;lt;svelte:window&amp;gt;&lt;/code&gt; 要素で使用できるようになりました (&lt;strong&gt;3.59.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/8285&quot;&gt;#8285&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ResizeObserver&lt;/code&gt; のバインディング &lt;code&gt;contentRect&lt;/code&gt; / &lt;code&gt;contentBoxSize&lt;/code&gt;/&lt;code&gt;borderBoxSize&lt;/code&gt;/&lt;code&gt;devicePixelContentBoxSize&lt;/code&gt; が、&lt;code&gt;bind:&lt;/code&gt; で使用できるようになりました (&lt;strong&gt;3.59.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/8022&quot;&gt;#8022&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Svelte コンパイラに対する全ての変更については、まだ未リリースの変更も含め、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;  をご確認ください。&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Route-level entry generators allow exporting an entries function from &lt;code&gt;+page&lt;/code&gt;, &lt;code&gt;+page.server&lt;/code&gt;, and &lt;code&gt;+server&lt;/code&gt; files to supply possible values for params for prerendering (&lt;strong&gt;1.16.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/page-options#entries&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9571&quot;&gt;#9571&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;URLs in &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; tags are now crawled to make programmatic social-images much easier (&lt;strong&gt;1.17.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/seo#Manual-setup-title-and-meta&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9900&quot;&gt;#9900&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt; and &lt;code&gt;form&lt;/code&gt; have been renamed to &lt;code&gt;formData&lt;/code&gt; and &lt;code&gt;formElement&lt;/code&gt; respectively in the &lt;code&gt;enhance&lt;/code&gt; function. Using them through the old names will log a deprecation warning and they&amp;rsquo;ll be removed in a future version. (&lt;strong&gt;1.17.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/form-actions#Progressive-enhancement-use:enhance&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9902&quot;&gt;#9902&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Link options can now be set to &lt;code&gt;true&lt;/code&gt; and &lt;code&gt;false&lt;/code&gt; (&lt;strong&gt;1.19.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/link-options#Disabling-options&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/10039&quot;&gt;#10039&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;resolvePath&lt;/code&gt; export can be used to build relative paths from route IDs and parameters (&lt;strong&gt;1.19.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9949&quot;&gt;#9949&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nedredmond/a-maze&quot;&gt;a-maze&lt;/a&gt; is a simple maze generator (using DFS) with any dimensions between 5 cells and 75 cells&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yashash-pugalia/win11-svelte&quot;&gt;Windows 11 in Svelte&lt;/a&gt; attempts to replicate the Windows 11 desktop experience on web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/aghorui/jsoncrunch&quot;&gt;JsonCrunch&lt;/a&gt; is a JSON viewing, transformation and querying tool meant for quickly manipulating small to medium size pieces of JSON data&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dezain.io/typepost/&quot;&gt;Typepost&lt;/a&gt; is a simple text post generator for social media&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tall.ly/&quot;&gt;tall.ly&lt;/a&gt; is a website for sharing bookmarks (&lt;a href=&quot;https://tall.ly/zx/icons&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bbchallenge/bbchallenge&quot;&gt;bbchallenge&lt;/a&gt; is a collaborative environment to prove or disprove the Busy Beaver conjecture&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/iDPI-Umass/reddit-map&quot;&gt;Reddit Map&lt;/a&gt; is a project of computer, data, and social scientists to explore and visualize Reddit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/orosmatthew/wewatch&quot;&gt;WeWatch&lt;/a&gt; allows watching videos together in sync&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wonderplan.ai/&quot;&gt;Wonderplan&lt;/a&gt; is an AI-Powered Trip Planner tailored to your preferences and covering all aspects of your trip&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codingview.io/&quot;&gt;CodingView.io&lt;/a&gt; is an online coding interview tool&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://meat-gpt.sonnet.io/&quot;&gt;MeatGPT&lt;/a&gt; is an art-site that promptly ignores your prompt&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vimninja.com/&quot;&gt;Vim Ninja&lt;/a&gt; is an interactive Vim course in the browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://prcl.dev/&quot;&gt;prcl&lt;/a&gt; is a Pastebin-alternative focused on speed and simplicity&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rossrobino/md&quot;&gt;md&lt;/a&gt; is a web based markdown editor&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LlONGghw_MA&quot;&gt;2023 April 28&lt;/a&gt; - SK 1.15.9, colour contrast, SK reusable types, path aliases&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jo9osUzHnHY&quot;&gt;2023 May 5&lt;/a&gt; - SvelteKit 1.16.0, reactive statement lifecycle, custom stores&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MBSYHW50xb8&quot;&gt;2023 May 12&lt;/a&gt; - Svelte 4.0 preview, SvelteKit 1.16.3, Svelte 3.59.1&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CnvU6K12iK4&quot;&gt;2023 May 19&lt;/a&gt; - SvelteKit 1.18.0, accessible HTML tables, CSS nesting&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=oqroEq1DoKI&quot;&gt;2023 May 26&lt;/a&gt; - SvelteKit 1.19.0, choosing a UI library, breakpoint debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Svelte Radio&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-summit-hypisode&quot;&gt;Svelte Summit Hypisode&lt;/a&gt; (May 4, 2023)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/a-primer-on-ai-for-developers-with-swyx-from-latent-space&quot;&gt;A primer on AI for developers with Swyx from Latent Space&lt;/a&gt; (May 11, 2023 | &lt;a href=&quot;https://www.youtube.com/watch?v=PzImLLdU5Wk&quot;&gt;Video Version&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RhScu3uqGd0&quot;&gt;Build a Blazing Fast SvelteKit Markdown Blog&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=8OmsVZuuQMc&quot;&gt;Page Versus Standalone Endpoints In SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=ampDDmT3TU0&quot;&gt;Learn How Data Flows In Your SvelteKit App&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=P4wZ9JIxwjs&quot;&gt;Build a ChatGPT Plugin with SvelteKit&lt;/a&gt; by SuperMilkDaddy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=lTDKhj83tec&quot;&gt;Svelte makes Drag And Drop API easy!&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=Enl4OPQ2OAM&quot;&gt;Simple native-like App in SvelteKit!&lt;/a&gt; by Antonio Sarcevic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=0FCbd1XVYWo&quot;&gt;Let&amp;rsquo;s Learn Svelte.js in 60 Minutes (fun speed run).&lt;/a&gt; by developedbyed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://workadventu.re/blog/post/bridging-vue2-and-svelte&quot;&gt;Bridging Vue 2 and Svelte&lt;/a&gt; by Alexis Faizeau&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.robino.dev/posts/drizzle-svelte&quot;&gt;Write Once, Run Anywhere&lt;/a&gt; by Ross Robino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sveltekitsaas.com/articles/migrate-saas-to-sveltekit/&quot;&gt;Reflections on Migrating my SaaS To SvelteKit&lt;/a&gt; by SvelteKitSaaS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/sirneij/full-stack-authentication-system-using-rust-actix-web-and-sveltekit-1cc6&quot;&gt;Authentication system using rust (actix-web) and SvelteKit&lt;/a&gt; by John Owolabi Idogun&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/sveltekit-forms/&quot;&gt;SvelteKit Forms: Grammar Check App&lt;/a&gt;, &lt;a href=&quot;https://rodneylab.com/sveltekit-ably/&quot;&gt;SvelteKit Ably: Sqvuably Real‑Time Game&lt;/a&gt; and &lt;a href=&quot;https://rodneylab.com/svelte-login-form-example/&quot;&gt;Svelte Login Form Example: Best Practices&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/jdgamble555/the-correct-way-to-use-stores-in-sveltekit-3h6i&quot;&gt;The Correct Way to Use Stores in SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://dev.to/jdgamble555/rich-harris-is-not-getting-rid-of-ts-support-in-svelte-pp6&quot;&gt;Rich Harris is NOT Getting Rid of TS Support in Svelte&lt;/a&gt; by Jonathan Gamble&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maier.tech/posts/how-to-add-a-basic-seo-component-to-sveltekit&quot;&gt;How to add a basic SEO component to SvelteKit&lt;/a&gt; by Thilo Maier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scottspence.com/posts/sveltekit-contact-form-example-with-airtable&quot;&gt;SvelteKit Contact Form Example with Airtable&lt;/a&gt; by Scott Spence&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://itnext.io/performant-reactivity-with-svelte-kit-47d11769c5f&quot;&gt;Performant Reactivity with Svelte-Kit&lt;/a&gt; by Erxk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.thoughtspile.tech/2023/04/22/svelte-stores/&quot;&gt;Svelte stores: the curious parts&lt;/a&gt; by Valdimir Klepov&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bartektelec/svelte-svg-transform&quot;&gt;svelte-svg-transform&lt;/a&gt; is a tiny library that makes it easier for you to add SVGs and transform them in your Svelte project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/spiegelgraphics/sirens&quot;&gt;sirens&lt;/a&gt; is a visualization of active air raid sirens in Ukraine by DER SPIEGEL&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vasucp1207/sveltronics&quot;&gt;Sveltronics&lt;/a&gt; is a collection of Svelte utility functions for your project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/iansinnott/prompta&quot;&gt;Prompta&lt;/a&gt; is yet another interface for chatting with ChatGPT (or GPT-4)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/thetinkerinc/colibri&quot;&gt;Colibri&lt;/a&gt; is a lightweight, customizable component library for Svelte apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sveltron.com/&quot;&gt;Svelte Smart Doc&lt;/a&gt; is a natural language interface to search the Svelte Svelte documentation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tailwind-elements.com/docs/standard/integrations/svelte-integration/&quot;&gt;Tailwind Elements&lt;/a&gt; now has a Svelte Integration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;お読みくださりありがとうございました！ いつも通り、見落としなどございましたら &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt; にてお気軽にお知らせください。&lt;/p&gt;
&lt;p&gt;また次回お会いしましょう 👋&lt;/p&gt;</description><pubDate>Thu, 01 Jun 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2023年5月</title><link>https://svelte.dev/blog/whats-new-in-svelte-may-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;最新情報に飛び込む前に、まず最初に特別なアナウンスがあります:&lt;/p&gt;
&lt;h2 id=&quot;New-Svelte-Ambassadors&quot;&gt;&lt;span&gt;New Svelte Ambassadors&lt;/span&gt;&lt;a href=&quot;#New-Svelte-Ambassadors&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このニュースレターでも定期的にフィーチャーされている、素晴らしい Svelte コンテンツのクリエーターである &lt;a href=&quot;https://www.youtube.com/@JoyofCodeDev&quot;&gt;JoyOfCode&lt;/a&gt; と &lt;a href=&quot;https://www.youtube.com/@Huntabyte&quot;&gt;HuntaByte&lt;/a&gt; が Svelte アンバサダーに任命されました。Svelte のアンバサダーの方々はその親切さと貢献がよく知られており、そして Svelte がフレンドリーで歓迎されるコミュニティであるという評判を維持してくれていて、私たちはアンバサダーの方々に深く感謝しています。&lt;/p&gt;
&lt;h2 id=&quot;SvelteHack-winners-will-be-announced-May-6th&quot;&gt;&lt;span&gt;SvelteHack winners will be announced May 6th&lt;/span&gt;&lt;a href=&quot;#SvelteHack-winners-will-be-announced-May-6th&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;2/17から4/17にかけて開催された &lt;a href=&quot;https://hack.sveltesociety.dev/&quot;&gt;SvelteHack&lt;/a&gt; の優勝者があと数日で発表されます。あなたが好きなプロジェクトが選ばれたかどうか、5/6 の &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt; をご覧ください 👀&lt;/p&gt;
&lt;p&gt;今月のショーケースにはたくさんのハッカソンへの応募作品を紹介しています… でもまずは、最新情報を見ていきましょう！&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;style&lt;/code&gt; ブロックで CSS &lt;code&gt;@container&lt;/code&gt; クエリがサポートされました (&lt;strong&gt;3.58.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind:innerText&lt;/code&gt; が &lt;code&gt;contenteditable&lt;/code&gt; 要素でサポートされました (&lt;strong&gt;3.58.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;新たなアクセシビリティ警告 &lt;code&gt;a11y-interactive-supports-focus&lt;/code&gt; は、インタラクティブな要素がフォーカスできないようになっているときに警告してくれます (&lt;strong&gt;3.58.0&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Svelte コンパイラに対する全ての変更については、まだ未リリースの変更も含め、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;  をご確認ください。&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;ホットモジュールリローディング (HMR) が有効なとき、エラーが修正されたあとにページがリロードされるようになりました (&lt;strong&gt;1.14.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9497&quot;&gt;#9497&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;同じ html ページにロードされた2つのアプリを、&amp;rdquo;embedded&amp;rdquo; モードで同時に読み込めるようになりました (&lt;strong&gt;1.15.7&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9610&quot;&gt;#9610&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Vite のコンパイルで、標準の Vite resolve ではなく &lt;code&gt;svelte&lt;/code&gt; フィールドを使用して Svelte ファイルの resolve を行うパッケージに対し、警告のログを出力するようになりました (&lt;strong&gt;vite-plugin-svelte@2.1.0&lt;/strong&gt;, &lt;strong&gt;kit@1.15.8&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;svelte:document&amp;gt;&lt;/code&gt; がサポートされ (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1958&quot;&gt;#1958&lt;/a&gt;)、新たなバインディング向けのインテリセンスレポートがサポートされました (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1957&quot;&gt;#1957&lt;/a&gt;) (&lt;strong&gt;107.3.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Quick fix...&amp;rdquo; の新たな fix-all メニューオプションで、&amp;rdquo;Add all missing imports&amp;rdquo; や other detected errors が簡単にできるようになりました (&lt;strong&gt;107.3.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1939&quot;&gt;#1939&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;公式の &lt;a href=&quot;https://github.com/sveltejs/eslint-plugin-svelte&quot;&gt;ESLint plugin&lt;/a&gt; が新しく、より良くなりました！これまでの ESLint の Svelte に対するサポートは、テンプレートの AST をうまく扱えず、偽陽性/偽陰性になってしまったり、カスタムの ESLint ルールを作成するのに高い障壁がありました。この新しい公式バージョンは &lt;a href=&quot;https://github.com/ota-meshi&quot;&gt;ota-meshi&lt;/a&gt; の &lt;a href=&quot;https://github.com/sveltejs/svelte-eslint-parser&quot;&gt;svelte-eslint-parser&lt;/a&gt; がベースとなっており、すぐにお使いいただけます。トライしてみて、&lt;a href=&quot;https://github.com/sveltejs/eslint-plugin-svelte/issues&quot;&gt;フィードバックをシェアしてください&lt;/a&gt;！&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://soundofwar.art/&quot;&gt;Sound of War&lt;/a&gt; is a storytelling data visualization project to help understand the scale of destruction in Ukraine&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://swag.syntax.fm/&quot;&gt;Syntax FM&amp;rsquo;s swag shop&lt;/a&gt; is now built with SvelteKit, PlanetScale and Prisma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://appreciation.place/&quot;&gt;Appreciation Jar&lt;/a&gt; is your own private space where you can send encouraging and appreciative messages to your partner&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jp-jouzu.netlify.app/&quot;&gt;Japanese Jouzu&lt;/a&gt; is a Japanese sound and symbol learning app&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.markmyimages.com/&quot;&gt;MarkMyImages&lt;/a&gt; is a tool to bulk watermark, image resize, rename, effects, and more - all on-device for speed and privacy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/immich-app/immich&quot;&gt;Immich&lt;/a&gt; is a self-hosted photo and video backup solution directly from your mobile phone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ryanatkn/earbetter&quot;&gt;Earbetter&lt;/a&gt; is an ear training game and tools for playing and programming music and audio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tune-twisters.vercel.app/&quot;&gt;Tune Twisters&lt;/a&gt; is a guessing game for songs... in reverse&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.responsehunt.com/&quot;&gt;ResponseHunt&lt;/a&gt; is a mystery game based on browser requests - use your programming skills to get to the “golden” response&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/snuffyDev/Wolfensvelte-3D/&quot;&gt;Wolfensvelte 3D&lt;/a&gt; is a Svelte &amp;ldquo;port&amp;rdquo; of Wolfenstein 3D&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code-svelte.vercel.app/&quot;&gt;Code Solving&lt;/a&gt; teaches how to solve problems with code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://make-bookmarklets.com/&quot;&gt;Make Bookmarklets&lt;/a&gt; is a quick way to create JavaScript bookmarklets with linting, intellisense and auto-minification&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://genie.pm&quot;&gt;GeniePM&lt;/a&gt; is an AI tool to help Product Managers write user stories and requirements&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bitesized.news/&quot;&gt;Bitesized News&lt;/a&gt; is an AI that delivers news digests and responds to questions via chat&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.open-tunings.com/&quot;&gt;Open Tunings&lt;/a&gt; is a place to explore alternative guitar tunings without having to retune your guitar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blinksms.se/#&quot;&gt;BlinkSMS&lt;/a&gt; is a text alert tool for Stockholm Student Housing to help with booking laundry times&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/killswitchh/dev-links&quot;&gt;Dev Links&lt;/a&gt; helps dev showcase multiple links in a single place - similar to Linktree and Kofi&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://audiogest.app/&quot;&gt;Audiogest&lt;/a&gt; is a tool to convert speech to text &amp;amp; summarize any audio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://alecames.com/minesweep&quot;&gt;MineSweep&lt;/a&gt; is a rendition of Minesweeper built with Svelte and JavaScript&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://biolytics.app/&quot;&gt;Biolytics&lt;/a&gt; lets you import your lab tests to see all your lab tests in one place&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ntsd/zero-share&quot;&gt;Zero share&lt;/a&gt; is a secure P2P file sharing using WebRTC&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sveltelab.dev/&quot;&gt;Svelte lab&lt;/a&gt; is a sandbox for creating and sharing SvelteKit projects&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MJHO6FSioPI&quot;&gt;Dev Vlog: April 2023 - TypeScript vs JSDoc, Transitions API, Dominic Gannaway joins Svelte team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uXCipjbcQfM&quot;&gt;Rich Harris on frameworks, the web, and the edge.&lt;/a&gt; from Vercel&amp;rsquo;s Svelte Meetup in NYC&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/workshops/svelte-sveltekit/&quot;&gt;Svelte &amp;amp; SvelteKit&lt;/a&gt; taught by Rich Harris on Frontend Masters&lt;/li&gt;
&lt;li&gt;This Week in Svelte:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-YjLubiieYs&quot;&gt;2023 March 31 - SvelteKit, Svelte; static sites and headless CMS demos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SCMosMo85_8&quot;&gt;2023 April 22 - SvelteKit 1.15.7, skip links, error handling, static assets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=H2kOO5mvUQs&quot;&gt;2023 April 14 - SvelteKit 1.15.5, accessible buttons, advanced toggle state 🧪🔥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SCMosMo85_8&quot;&gt;2023 April 21 - SvelteKit 1.15.7, skip links, error handling, static assets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Svelte Radio&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/using-svelte-in-react-with-puru-vijay&quot;&gt;Using Svelte in React with Puru Vijay&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/eric-brehault-and-nuclia&quot;&gt;Eric Brehault and Nuclia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-at-appwrite-with-alex-patterson&quot;&gt;Svelte at AppWrite with Alex Patterson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-in-research-at-dartmouth-with-wasita-and-eshin&quot;&gt;Svelte in Research at Dartmouth with Wasita and Eshin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MoGkX4RvZ38&quot;&gt;The Complete SvelteKit Course For Building Modern Web Apps&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=gkw1wFIXM_8&quot;&gt;Simple SvelteKit Page Transitions&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=smqE0y0z0CA&quot;&gt;Svelte For React Developers | Your Next JavaScript Framework?&lt;/a&gt; by Cretezy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.udemy.com/course/svelte-and-sveltekit/?ranMID=39197&amp;ranEAID=msYS1Nvjv4c&amp;ranSiteID=msYS1Nvjv4c-oN6aTXp3jgDgUps8JCGxcg&amp;LSNPUBID=msYS1Nvjv4c&amp;utm_source=aff-campaign&amp;utm_medium=udemyads&quot;&gt;Svelte &amp;amp; SvelteKit: The Complete Guide&lt;/a&gt; by Ali Alaa on Udemy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Uw5GZg96kD8&quot;&gt;ChatGPT-4 with SvelteKit 🤖 Generative AI on the EDGE 🌍&lt;/a&gt; by Johnny Magrippis&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.okupter.com/blog/headless-wordpress-graphql-sveltekit&quot;&gt;Headless WordPress with GraphQL and SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.okupter.com/blog/sveltekit-fix-duplicate-metatags-issue&quot;&gt;How to fix the duplicate meta tags issue in SvelteKit&lt;/a&gt; by Justin Ahinon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://raqueebuddinaziz.com/blog/how-to-setup-trpc-in-a-sveltekit-project/&quot;&gt;How to setup tRPC in a SvelteKit project&lt;/a&gt; by Raqueebuddin Aziz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.newline.co/courses/better-data-visualizations-with-svelte/welcome&quot;&gt;Better Data Visualizations with Svelte&lt;/a&gt; by newline&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Uvnzwp72Ze8&quot;&gt;Offline App with SvelteKit + SQLite Part 1: Setup WebAssembly SQLite&lt;/a&gt; by hartenfellerdev&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mokshit06/sveltris&quot;&gt;Sveltris&lt;/a&gt; lets you intermix UI primitives like components, and state primitives like hooks between frameworks, without even noticing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SwiftMarket/swiftmarket-sveltekit&quot;&gt;SwiftMarket&lt;/a&gt; is an E-Commerce solution built with SvelteKit, Pocketbase as a database and Stripe for payments&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelegante&quot;&gt;Svelegante&lt;/a&gt; is a Classy writable store for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.table-generator.de/&quot;&gt;Table Generator&lt;/a&gt; lets you create, design and customize your own tables tables online using a graphical editor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-animated-headline&quot;&gt;Svelte Animated Headline&lt;/a&gt; is an animated headline component that can grab attention in an informative way&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tguelcan/music&quot;&gt;SvelteKit Music App Example&lt;/a&gt; demonstrates how to connect and process data as well as some practical examples of how to develop frontend components with TailwindCSS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/socio&quot;&gt;Socio&lt;/a&gt; is a WebSocket Real-Time Communication (RTC) API framework to connect your front-end logic to a back-end database reactively&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flowbite-svelte.com/&quot;&gt;Flowbite Svelte&lt;/a&gt; is an official Flowbite component library for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wundergraph.com/blog/introducing_svelte_query_client&quot;&gt;Wundergraph&lt;/a&gt;, a backend for frontend framework, just released their Svelte Query client&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lucia-auth.com/blog/lucia-1&quot;&gt;Lucia&lt;/a&gt; just reached 1.0 for their simple and flexible auth library for SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/efstajas/svelte-stepper&quot;&gt;svelte-stepper&lt;/a&gt; is a simple library for building animated stepper flows with Svelte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;いつも通り、見落としなどございましたら &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt; にてお気軽にお知らせください。&lt;/p&gt;
&lt;p&gt;また次回お会いしましょう！&lt;/p&gt;</description><pubDate>Mon, 01 May 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2023年4月</title><link>https://svelte.dev/blog/whats-new-in-svelte-april-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;Happy April、みなさん！ 今月は、Svelte コンパイラの全ての新機能や、SvelteKit における QOL の改善、そしてたくさんのショーケースを見ていきますよ (いつものようにね)。&lt;/p&gt;
&lt;p&gt;コアチームのニュースとしては、Dominic Gannaway が Vercel にジョインし、フルタイムで Svelte に取り組むことになりました！ Dominic は javascript エンジンのパフォーマンスや、DOM、リアクティビティ、アクセシビリティなどのワールドクラスのエキスパートです！ UI フレームワークの &lt;a href=&quot;https://www.infernojs.org/&quot;&gt;Inferno&lt;/a&gt; や Meta の WYSIWYG エディタである &lt;a href=&quot;https://lexical.dev/&quot;&gt;Lexical&lt;/a&gt; の作者としても知られています。彼の才能が Svelte エコシステムで発揮されたら、とても素晴らしい未来が待っているでしょう🌱&lt;/p&gt;
&lt;p&gt;こちらもお忘れなく！ 6回目 となる Svelte のバーチャルカンファレンス、Svelte Summit Spring が 5月6日に開催されます。また、&lt;a href=&quot;https://hack.sveltesociety.dev/&quot;&gt;SvelteHack&lt;/a&gt; の締め切りまであと2週間です… あなたの作品をコミュニティにシェアする素晴らしい機会ですし、もしかしたら賞品を獲得できるかも！&lt;/p&gt;
&lt;p&gt;それでは、今月の更新を見ていきましょう…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;A bunch of new features are now available as of &lt;strong&gt;3.56.0&lt;/strong&gt;!&lt;ul&gt;
&lt;li&gt;Add &lt;code&gt;|stopImmediatePropagation&lt;/code&gt; event modifier for &lt;code&gt;on:eventname&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/5085&quot;&gt;#5085&lt;/a&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#template-syntax-element-directives-on-eventname&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;axis&lt;/code&gt; parameter to &lt;code&gt;slide&lt;/code&gt; transition (&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/6182&quot;&gt;#6182&lt;/a&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#run-time-svelte-transition-slide&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;readonly&lt;/code&gt; utility to convert &lt;code&gt;writable&lt;/code&gt; store to readonly (&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/6518&quot;&gt;#6518&lt;/a&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#run-time-svelte-store-writable&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;readyState&lt;/code&gt; binding for media elements (&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/6666&quot;&gt;#6666&lt;/a&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#template-syntax-element-directives-bind-property-media-element-bindings&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;naturalWidth&lt;/code&gt; and &lt;code&gt;naturalHeight&lt;/code&gt; bindings to images (&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/7771&quot;&gt;#7771&lt;/a&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#template-syntax-element-directives-bind-property-image-element-bindings&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Support &lt;code&gt;&amp;lt;!-- svelte-ignore ... --&amp;gt;&lt;/code&gt; on components (&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/8082&quot;&gt;#8082&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Inputs in a &lt;code&gt;bind:group&lt;/code&gt; will clear when their value is set to &lt;code&gt;undefined&lt;/code&gt; (&lt;strong&gt;3.56.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/8214&quot;&gt;#8214&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; values will now persist when swapping elements with spread attributes in an &lt;code&gt;{#each}&lt;/code&gt; block (&lt;strong&gt;3.56.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/7578&quot;&gt;#7578&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Better warnings across the board - from &lt;code&gt;noreferrer&lt;/code&gt; to &lt;code&gt;aria&lt;/code&gt; rules (&lt;strong&gt;3.56.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;a href=&quot;svelte:document&quot;&gt;svelte:document&lt;/a&gt; (&lt;strong&gt;3.57.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/3310&quot;&gt;#3310&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;style:&lt;/code&gt; directive will now take precedence over a &lt;code&gt;style=&lt;/code&gt; attribute (&lt;strong&gt;3.57.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/7475&quot;&gt;#7475&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS units are now supported in the &lt;code&gt;fly&lt;/code&gt; and &lt;code&gt;blur&lt;/code&gt; transitions (&lt;strong&gt;3.57.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/7623&quot;&gt;#7623&lt;/a&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#run-time-svelte-transition&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Svelte コンパイラに対する全ての変更については、まだ未リリースの変更も含め、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;  をご確認ください。&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;You can now get all cookies for a request with &lt;code&gt;cookies.getAll&lt;/code&gt; (&lt;strong&gt;1.10.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9287&quot;&gt;#9287&lt;/a&gt;, &lt;a href=&quot;/docs/kit/@sveltejs-kit#Cookies&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Easily manage the submission status of (multiple) forms with the new exposed &lt;code&gt;submitter&lt;/code&gt; parameter in &lt;code&gt;use:enhance&lt;/code&gt; (&lt;strong&gt;1.12.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9425&quot;&gt;#9425&lt;/a&gt;, &lt;a href=&quot;/docs/kit/@sveltejs-kit#SubmitFunction&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The default error page now has dark mode styles (&lt;strong&gt;1.13.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9460&quot;&gt;#9460&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;You can now omit types on all methods and variables with special meaning to SvelteKit and still benefit from full type safety! Read more about it in the &lt;a href=&quot;/blog/zero-config-type-safety&quot;&gt;announcement blog post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://peer.beer/&quot;&gt;Peerbeer&lt;/a&gt; lets you share files peer-to-peer (p2p) without any third parties or data limits&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://unplaneted.com/&quot;&gt;unplaneted&lt;/a&gt; is an interface for exploring very large space images&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pokegh0st/pokebook&quot;&gt;PokeBook&lt;/a&gt; is a digital notebook for writing poetry that provides a beautiful distraction-free environment and autosave&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://papi.run/&quot;&gt;papi&lt;/a&gt; lets you create prompts for AI models and share them with others with a unique link&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/centerofci/mathesar&quot;&gt;Mathesar&lt;/a&gt; is a straightforward open source tool that provides a spreadsheet-like interface to a PostgreSQL database&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://neil.macmunn.com/sqlite#&quot;&gt;SQLite Playground&lt;/a&gt; lets you learn how SQLite runs and stores data in the browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pheralb/svgl&quot;&gt;svgl&lt;/a&gt; is a beautiful library with SVG logos&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://swehl.com/&quot;&gt;Swehl&lt;/a&gt; is an eCommerce store, community and tutorial site for breastfeeding mothers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TGlide/codeverter&quot;&gt;Codeverter&lt;/a&gt; is a GPT-powered code converter, allowing you to convert between different languages and frameworks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gameonornot.com/&quot;&gt;Game On Or Not&lt;/a&gt; is a free web app that helps you organize sports with your friends&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltia/sveltia-cms&quot;&gt;Sveltia CMS&lt;/a&gt; is a Git-based lightweight headless CMS&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/streaming-snapshots-sveltekit&quot;&gt;Streaming, snapshots, and other new features since SvelteKit 1.0&lt;/a&gt; by Geoff Rich on the svelte.dev Blog&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=vgXgex5E-8g&quot;&gt;Dev Vlog: Rich Harris shows us what&amp;rsquo;s new in Svelte and Kit, March 2023&lt;/a&gt; from Svelte Society&lt;ul&gt;
&lt;li&gt;If you missed this one live, check out &lt;a href=&quot;https://www.youtube.com/watch?v=MJHO6FSioPI&quot;&gt;the next one&lt;/a&gt; - scheduled for April 5th&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RkQ_f7XxdMI&quot;&gt;Svelte Society - London February 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Svelte Radio episodes from this month:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/we-all-live-in-a-svelte-submarine&quot;&gt;We all live in a Svelte Submarine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/building-furniture-using-svelte-with-bert-bengtson&quot;&gt;Building furniture using Svelte with Bert Bengtson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-hackathon-announcement&quot;&gt;Svelte Hackathon Announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/leveluptuts-6-months-later-with-scott-tolinski&quot;&gt;LevelUpTuts 6 months later with Scott Tolinski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/i-got-a-cold-and-had-fever-dreams-about-react&quot;&gt;I got a cold and had fever dreams about React 😱&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This Week In Svelte videos:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WiCjQVoE-3k&quot;&gt;2023 March 10 - New prompts! Underline your links!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sRhZQ-2VxVU&quot;&gt;2023 March 17 - More a11y warnings! How to: Dynamic Form Actions!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=vpbhsbg2otg&quot;&gt;2023 March 23 - SvelteKit 1.13.0, Vitest and Playwright overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch or Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uAF4Yd-gddo&quot;&gt;Full Stack SvelteKit App Deployment Using Vercel And Supabase For $0&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=73Y8Yyg54zc&quot;&gt;Why Is Svelte.js so Popular?&lt;/a&gt; by Prismic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-Zuo3UWjjI8&quot;&gt;Interactive Tables in SvelteKit with TanStack Table&lt;/a&gt; by hartenfellerdev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ADnaRwQZfqw&amp;list=PLm0ILX0LGQk_220vvpsbyXH2VesRlCm-E&quot;&gt;SvelteKit + GraphQL with Houdini&lt;/a&gt; by Aftab Alam&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tyhopp.com/notes/thoughts-on-svelte&quot;&gt;Thoughts on Svelte&lt;/a&gt; by Ty Hopp&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://storybook.js.org/blog/storybook-for-sveltekit/&quot;&gt;Storybook&lt;/a&gt; on why (and how) it supports SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thethinks.vercel.app/blog/svelte-authorizer&quot;&gt;Svelte Authentication Tutorial with Authorizer&lt;/a&gt; by The Thinks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.robino.dev/posts/svelte-zod-error&quot;&gt;Use Zod to Validate Forms on the Server with SvelteKit&lt;/a&gt; by Ross Robino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maier.tech/posts/do-i-need-a-sitemap-for-my-sveltekit-app-and-how-do-i-create-it&quot;&gt;Do I need a sitemap for my SvelteKit app, and how do I create it?&lt;/a&gt; and &lt;a href=&quot;https://maier.tech/posts/complement-zero-effort-type-safety-in-sveltekit-with-zod-for-even-more-type-safety&quot;&gt;Complement zero-effort type safety in SvelteKit with Zod for even more type safety&lt;/a&gt; and &lt;a href=&quot;https://maier.tech/posts/configuring-turborepo-for-a-sveltekit-monorepo&quot;&gt;Configuring Turborepo for a SvelteKit monorepo&lt;/a&gt; by Thilo Maier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joshcollinsworth.com/blog/sveltekit-page-transitions&quot;&gt;Adding page transitions in SvelteKit&lt;/a&gt; by Josh Collinsworth&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.okupter.com/blog/e2e-testing-with-sveltekit-and-playwright&quot;&gt;E2E testing with SvelteKit and Playwright&lt;/a&gt; and &lt;a href=&quot;https://www.okupter.com/blog/sveltekit-with-typescript&quot;&gt;Why you should use TypeScript in your next SvelteKit projects&lt;/a&gt; by Justin Ahinon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inow.dev/understanding-the-structure-of-a-svelte-kit-project/&quot;&gt;Understanding the structure of a SvelteKit project&lt;/a&gt; by Igor Nowosad&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/brewhousedigital/secure-authentication-in-svelte-using-hooks-k5j&quot;&gt;Secure Authentication in Svelte using Hooks&lt;/a&gt; by Brewhouse Digital&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cyco130/vavite/tree/main/packages/node-loader&quot;&gt;@vavite/node-loader&lt;/a&gt; is a Node ESM loader that uses Vite to transpile modules to enable sourcemap and breakpoints support in SvelteKit (or any Vite) project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/inlang/inlang&quot;&gt;Inlang&lt;/a&gt; is building i18n for SvelteKit and is &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/11ydtui/sveltekit_and_i18n_lets_finally_solve_this_never/&quot;&gt;looking for feedback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.skeleton.dev/&quot;&gt;Skeleton&lt;/a&gt; - the UI toolkit for Svelte and Tailwind - is now 1.0 🎉&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/suhaildawood/SvelteKit-integrated-WebSocket&quot;&gt;SvelteKit-integrated-WebSocket&lt;/a&gt; provides first-class support for WebSockets within SvelteKit by attaching a WebSocket server to the global state&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ankurrsinghal/svelte-legos&quot;&gt;Svelte Legos&lt;/a&gt; is a collection of essential Svelte Composition Utilities&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/efstajas/svelte-stored-writable&quot;&gt;svelte-stored-writable&lt;/a&gt; is a drop-in extension of Svelte&amp;rsquo;s writable that additionally stores and restores its contents using localStorage.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ghostebony/svelte-virtual&quot;&gt;svelte-virtual&lt;/a&gt; provides Svelte components for efficiently rendering large lists.&lt;/li&gt;
&lt;li&gt;ChatGPT Clones and Starters&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kierangilliam/chatwithme.chat&quot;&gt;chatwithme.chat&lt;/a&gt; is an open source ChatGPT UI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ShipBit/slickgpt&quot;&gt;SlickGPT&lt;/a&gt; is a light-weight &amp;ldquo;use-your-own-API-key&amp;rdquo; web client for the OpenAI API written in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KTruong008/aichatbestie&quot;&gt;AI Chat Bestie&lt;/a&gt; is an unofficial ChatGPT app&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ichbtrv/chatgpt-svelte&quot;&gt;chatgpt-svelte&lt;/a&gt; is a simple UI for the ChatGPT Open AI API&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;お読みいただきありがとうございました！あと、&lt;a href=&quot;https://hack.sveltesociety.dev/&quot;&gt;Svelte Hackathon&lt;/a&gt; にも是非チャレンジしてみてください 🧑‍💻&lt;/p&gt;
&lt;p&gt;いつも通り、見落としなどございましたら &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt; にてお気軽にお知らせください。&lt;/p&gt;
&lt;p&gt;また次回お会いしましょう！&lt;/p&gt;</description><pubDate>Sat, 01 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Zero-effort type safety</title><link>https://svelte.dev/blog/zero-config-type-safety</link><author>Simon Holthausen</author><description>&lt;p&gt;SvelteKit アプリに型アノテーションをたくさん書くと、ネットワークをまたいでも完全な型安全性が手に入ります — あなたのページの &lt;code&gt;data&lt;/code&gt; には、その data を生成する &lt;code&gt;load&lt;/code&gt; 関数の戻り値から推論された型があり、明示的に何かを宣言する必要はありません。これなしで今までどうやって生活してきたのだろう、と考えさせられるようなことの1つです。&lt;/p&gt;
&lt;p&gt;でも、型アノテーションが不要になったとしたら？ &lt;code&gt;load&lt;/code&gt; と &lt;code&gt;data&lt;/code&gt; はフレームワークの一部ですし、フレームワークが私たちのために型付けできないものでしょうか？ これは結局、コンピューターが何のためにあるのか、ということです — 退屈なことをやってくれるから、私たちはクリエイティブなことに集中することができるのです。&lt;/p&gt;
&lt;p&gt;そして今日現在、それができるようになりました。&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://sveltejs.github.io/assets/video/zero-config-types.mp4&quot; controls muted playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;VSCode をお使いでしたら、Svelte extension を最新バージョンにアップグレードするだけです。これでもう今後、&lt;code&gt;load&lt;/code&gt; 関数や &lt;code&gt;data&lt;/code&gt; プロパティにアノテーションを付ける必要はありません。他のエディタ向けの Extension でも、それが Language Server Protocol と TypeScript plugin をサポートしていればこの機能を使うことができます。CLI 診断ツール &lt;code&gt;svelte-check&lt;/code&gt; の最新バージョンでも動作します！&lt;/p&gt;
&lt;p&gt;詳細に入る前に、SvelteKit の型安全性の仕組みについておさらいしましょう。&lt;/p&gt;
&lt;h2 id=&quot;Generated-types&quot;&gt;&lt;span&gt;Generated types&lt;/span&gt;&lt;a href=&quot;#Generated-types&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit では、&lt;code&gt;load&lt;/code&gt; 関数でページの data を取得します。&lt;code&gt;@sveltejs/kit&lt;/code&gt; から &lt;code&gt;ServerLoadEvent&lt;/code&gt; をインポートして、この event に型を付けることができます:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.ts&quot;&gt;src/routes/blog/[slug]/+page.server&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Params&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;LayoutParams&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ParentData&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;ServerLoadEvent&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;@sveltejs/kit&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;async&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;load&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;interface&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Params&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;LayoutParams&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ParentData&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;ServerLoadEvent&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;post&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getPost&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(slug&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;database&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getPost&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(slug&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;undefined&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;getPost&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;RequestEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.params: Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;The parameters of the current route - e.g. for a route like &lt;code&gt;/blog/[slug]&lt;/code&gt;, a &lt;code&gt;{ slug: string }&lt;/code&gt; object.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;params&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;post&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;動作しますが、もっと良くすることができます。このコード例では、パラメーターは &lt;code&gt;post&lt;/code&gt; ではなく &lt;code&gt;slug&lt;/code&gt; (ファイル名に &lt;code&gt;[slug]&lt;/code&gt; とあるため) ですが、誤って &lt;code&gt;event.params.post&lt;/code&gt; と書いてしまっていることにお気付きでしょうか。&lt;code&gt;ServerLoadEvent&lt;/code&gt; にジェネリクスの型引数を追加して自分で &lt;code&gt;params&lt;/code&gt; に型付けすることもできますが、柔軟性がなく壊れやすいです。&lt;/p&gt;
&lt;p&gt;そこで、自動型生成の出番です。全てのルート(route)ディレクトリには、それぞれのルート固有(route-specific)の型を持つ &lt;code&gt;$types.d.ts&lt;/code&gt; という隠しファイルがあります:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.ts&quot;&gt;src/routes/blog/[slug]/+page.server&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;import type { ServerLoadEvent } from &#39;@sveltejs/kit&#39;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;PageServerLoadEvent&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;PageServerLoadEvent&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./$types&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;async&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;load&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;PageServerLoadEvent&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;PageServerLoadEvent&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;PageServerLoadEvent&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post: await database.getPost(event.params.post)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;post&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getPost&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;PageServerLoadEvent&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;params&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これによって &lt;code&gt;params.post&lt;/code&gt; プロパティにアクセスしようとするとエラーとなり、打ち間違い(typo)がわかるようになります。パラメーターの型を絞り込むだけでなく、&lt;code&gt;await event.parent()&lt;/code&gt; の型や、server &lt;code&gt;load&lt;/code&gt; 関数や universal &lt;code&gt;load&lt;/code&gt; 関数から渡される &lt;code&gt;data&lt;/code&gt; の型も絞り込むことができます。&lt;code&gt;LayoutServerLoadEvent&lt;/code&gt; と区別するため、&lt;code&gt;PageServerLoadEvent&lt;/code&gt; を使用していることにご注意ください。&lt;/p&gt;
&lt;p&gt;data をロードしたあと、それを &lt;code&gt;+page.svelte&lt;/code&gt; で表示したいと思います。同じ型生成メカニズムが、&lt;code&gt;data&lt;/code&gt; の型が正しいことを保証します:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.svelte&quot;&gt;src/routes/blog/[slug]/+page&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ PageData }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./$types&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.title}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;{@&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;html&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.content}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;Virtual-files&quot;&gt;&lt;span&gt;Virtual files&lt;/span&gt;&lt;a href=&quot;#Virtual-files&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;開発サーバー(dev server)、またはビルド(build)を実行しているときに、型が自動で生成されます。ファイルシステムベースルーティングのおかげで、SvelteKit はルートツリー(route tree)をトラバースし、正しいパラメーターや親の data を推論することができます。各ルート(route)ごとに1つの &lt;code&gt;$types.d.ts&lt;/code&gt; ファイルが出力されますが、大体以下のようになります:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.ts&quot;&gt;$types.d&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;module&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;@sveltejs/kit&quot;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;Kit&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;@sveltejs/kit&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// types inferred from the routing tree&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteParams&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;RouteParams&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;slug&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;/blog/[slug]&quot;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;RouteId&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;/blog/[slug]&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageParentData&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{}&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;PageParentData&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// PageServerLoad type extends the generic Load type and fills its generics with the info we have&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageServerLoad&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Kit&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteParams&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageParentData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;MaybePromise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;/blog/[slug]&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;PageServerLoad&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;module&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;@sveltejs/kit&quot;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;Kit&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ServerLoad&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Params&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;LayoutParams&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ParentData&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;OutputData&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Record&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Kit&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Params&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ParentData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;MaybePromise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;OutputData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;The generic form of &lt;code&gt;PageServerLoad&lt;/code&gt; and &lt;code&gt;LayoutServerLoad&lt;/code&gt;. You should import those from &lt;code&gt;./$types&lt;/code&gt; (see &lt;a href=&quot;https://svelte.dev/docs/kit/types#Generated-types&quot;&gt;generated types&lt;/a&gt;)
rather than using &lt;code&gt;ServerLoad&lt;/code&gt; directly.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;ServerLoad&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteParams&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;RouteParams&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageParentData&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{}&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;PageParentData&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteId&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;/blog/[slug]&quot;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;RouteId&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// The input parameter type of the load function&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageServerLoadEvent&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Kit&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteParams&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageParentData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;PageServerLoadEvent&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Parameters&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;args&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;T&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;args&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;infer&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;P&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;P&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;never&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Obtain the parameters of a function type in a tuple&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;Parameters&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageServerLoad&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Kit&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ServerLoadEvent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;RouteParams&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageParentData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;|&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;MaybePromise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;/blog/[slug]&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;PageServerLoad&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// The return type of the load function&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageData&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Kit&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;ReturnType&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;PageData&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;module&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;@sveltejs/kit&quot;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;Kit&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Kit&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.ReturnType&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;/*unresolved*/&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;ReturnType&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;typeof&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;../src/routes/blog/[slug]/+page.server.js&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;load&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;$types.d.ts&lt;/code&gt; を実際に &lt;code&gt;src&lt;/code&gt; ディレクトリに書き込んでいるわけではありません — ちょっとごちゃごちゃしますし、ごちゃごちゃしたコードが好きな人はいません。代わりに、TypeScript の &lt;a href=&quot;https://www.typescriptlang.org/ja/tsconfig#rootDirs&quot;&gt;&lt;code&gt;rootDirs&lt;/code&gt;&lt;/a&gt; という機能を使用し、‘virtual’ ディレクトリを実際のディレクトリにマップします。&lt;code&gt;rootDirs&lt;/code&gt; に、プロジェクトの root (デフォルト) と、さらに &lt;code&gt;.svelte-kit/types&lt;/code&gt; (全ての generated types の出力フォルダ) を設定し、その中でルート構造(route structure)をミラーリングすることで、この挙動を実現しています:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;tree&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// on disk:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.svelte-kit/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├ types/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ ├ src/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ ├ routes/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ │ ├ blog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ │ │ ├ [slug]/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ │ │ │ └ $types.d.ts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;src/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├ routes/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ ├ blog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ ├ [slug]/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ │ ├ +page.server.ts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ │ └ +page.svelte&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;tree&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// what TypeScript sees:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;src/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├ routes/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ ├ blog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ ├ [slug]/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ │ ├ $types.d.ts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ │ ├ +page.server.ts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ │ │ └ +page.svelte&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;Type-safety-without-types&quot;&gt;&lt;span&gt;Type safety without types&lt;/span&gt;&lt;a href=&quot;#Type-safety-without-types&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自動型生成のおかげで、高度な型安全性を実現しています。ただ、もし型を書くのをすべて省略できるようになったとしたら素晴らしいと思いませんか？今日現在、まさにそれができるようになりました:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.ts&quot;&gt;src/routes/blog/[slug]/+page.server&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;import type { PageServerLoadEvent } from &#39;./$types&#39;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;async&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;load&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;: PageServerLoadEvent&lt;/span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;post&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getPost&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;params&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;span class=&quot;filename&quot; data-ext=&quot;.svelte&quot;&gt;src/routes/blog/[slug]/+page&lt;/span&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ PageData }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./$types&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight remove&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;data;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これはとても便利ですが、それだけではありません。より &lt;em&gt;正しい&lt;/em&gt; のです: コードをコピーペーストするときに、例えば &lt;code&gt;PageServerLoadEvent&lt;/code&gt; と &lt;code&gt;LayoutServerLoadEvent&lt;/code&gt; と &lt;code&gt;PageLoadEvent&lt;/code&gt; のような、似ているが少し違う型を混同してしまうことがよくあります。Svelte の主な考え方は、コードを宣言的に書くことで、機械が私たちのためにほとんどの作業を、それも正しく効率的にやってくれる、というものでした。これも同じです — &lt;code&gt;+page&lt;/code&gt; ファイルのような強いフレームワークの規約を活用すれば、間違いをするのが難しくなり、正しいことをするほうが簡単になるのです。&lt;/p&gt;
&lt;p&gt;これは SvelteKit ファイル (&lt;code&gt;+page&lt;/code&gt;、&lt;code&gt;+layout&lt;/code&gt;、&lt;code&gt;+server&lt;/code&gt;、&lt;code&gt;hooks&lt;/code&gt;、&lt;code&gt;params&lt;/code&gt; など) からのすべての export と、&lt;code&gt;+page/layout.svelte&lt;/code&gt; ファイルの &lt;code&gt;data&lt;/code&gt;、&lt;code&gt;form&lt;/code&gt;、&lt;code&gt;snapshot&lt;/code&gt; プロパティで動作します。&lt;/p&gt;
&lt;p&gt;VS Code でこの機能を使用するには、Svelte for VS Code extension の最新バージョンをインストールしてください。他の IDE では、Svelte language server と Svelte TypeScript plugin の最新バージョンを使用してください。エディタ以外では、コマンドラインツール &lt;code&gt;svelte-check&lt;/code&gt; でも、バージョン 3.1.1 以降であればこれらのアノテーションを追加する方法が組み込まれています。&lt;/p&gt;
&lt;h2 id=&quot;How-does-it-work&quot;&gt;&lt;span&gt;How does it work?&lt;/span&gt;&lt;a href=&quot;#How-does-it-work&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;この機能を実現するには、(Svelte ファイルのインテリセンスを行ってくれる) language server と、(TypeScript に &lt;code&gt;.ts/js&lt;/code&gt; ファイルの内部から Svelte ファイルを理解させる) TypeScript plugin の両方を変更する必要がありました。両方とも、正しい型を正しいポジションに自動挿入し、オリジナルの型付けされていないファイルではなく拡張された仮想ファイルを使用するよう TypeScript に指示します。生成されたファイルのポジションとオリジナルファイルのポジションを前後にマッピングして組み合わせることで、これを実現しています。&lt;code&gt;svelte-check&lt;/code&gt; は language server の一部を再利用しているため、調整することなくこの機能が使えます。&lt;/p&gt;
&lt;p&gt;この機能は Next.js チームから&lt;a href=&quot;https://twitter.com/shuding_/status/1625263297573400578&quot;&gt;インスパイア&lt;/a&gt;されました。Next.js チームに感謝します。&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-next&quot;&gt;&lt;span&gt;What&amp;rsquo;s next&lt;/span&gt;&lt;a href=&quot;#What&#39;s-next&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;将来的には、SvelteKit のさらに多くの領域を型安全にすることを検討したいと思っています — 例えばリンクは、HTML の中や、プログラム的に &lt;code&gt;goto&lt;/code&gt; を呼び出していますよね。&lt;/p&gt;
&lt;p&gt;TypeScript は JavaScript の世界を席巻しています — 私たちはそれに夢中です！ 私たちは SvelteKit のファーストクラスの型安全性に深く取り組んでおり、TypeScript を使用するか JSDoc で型付けされた JavaScript を使用するかに関わらず、より大規模な Svelte コードベースにも美しくスケールすることができる、できる限り開発体験をスムーズにするツールを提供します。&lt;/p&gt;</description><pubDate>Thu, 09 Mar 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2023年3月</title><link>https://svelte.dev/blog/whats-new-in-svelte-march-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;1.0 ローンチ後、SvelteKit にエッセンシャルな機能が多く追加されたため、ホットな3月になっています。詳細は&lt;a href=&quot;/blog/streaming-snapshots-sveltekit&quot;&gt;先週のブログ記事&lt;/a&gt;をチェックしてみてください。&lt;/p&gt;
&lt;p&gt;Svelte Society は先月、$12,000 以上の賞金がかかっている &lt;a href=&quot;https://hack.sveltesociety.dev/&quot;&gt;SvelteHack&lt;/a&gt; を立ち上げました - 新旧すべての Svelte デベロッパーたちに、何か素晴らしいものを作ってもらえるよう呼びかけています。期限は4月17日！&lt;/p&gt;
&lt;p&gt;そして、まだご存知でない方もいらっしゃるかもしれませんが、次回の Svelte Summit が開催する予定です！ &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;SvelteSummit.com&lt;/a&gt; にアクセスして、ニュースレターに登録するとイベントの最新情報を受け取ることができます📬&lt;/p&gt;
&lt;p&gt;それでは今月の最新情報を見ていきましょう…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$app/paths&lt;/code&gt; can now be used without an app - making things like component testing with Vitest, using Storybook, etc. easier (&lt;strong&gt;1.4.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8838&quot;&gt;#8838&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Adapters can now be configured at the route level (&lt;strong&gt;1.5.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/page-options#config&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8740&quot;&gt;#8740&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new snapshot mechanism preserves ephemeral DOM state even after navigation and page reloads (&lt;strong&gt;1.5.0&lt;/strong&gt;,&lt;a href=&quot;/docs/kit/snapshots&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8710&quot;&gt;#8710&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OPTIONS&lt;/code&gt; are now available within the server method (&lt;strong&gt;1.6.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/routing#server&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8731&quot;&gt;#8731&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Richer error messages have been added for invalid exports (&lt;strong&gt;1.7.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9055&quot;&gt;#9055&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Streaming promises are now available for server load functions (&lt;strong&gt;1.8.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/load#Streaming-with-promises&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8901&quot;&gt;#8901&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new configuration option, &lt;code&gt;preloadStrategy&lt;/code&gt;, helps tune preloading to avoid import &amp;lsquo;waterfalls&amp;rsquo; on certain browsers (&lt;strong&gt;1.8.4&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/configuration#output&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9179&quot;&gt;#9179&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;paths.relative&lt;/code&gt; option can control interpretation of &lt;code&gt;paths.assets&lt;/code&gt; and &lt;code&gt;paths.base&lt;/code&gt; (&lt;strong&gt;1.9.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/configuration#paths&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/9220&quot;&gt;#9220&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;svelte.dev&lt;/code&gt; の REPL が、&lt;code&gt;package.json&lt;/code&gt; の &lt;code&gt;exports&lt;/code&gt; フィールドをサポートしました (&lt;a href=&quot;https://github.com/sveltejs/sites/pull/445&quot;&gt;#445&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;新たな呼び出し階層(Call Hierarchy)機能により、どこの関数やクラスが呼び出されたのか確認し、コールスタックをたどることができるようになりました (&lt;strong&gt;extensions-107.1.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1889&quot;&gt;#1889&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;declarationMap&lt;/code&gt; のサポートが Svelte extension に追加されました。ライブラリに declaration map がある場合、&lt;code&gt;.svelte&lt;/code&gt; ファイル上で &amp;ldquo;go to definition&amp;rdquo; を押すとソースコードに移動します (&lt;strong&gt;extensions-107.1.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1878&quot;&gt;#1878&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/typescript/typescript-editing#_inlay-hints&quot;&gt;TypeScript Inlay Hints&lt;/a&gt; のサポートが Svelte Extension で使えるようになりました。&lt;code&gt;javascript.inlayHints.*&lt;/code&gt; や &lt;code&gt;typescript.inlayHints.*&lt;/code&gt; で有効化してください (&lt;strong&gt;extensions-107.1.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1855&quot;&gt;#1855&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;*Svelte コンパイラに対する全ての変更については、まだ未リリースの変更も含め、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;  をご確認ください。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ducbao414/win32.run&quot;&gt;win32.run&lt;/a&gt; is a version of Windows XP in the browser - with a File System, programs, XP-style File Picker and Saver dialogs, 3rd-party programs, and more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tglide/svelte-radial-menu&quot;&gt;Svelte Radial Menu&lt;/a&gt; is a radial menu experiment - based on &lt;a href=&quot;https://rauno.me/craft/radial-menu&quot;&gt;Rauno&amp;rsquo;s radial menu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/brycedorn/apod-color-search&quot;&gt;apod color search&lt;/a&gt; lets you search for astronomy picture of the day (APO) photos by color&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/10pvqfm/svhighlight_a_code_highlighter_for_sveltekit_and/&quot;&gt;SvHighlight&lt;/a&gt; is a code highlighter for SvelteKit and TailwindCSS with blur and focus blocks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://limey.io/&quot;&gt;Limey&lt;/a&gt; lets you create beautiful one-page websites in minutes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://a-links.io/&quot;&gt;a/links&lt;/a&gt; is an extension for short, composable bookmarks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sprint.cards&quot;&gt;Sprint Cards&lt;/a&gt; is a design challenge generator&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rossrobino/plought&quot;&gt;Plought&lt;/a&gt; is a tool to reduce noise in decision making&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/IzK-ArcOS/ArcOS-Frontend&quot;&gt;ArcOS-Frontend&lt;/a&gt; is a rewrite of the Arc operating system&amp;rsquo;s frontend in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://poxi.page&quot;&gt;Poxi&lt;/a&gt; is powering the user-made web with a drag-and-drop, drawable website editor that&amp;rsquo;s easy to collaborate in&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/a_warnes/status/1629235313808744449&quot;&gt;demo-threlte-scroller-rocinante&lt;/a&gt; is a &amp;ldquo;scrolly telling&amp;rdquo; proof-of-concept that combines svelte-sequence with Threlte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.phonicsandstuff.com/&quot;&gt;Phonics + Stuff&lt;/a&gt; is a set of resources for learning &amp;amp; teaching phonics&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/streaming-snapshots-sveltekit&quot;&gt;Streaming, snapshots, and other new features since SvelteKit 1.0&lt;/a&gt; by Geoff Rich (on the Svelte Blog)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/view-transition-experiments/&quot;&gt;View Transition Experiments with Svelte&lt;/a&gt; and &lt;a href=&quot;https://geoffrich.net/posts/page-transitions-1/&quot;&gt;Native Page Transitions in SvelteKit (updated for 2023)&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/ron-aus-story-and-how-to-be-whimsical&quot;&gt;Ron Au&amp;rsquo;s story and how to be whimsical!&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://podrocket.logrocket.com/sveltekit&quot;&gt;SvelteKit 1.0 with Rich Harris&lt;/a&gt; by PodRocket&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/SvelteAfrica/status/1620526757593116672?s=20&quot;&gt;Svelte Society Africa&lt;/a&gt; has formally launched!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CiOigf4FbNg&quot;&gt;SvelteKit overview with Simon and Dominik&lt;/a&gt; by Frontend RheinMain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch or Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://workshops.thisdot.co/learn/developing-with-sveltekit&quot;&gt;Delightful Web Development with SvelteKit&lt;/a&gt; is a workshop from This Dot Labs - taking place on April 13th.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9UpaKEVuErs&quot;&gt;Have More Control Over Layouts With Group Layouts In SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=Kzrz7GZ9pIg&quot;&gt;Learn SvelteKit Hooks Through 6 Examples&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qI4-q7SA7uM&quot;&gt;Svelte Kit Creating Popup Modals with Tailwind CSS&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=QqoYrdzoSSk&quot;&gt;SvelteKit: Creating Dynamic Tables with Tailwind CSS&lt;/a&gt; by Abdul Rehman 2050&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/volarjs/svelte-language-tools&quot;&gt;Svelte Language Server Example&lt;/a&gt; by VolarJS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.flotes.app/posts/flotes-2x-faster&quot;&gt;How I Made My App 2.4x Faster Switching to Svelte&lt;/a&gt; by Erik Verduin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.philkruft.dev/blog/smooth-page-transitions-with-sveltekit/&quot;&gt;Smooth Page Transitions with SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.philkruft.dev/blog/how-to-build-a-static-sveltekit-site/&quot;&gt;How to Build a Static SvelteKit Site&lt;/a&gt; by Phil Kruft&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ionic.io/blog/pwas-using-sveltekit-and-ionic&quot;&gt;Blazing fast PWAs with SEO power using SvelteKit and Ionic&lt;/a&gt; by Tommertom&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learnjavascripts.com/development/web-development/frameworks/svelte/svelte-stores-tutorial-share-data-between-multiple-components/&quot;&gt;Svelte Stores Tutorial: Share Data Between Multiple Components&lt;/a&gt; by Vincent Widerberg&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elliscs.hashnode.dev/a-business-case-for-sveltekit&quot;&gt;A Business Case for SvelteKit&lt;/a&gt; by Chris Ellis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inow.dev/how-to-set-up-a-new-svelte-project-with-sveltekit/&quot;&gt;How to set up a new Svelte project with SvelteKit&lt;/a&gt; by Igor Nowosad&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://raqueebuddinaziz.com/blog/svelte-type-events-slots-and-props/&quot;&gt;How to type Events, Slots, and Props in Svelte&lt;/a&gt; by Raqueebuddin Aziz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.robino.dev/posts/supabase-sveltekit&quot;&gt;Use TypeScript with SvelteKit and Supabase&lt;/a&gt; by Ross Robino&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/rajasegar/invoking-svelte-components-from-your-ember-apps-58h5&quot;&gt;Invoking Svelte components from your Ember apps&lt;/a&gt; by Rajasegar Chandran&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.okupter.com/blog/sitemap-server-side-rendered-sveltekit-website&quot;&gt;Add a sitemap to your server-rendered SvelteKit website&lt;/a&gt; and &lt;a href=&quot;https://www.okupter.com/blog/state-in-url-the-sveltekit-approach&quot;&gt;State in URL: the SvelteKit approach&lt;/a&gt; by Justin Ahinon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@Heesel/display-crypto-data-real-time-in-a-chart-using-sveltekit-chart-js-coincap-io-70b90d3aac90&quot;&gt;Display crypto data real-time in a chart using Sveltekit, Chart.js &amp;amp; coincap.io&lt;/a&gt; by Hessel&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;UI Kits and Components&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pink.appwrite.io/&quot;&gt;Pink&lt;/a&gt; is a framework agnostic design system from Appwrite&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/arabisaldrin/quick-pick&quot;&gt;quick-pick&lt;/a&gt; is a simple search tool where you control the search catalog&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/grail-ui/grail-ui&quot;&gt;Grail UI&lt;/a&gt; offers a set of component primitives, actions and utilities that help you build accessible and high quality Svelte applications faster, while providing a great developer experience&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-image-comparison&quot;&gt;svelte-image-comparison&lt;/a&gt; is a Svelte component to compare image or canvas elements&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/simple-font-select&quot;&gt;simple-font-select&lt;/a&gt; is a simple font select component that exposes all local fonts as CSS font families&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-datatables-net&quot;&gt;svelte-datatables-net&lt;/a&gt; is a Svelte component that turns data into an interactive HTML table&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Parazeya/svelte-flextable&quot;&gt;svelte-flextable&lt;/a&gt; is a toolkit for creating server-side processing datatable components with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/aymeric-giraudet/svelte-algolia-instantsearch&quot;&gt;svelte-algolia-instantsearch&lt;/a&gt; is a community-developed wrapper around &lt;a href=&quot;https://github.com/algolia/instantsearch&quot;&gt;instantsearch.js&lt;/a&gt; for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-deep-zoom&quot;&gt;svelte-deep-zoom&lt;/a&gt; is a Svelte component to render interactive Deep Zoom images (tiled image pyramids)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gibbu/svoast&quot;&gt;SVoast&lt;/a&gt; is a simple toast component for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/K4UNG/svelte-otp&quot;&gt;svelte-otp&lt;/a&gt; is a simple lightweight OTP input component for svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://trace-svelte.vercel.app/&quot;&gt;trace-svelte&lt;/a&gt; is a line by line highlighter for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/multiplehats/svelte-auth-ui&quot;&gt;Svelte Auth UI&lt;/a&gt; is a set of authentication components for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svelteness/kit-docs&quot;&gt;KitDocs&lt;/a&gt; is a documentation integration for SvelteKit - a VitePress alternative for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-signature-pad&quot;&gt;svelte-signature-pad&lt;/a&gt; is a Svelte action to capture smoothed signatures as SVG paths using the excellent &lt;a href=&quot;https://github.com/steveruizok/perfect-freehand&quot;&gt;perfect-freehand&lt;/a&gt; library&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Helpers, Stores and Actions&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/barvian/sveltekit-document&quot;&gt;SvelteKit-Document&lt;/a&gt; is a tiny utility for SvelteKit that lets you change the &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; tags from any page or layout - with full SSR support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stolinski/sk-form-data&quot;&gt;SvelteKit Form Data&lt;/a&gt; is an automatic SvelteKit form data parser middleware&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ciscoheat/sveltekit-superforms&quot;&gt;sveltekit-superforms&lt;/a&gt; supercharges your SvelteKit forms with a bunch of quality of life features. Purports to be a &amp;ldquo;powerhouse of a library&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/HoudiniGraphQL/houdini&quot;&gt;Houdini&lt;/a&gt; - the &amp;ldquo;disappearing&amp;rdquo; GraphQL client for the SvelteKit - is now 1.0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/semicognitive/sveltekit-modal-langchain&quot;&gt;sveltekit-modal-langchain&lt;/a&gt; is an example SvelteKit project using &lt;a href=&quot;https://github.com/semicognitive/sveltekit-modal&quot;&gt;sveltekit-modal&lt;/a&gt;, showing how easy it is to write Python endpoints in SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/mdsvex-excerpt&quot;&gt;mdsvex-excerpt&lt;/a&gt; allows you to show only a portion of document in certain layouts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-action-balancer&quot;&gt;Svelte Action Balancer&lt;/a&gt; is a simple Svelte action that makes titles more readable&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Refzlund/svelte-object&quot;&gt;svelte-object&lt;/a&gt; helps create and maintain objects using components. Values are stores and can therefore be intuitively subscribed to and updated&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-relative-time&quot;&gt;svelte-relative-time&lt;/a&gt; is a tiny Svelte action and component to render relative times&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-disable-preload&quot;&gt;svelte-disable-preload&lt;/a&gt; is a simple action to apply no-op event listeners to an element that prevent the document-level SvelteKit event handlers being invoked&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tlaundal/sveltekit-static-sitemap&quot;&gt;SvelteKit Static Sitemap&lt;/a&gt; generates a sitemap.xml for your page during build&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-intersection-observer-action&quot;&gt;svelte-intersection-observer-action&lt;/a&gt; is a Svelte action for element position notifications using IntersectionObserver&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AlexWarnes/svelte-sequence&quot;&gt;svelte-sequence&lt;/a&gt; provides custom stores to compose tweened motion sequences over multiple steps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vnphanquang/svelte-put/tree/main/packages/actions/inline-svg&quot;&gt;@svelte-put/inline-svg&lt;/a&gt; is a Svelte action for inlining dynamic SVGs (fetched from network)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Other cool tools&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/semicognitive/sveltekit-modal&quot;&gt;sveltekit-modal&lt;/a&gt; lets you write Python endpoints in SvelteKit using Modal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-kit-bot-block&quot;&gt;svelte-kit-bot-block&lt;/a&gt; is a server hook to handle spam requests with SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/carstenlebek/svelte-email&quot;&gt;Svelte Email&lt;/a&gt; lets you write and design email templates with Svelte and render them to HTML or plain text&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/inertiajs/inertia&quot;&gt;Inertia.js&lt;/a&gt; lets you quickly build modern single-page React, Vue and Svelte apps using classic server-side routing and controllers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gornostay25/svelte-adapter-bun&quot;&gt;svelte-adapter-bun&lt;/a&gt; is an adapter for SvelteKit apps that generates a standalone Bun server&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/frontline-hq/react-in-svelte&quot;&gt;React in Svelte&lt;/a&gt; is a library that enables you to use React components in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/etherCorps/SK-Redis-SessionManager&quot;&gt;SvelteKit Redis Session Manager&lt;/a&gt; is a Redis integration in SvelteKit for Session Management&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks for reading! Don&amp;rsquo;t forget to try your hand at the &lt;a href=&quot;https://hack.sveltesociety.dev/&quot;&gt;Svelte Hackathon&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Feel free to let us know if we missed anything on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 01 Mar 2023 00:00:00 GMT</pubDate></item><item><title>Streaming、snapshots、その他 SvelteKit 1.0 以降の新機能</title><link>https://svelte.dev/blog/streaming-snapshots-sveltekit</link><author>Geoff Rich, Rich Harris</author><description>&lt;p&gt;The Svelte team has been hard at work since the release of SvelteKit 1.0. Let’s talk about some of the major new features that have shipped since launch: &lt;a href=&quot;/docs/kit/load#Streaming-with-promises&quot;&gt;streaming non-essential data&lt;/a&gt;, &lt;a href=&quot;/docs/kit/snapshots&quot;&gt;snapshots&lt;/a&gt;, and &lt;a href=&quot;/docs/kit/page-options#config&quot;&gt;route-level config&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;Stream-non-essential-data-in-load-functions&quot;&gt;&lt;span&gt;Stream non-essential data in load functions&lt;/span&gt;&lt;a href=&quot;#Stream-non-essential-data-in-load-functions&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit uses &lt;a href=&quot;/docs/kit/load&quot;&gt;load functions&lt;/a&gt; to retrieve data for a given route. When navigating between pages, it first fetches the data, and then renders the page with the result. This could be a problem if some of the data for the page takes longer to load than others, especially if the data isn’t essential – the user won’t see any part of the new page until all the data is ready.&lt;/p&gt;
&lt;p&gt;これを回避する方法もありました。具体的には、コンポーネント自体で遅いデータを取得することができるので、まず &lt;code&gt;load&lt;/code&gt; で取得したデータでレンダリングし、そのあとで遅いデータの取得を開始します。しかしこれは理想的ではありませんでした: クライアントがレンダリングするまでデータの取得を開始しないため、データはさらに遅延しますし、SvelteKit の &lt;code&gt;load&lt;/code&gt; の規約を破ることにもなります。&lt;/p&gt;
&lt;p&gt;今回、SvelteKit 1.8 において、新たなソリューションを提供します: server load 関数からネストした promise を返すと、SvelteKit はそれが解決する前にページのレンダリングを開始します。ネストした promise は完了し次第、その結果がページに&lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/API/Streams_API&quot;&gt;ストリーミング&lt;/a&gt;されます。&lt;/p&gt;
&lt;p&gt;例えば、次の &lt;code&gt;load&lt;/code&gt; 関数について考えてみましょう:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;load&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageServerLoad&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;load&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageServerLoad&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;post&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;fetchPost&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;streamed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;comments&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;streamed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;comments&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;comments&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;fetchComments&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SvelteKit は自動的にこの &lt;code&gt;fetchPost&lt;/code&gt; の呼び出しを await してからページのレンダリングを開始します。なぜならそれがトップレベルだからです。しかし、ネストした &lt;code&gt;fetchComments&lt;/code&gt; の呼び出しが完了するのは待ちません – ページはレンダリングされ、&lt;code&gt;data.streamed.comments&lt;/code&gt; はリクエストが完了すると解決する promise となります。&lt;code&gt;+page.svelte&lt;/code&gt; で、Svelte の &lt;a href=&quot;/docs/svelte/await&quot;&gt;await block&lt;/a&gt; を使用してロード中の状態を表示することもできます:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ PageData }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./$types&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PageData&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;article&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.post}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;article&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{#&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;streamed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.comments}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Loading...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;then&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;ol&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{#&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;each&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;comment}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;{comment}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;each&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;ol&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この &lt;code&gt;streamed&lt;/code&gt; プロパティに特別なものはありません – この動作をトリガーするのに必要なのは、戻り値のオブジェクトのトップレベル以外の場所にある promise だけです。&lt;/p&gt;
&lt;p&gt;SvelteKit は、アプリのホスティングプラットフォームがストリーミングをサポートしている場合にのみ、レスポンスをストリーミングすることができます。一般的には、AWS Lambda を中心に構築されたプラットフォーム (例えば serverless functions) はストリーミングをサポートしていませんが、従来の Node.js サーバーや edge ベースのランタイムはサポートしています。プロバイダーのドキュメントで確認してみてください。&lt;/p&gt;
&lt;p&gt;プラットフォームがストリーミングをサポートしていない場合でも、データは利用可能です。その場合レスポンスはバッファリングされ、すべてのデータが取得されるまでページのレンダリングは開始されません。&lt;/p&gt;
&lt;h2 id=&quot;How-does-it-work&quot;&gt;&lt;span&gt;How does it work?&lt;/span&gt;&lt;a href=&quot;#How-does-it-work&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;データを server &lt;code&gt;load&lt;/code&gt; 関数からブラウザに送信するには、データを &lt;em&gt;シリアライズ&lt;/em&gt; する必要があります。SvelteKit は &lt;a href=&quot;https://github.com/Rich-Harris/devalue&quot;&gt;devalue&lt;/a&gt; というライブラリを使用しています。これは &lt;code&gt;JSON.stringify&lt;/code&gt; のようなものですが、より優れています — JSON では扱うことができない値 (例えば date や正規表現など) も扱うことができ、自身をその中に含むような (またはそのデータの中に何度も現れるような) オブジェクトもそのアイデンティティを破壊することなくシリアライズすることができ、そして &lt;a href=&quot;https://github.com/rich-harris/devalue#xss-mitigation&quot;&gt;XSS 脆弱性&lt;/a&gt; から保護することができます。&lt;/p&gt;
&lt;p&gt;ページをサーバーでレンダリングする際、promise を、&lt;em&gt;deferred(遅延)&lt;/em&gt; を作成する function call としてシリアライズするよう devalue に指示します。これは SvelteKit がページに追加するコードを簡略化したものです。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;deferreds&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;deferreds&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;MapConstructor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt; (&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;3&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;overloads)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;Map&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;module&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;window&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Window&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x26;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;typeof&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;globalThis&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/window&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;window&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;defer&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;id&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;PromiseConstructor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;executor&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;reject&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(reason&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Promise&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Creates a new Promise.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;span class=&quot;param&quot;&gt;executor&lt;/span&gt; A callback used to initialize the promise. This callback is passed two arguments:
a resolve callback used to resolve the promise with a value or the result of another promise,
and a reject callback used to reject the promise with a provided reason or error.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;Promise&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;fulfil&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;fulfil&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;reject&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(reason&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;reject&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;deferreds&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;deferreds&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.set&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(key: any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value: any): Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;set&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;id&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;fulfil&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;fulfil&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;reject&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(reason&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;reject&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;module&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;window&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Window&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x26;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;typeof&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;globalThis&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/window&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;window&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;resolve&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;id&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;data&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;error&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;



&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;deferred&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;deferred&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;deferreds&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;deferreds&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.get&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(key: any): any&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@returns&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;id&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;deferreds&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;deferreds&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.delete&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(key: any): boolean&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@returns&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;true if an element in the Map existed and has been removed, or false if the element does not exist.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;delete&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;id&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;error&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;deferred&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;deferred&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;reject&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;error&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;deferred&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;deferred&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;fulfil&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;data&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// devalue converts your data into a JavaScript expression&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;streamed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;comments&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;data&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;post&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;title&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;My cool blog post&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;content&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;...&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;streamed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;comments&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;streamed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;comments&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;comments&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;module&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;window&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Window&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x26;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;typeof&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;globalThis&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/window&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;window&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;defer&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコードは、サーバーレンダリングされた一部の HTML と一緒にブラウザにすぐに送信されますが、コネクションは開いたままになっています。その後、promise が解決すると、SvelteKit は追加の HTML チャンクをブラウザにプッシュします:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;html&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.resolve&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;[{ comment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;First!&#39;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;クライアントサイドナビゲーションの場合は、少し異なるメカニズムを使用します。サーバーからのデータは &lt;a href=&quot;https://dataprotocols.org/ndjson/&quot;&gt;newline delimited JSON&lt;/a&gt; としてシリアライズされ、SvelteKit は &lt;code&gt;devalue.parse&lt;/code&gt; で似たような遅延メカニズムを使用してその値を再構築します:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;json&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// this is generated immediately — note the [&quot;Promise&quot;,1]...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[{&quot;post&quot;:1,&quot;streamed&quot;:4},{&quot;title&quot;:2,&quot;content&quot;:3},&quot;My cool blog post&quot;,&quot;...&quot;,{&quot;comments&quot;:5},[&quot;Promise&quot;,6],1]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// ...then this chunk is sent to the browser once the promise resolves&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[{&quot;id&quot;:1,&quot;data&quot;:2},1,[3],{&quot;comment&quot;:4},&quot;First!&quot;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このように promise はネイティブにサポートされているため、&lt;code&gt;load&lt;/code&gt; から返されるデータのどこにでも置くことができます (トップレベルは除く。トップレベルは自動的に await するからです)。そして devalue がサポートするあらゆるタイプのデータを解決することができます — もちろんさらに多くの promise も！&lt;/p&gt;
&lt;p&gt;注意事項: この機能には JavaScript が必要です。そのため、重要でないデータのみ、ストリーミングすることを推奨します。すべてのユーザーがエクスペリエンスのコアを利用できるようにするためです。&lt;/p&gt;
&lt;p&gt;この機能の詳細については、&lt;a href=&quot;/docs/kit/load#Streaming-with-promises&quot;&gt;ドキュメント&lt;/a&gt;をご覧ください。デモは &lt;a href=&quot;https://sveltekit-on-the-edge.vercel.app/edge&quot;&gt;sveltekit-on-the-edge.vercel.app&lt;/a&gt; (ロケーションデータをわざと遅延させ、ストリーミングしています) でご覧頂けますし、&lt;a href=&quot;https://vercel.com/templates/svelte/sveltekit-edge-functions&quot;&gt;ご自身で Vercel にデプロイ&lt;/a&gt;することもできます。Vercel では Edge Functions と Serverless Functions のどちらもストリーミングをサポートしています。&lt;/p&gt;
&lt;p&gt;私たちは、Qwik、Remix、Solid、Marko、React などの、このアイデアの先行実装からインスピレーションを受けました。深く感謝します。&lt;/p&gt;
&lt;h2 id=&quot;Snapshots&quot;&gt;&lt;span&gt;Snapshots&lt;/span&gt;&lt;a href=&quot;#Snapshots&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以前までの SvelteKit アプリでは、フォームに入力を開始したあとで移動して、そのあと戻ってくるとフォームの state は復元されず、デフォルトの値でフォームが再作成されていました。場合によっては、ユーザーはフラストレーションが溜まるかもしれません。SvelteKit 1.5 以降は、これに対応するための方法が組み込まれています: それが snapshots です。&lt;/p&gt;
&lt;p&gt;現在、&lt;code&gt;+page.svelte&lt;/code&gt; や &lt;code&gt;+layout.svelte&lt;/code&gt; で &lt;code&gt;snapshot&lt;/code&gt; オブジェクトをエクスポートすることができます。このオブジェクトには、&lt;code&gt;capture&lt;/code&gt; と &lt;code&gt;restore&lt;/code&gt; という2つのメソッドがあります。&lt;code&gt;capture&lt;/code&gt; 関数は、ユーザーがページを離れたときにどの state を保存するかを定義します。SvelteKit はその state を現在の履歴エントリに関連付けます。ユーザがページに戻った場合は、以前に設定した state を引数に取って &lt;code&gt;restore&lt;/code&gt; 関数が呼び出されます。&lt;/p&gt;
&lt;p&gt;こちらは textarea の値を capture し、restore する方法の例です:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ Snapshot }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;./$types&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;comment&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;snapshot&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Snapshot&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;capture&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;comment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;restore&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(value)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(comment&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;form&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;method&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;POST&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;label&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;comment&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;Comment&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;label&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;textarea&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;comment&quot;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{comment} /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;Post comment&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;form&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;フォームの input の値やスクロールポジションなどは一般的な例で、JSON-serializable なデータならなんでも snapshot に保存することができます。snapshot のデータは &lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/API/Window/sessionStorage&quot;&gt;sessionStorage&lt;/a&gt; に保存されるので、ページがリロードされたときや、ユーザーがまったく別のサイトに移動したときにも保持されます。&lt;code&gt;sessionStorage&lt;/code&gt; に保存されるため、サーバーサイドレンダリング中にアクセスすることはできません。&lt;/p&gt;
&lt;p&gt;詳細は、&lt;a href=&quot;/docs/kit/snapshots&quot;&gt;ドキュメント&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;Route-level-deployment-configuration&quot;&gt;&lt;span&gt;Route-level deployment configuration&lt;/span&gt;&lt;a href=&quot;#Route-level-deployment-configuration&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit はプラットフォームごとに固有の &lt;a href=&quot;/docs/kit/adapters&quot;&gt;adapter&lt;/a&gt; を使用してプロダクションへのデプロイ用にアプリのコードを変換しています。これまでは、デプロイメントの設定をアプリ全体レベルで行わなければなりませんでした。例えば、アプリを edge function としてデプロイするか、serverless function としてデプロイするか、どちらか一方は可能でしたが、両方同時に行うことはできませんでした。これでは、アプリの一部だけを edge にするというメリットを得ることができません – もし Node API を必要とするルート(route)がある場合、アプリ全体を edge にデプロイすることができないのです。リージョンの選択やメモリ割り当てなど、デプロイ設定の他の側面についても同様です: アプリ全体、すべてのルート(route)に適用される1つの値を選択しなければならなかったのです。&lt;/p&gt;
&lt;p&gt;そしてこの度、&lt;code&gt;config&lt;/code&gt; オブジェクトを &lt;code&gt;+server.js&lt;/code&gt;、&lt;code&gt;+page(.server).js&lt;/code&gt;、&lt;code&gt;+layout(.server).js&lt;/code&gt; ファイルでエクスポートすることができるようになり、これらのルート(route)をどうやってデプロイするかコントロールできるようになりました。&lt;code&gt;+layout.js&lt;/code&gt; でこれを行うと、そのすべての子ページに設定が適用されます。&lt;code&gt;config&lt;/code&gt; の型は、デプロイ先の環境に依存するため、各 adapter ごとにユニークです。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Config&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;Config&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&lt;/span&gt;&lt;span class=&quot;twoslash-error&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;some-adapter&#39;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Config&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;config&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Config&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;Config&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;runtime&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;runtime&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;edge&#39;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Config はトップレベルでマージされるため、レイアウトで設定された値をツリーのさらに下のページで上書きすることができます。詳細は&lt;a href=&quot;/docs/kit/page-options#config&quot;&gt;ドキュメント&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;Vercel にデプロイする場合、最新バージョンの SvelteKit と adapter をインストールすることでこの機能のメリットを享受することができます。ルートレベル(route-level)の config をサポートする adapter は SvelteKit 1.5 以降が必要であるため、adapter のバージョンを大幅にアップグレードする必要があるかもしれません。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;@sveltejs/kit@latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;@sveltejs/adapter-auto@latest&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;# or @sveltejs/adapter-vercel@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;今現在は、&lt;a href=&quot;/docs/kit/adapter-vercel#Deployment-configuration&quot;&gt;Vercel adapter&lt;/a&gt; のみがルート固有(route-specific)の config を実装していますが、他のプラットフォーム向けでもこれを実装するためのビルディングブロックがあります。もしあなたが adapter の作者なら、&lt;a href=&quot;https://github.com/sveltejs/kit/pull/8740&quot;&gt;この PR&lt;/a&gt; の変更点を参照し、要求事項を確認してください。&lt;/p&gt;
&lt;h2 id=&quot;Incremental-static-regeneration-on-Vercel&quot;&gt;&lt;span&gt;Incremental static regeneration on Vercel&lt;/span&gt;&lt;a href=&quot;#Incremental-static-regeneration-on-Vercel&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ルートレベル(Route-level)の config では、もう1つ要望の多かった機能も使えるようになりました – Vercel にデプロイされる SvelteKit アプリで、&lt;a href=&quot;/docs/kit/adapter-vercel#Incremental-Static-Regeneration&quot;&gt;incremental static regeneration&lt;/a&gt; (ISR) が使用できるようになりました。ISR は、プリレンダリングされたコンテンツにおけるコストとパフォーマンスの優位性と、動的なレンダリングコンテンツの柔軟性の両方を提供します。&lt;/p&gt;
&lt;p&gt;ISR をルート(route)に追加するには、&lt;code&gt;config&lt;/code&gt; オブジェクトに &lt;code&gt;isr&lt;/code&gt; プロパティを追加します:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;isr&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;config&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;isr&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{}&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;isr&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// 必須のオプションについては Vercel adapter のドキュメントをご覧ください&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;And-much-more&quot;&gt;&lt;span&gt;And much more...&lt;/span&gt;&lt;a href=&quot;#And-much-more&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/routing#server&quot;&gt;OPTIONS method&lt;/a&gt; が &lt;code&gt;+server.js&lt;/code&gt; ファイルでサポートされました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/kit/pull/9055&quot;&gt;別のファイルに属するものをエクスポート&lt;/a&gt;したときや、+layout.svelte に&lt;a href=&quot;https://github.com/sveltejs/kit/pull/8475&quot;&gt;slot を置くのを忘れた&lt;/a&gt;ときのエラーメッセージが改善されました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/kit/project-structure#Project-files-src&quot;&gt;app.html でパブリックな環境変数にアクセス&lt;/a&gt;できるようになりました&lt;/li&gt;
&lt;li&gt;レスポンスを作成する新たな &lt;a href=&quot;/docs/kit/@sveltejs-kit#text&quot;&gt;text ヘルパー&lt;/a&gt;が追加されました&lt;/li&gt;
&lt;li&gt;そしてたくさんのバグフィックス – リリースノートの全文については&lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;changelog&lt;/a&gt;をご覧ください。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SvelteKit にコントリビュートしてくれた皆様、SvelteKit をプロジェクトで使ってくださっている皆様、ありがとうございます。以前にもお伝えしましたが、Svelte はコミュニティプロジェクトであり、皆様のフィードバックやコントリビューションがなくては成り立たないものです。&lt;/p&gt;</description><pubDate>Tue, 21 Feb 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2023年2月</title><link>https://svelte.dev/blog/whats-new-in-svelte-february-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;先月から、Svelte と SvelteKit のマイナーバージョンのリリースがあり、たくさんの教育コンテンツが 1.0 リリースをサポートし、そして &lt;a href=&quot;https://stateofjs.com&quot;&gt;State of JS survey&lt;/a&gt; の結果は…&lt;/p&gt;
&lt;p&gt;Svelte は今回も、満足度、興味、ともに上昇しました。投票してくださった皆さんに感謝します！&lt;/p&gt;
&lt;p&gt;それではアップデートを見てみましょう…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Work in the Svelte ecosystem this month has been focused on SvelteKit bug fixes and addressing feedback from the 1.0 launch. One of the more awaited &lt;a href=&quot;https://github.com/sveltejs/kit/issues/2958&quot;&gt;bug fixes to SvelteKit&amp;rsquo;s base path support&lt;/a&gt; landed, which means that you can now create SvelteKit projects on remote development environments. There have been several &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;new releases&lt;/a&gt; with these fixes as well as a handful of new features such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The submitter&amp;rsquo;s value will now be included automatically when progressively enhancing &lt;form method=&quot;get&quot;&gt; (&lt;strong&gt;1.0.3&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8273&quot;&gt;#8273&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Added an error in dev mode if global fetch is used with relative URL (&lt;strong&gt;1.0.8&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8370&quot;&gt;#8370&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A warning will now indicated that hydration may break if comments are removed from HTML (&lt;strong&gt;1.0.11&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8423&quot;&gt;#8423&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A warning will occur when of page options are used in &lt;code&gt;.svelte&lt;/code&gt; files or a missing &lt;code&gt;&amp;lt;slot /&amp;gt;&lt;/code&gt; in layout is detected (&lt;strong&gt;1.1.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8475&quot;&gt;#8475&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;text(...)&lt;/code&gt; helper makes it easy to generate text responses (&lt;strong&gt;1.2.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8371&quot;&gt;#8371&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The public env can now be accessed within app.html (&lt;strong&gt;1.2.0&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/project-structure#Project-files-src&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8449&quot;&gt;#8449&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;An error will now be thrown if cookie exceeds size limit (&lt;strong&gt;1.2.1&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8591&quot;&gt;#8591&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The generated &lt;code&gt;tsconfig&lt;/code&gt; can now be modified (&lt;strong&gt;1.3.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/8606&quot;&gt;#8606&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-and-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte and Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-and-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;VS Code HTML language service の &lt;code&gt;html.customData&lt;/code&gt; に対するサポートが追加されました (&lt;strong&gt;extensions-107.0.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1824&quot;&gt;#1824&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;インポートが必要な store のオートコンプリート (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1823&quot;&gt;#1823&lt;/a&gt;) と object/class メンバーのスニペット (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1817&quot;&gt;#1817&lt;/a&gt;) が Svelte extension に追加されました (&lt;strong&gt;extensions-107.0.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;関数の型の promise の検知が改善されました (&lt;strong&gt;Svelte 3.55.1&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/8162&quot;&gt;#8162&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;グローバルな &lt;code&gt;part&lt;/code&gt; 属性と &lt;code&gt;on:submit&lt;/code&gt; に、それぞれ不足している型とプロパティが追加されました (&lt;strong&gt;Svelte 3.55.1&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/8181&quot;&gt;#8181&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;多くのパフォーマンス改善とバグフィックス (&lt;strong&gt;Svelte 3.55.1&lt;/strong&gt;* and &lt;strong&gt;extensions-107.0.x&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;*Svelte コンパイラに対する全ての変更については、まだ未リリースの変更も含め、 &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;  をご確認ください。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://titowest.com/&quot;&gt;Titowest.com&lt;/a&gt; is a series of photographic films by the writer &amp;amp; photographer, Tito West&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ParthJadhav/verve&quot;&gt;Verve&lt;/a&gt; is a lightweight and blazingly fast launcher for accessing and opening applications, files and documents&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rtw.voyage/&quot;&gt;Round The World&lt;/a&gt; is an interactive guide to the travels of Andrew Carnegie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mlu-explain.github.io/linear-regression/&quot;&gt;Linear Regression&lt;/a&gt; is an interactive blog post visual introduction to (almost) everything you should know about linear regression&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flotes.app/&quot;&gt;Flotes&lt;/a&gt; is a free note taking app enhanced with flashcard features&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/open-nomie/nomie6-oss&quot;&gt;nomie&lt;/a&gt; is a Daily Journal for short attention spans&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nocode.gallery/&quot;&gt;nocode.gallery&lt;/a&gt; is a collection of stunning websites made with no code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://whomtofollow.com/&quot;&gt;Whom to Follow&lt;/a&gt; helps you find accounts you&amp;rsquo;ll love by searching the network of accounts you already follow&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hucancode/poker-simulator&quot;&gt;poker-simulator&lt;/a&gt; is a poker simulation and evaluation tool&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pixelicious.xyz/&quot;&gt;Pixelicious&lt;/a&gt; converts your images into pixel art&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://music.apple.com/us/browse&quot;&gt;Apple Music&lt;/a&gt; is now built with Svelte (&lt;a href=&quot;https://twitter.com/BrittneyPostma/status/1615381017300271104&quot;&gt;proof&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Featuring Svelte Contributors and Ambassadors&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-OMPfr56kXI&quot;&gt;SvelteKit | Rich Harris | ViteConf 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/gradio-with-pngwn&quot;&gt;Talking Gradio and AI with pngwn 🐧&lt;/a&gt; from Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/marvel-filter-state/&quot;&gt;Progressively enhancing the Marvel By Year filter&lt;/a&gt; and &lt;a href=&quot;https://geoffrich.net/posts/advent-of-sveltekit-2022/&quot;&gt;Advent of SvelteKit 2022: my favorite demos&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bookmarkbeat.substack.com/p/contributing-more-to-open-source&quot;&gt;EP 13: Contributing more to open source + a Svelte Newsletter showcase rewind ⏪&lt;/a&gt; by Dani Sandoval&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch or Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gUYBFDPZ5qk&quot;&gt;I built a $5 chat app with Pocketbase &amp;amp; Svelte. Will it scale?&lt;/a&gt; by Fireship&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=obmiLi3bhkQ&quot;&gt;The Comprehensive Introduction To SvelteKit&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=O0mNU0maItY&quot;&gt;What Svelte UI Library Should You Use?&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=7hXHbGj6iE0&quot;&gt;Learn Everything About SvelteKit Routing (Pages, Layout, Nested Routes)&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=jXtzWMhdI2U&quot;&gt;Progressive Enhancement in SvelteKit (use:enhance)&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=UbhhJWV3bmI&quot;&gt;Are Your Routes Actually Protected?&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=13v50nLh67Q&quot;&gt;10X Your SvelteKit Developer Experience in VSCode&lt;/a&gt; by Huntabyte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UbOaAtHWidc&quot;&gt;The easiest realtime app I’ve ever built&lt;/a&gt; by Beyond Fireship&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=lKdw_z9qmPU&quot;&gt;Angular developers can learn Svelte so fast...&lt;/a&gt; by Joshua Morony&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=AxPB3e-3yEM&quot;&gt;SvelteKit + PocketBase Integration: User Login and Registration&lt;/a&gt; by Jian Yuan Lee&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://topenddevs.com/podcasts/javascript-jabber/episodes/marvels-of-using-svelte-and-sveltekit-jsj-566&quot;&gt;Marvels Of Using Svelte and SvelteKit - JSJ 566&lt;/a&gt; with Tracey Lee and Adam L Barrett&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mainmatter.com/blog/2023/01/24/sveltekit-super-rentals/&quot;&gt;A practical first look at the Svelte framework&lt;/a&gt; by Daniel Beer&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/annaghi/xstate-svelte-workshop&quot;&gt;State Modeling in Svelte with XState&lt;/a&gt; is the port of the Frontend Masters React + XState workshop written in Svelte and built with SvelteKit!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stylifycss.com/blog/code-your-sveltekit-website-faster-with-stylify-css/&quot;&gt;🚀 Code your SvelteKit website faster with Stylify CSS&lt;/a&gt; by Stylify CSS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tomaszs2.medium.com/five-svelte-games-to-learn-how-to-code-f36ae6e58923&quot;&gt;🎮 Five Svelte Games To Learn How To Code&lt;/a&gt; by Tom Smykowski&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/devpunk/how-to-make-declarativecode-based-router-instead-of-file-based-router-in-sveltekit-2-3dd4&quot;&gt;How to make declarative (code-based) router instead of file-based router in SvelteKit&lt;/a&gt; by Dev Punk&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/0gust1/aa8c8b831428cdd7a5535e92cbf02f04&quot;&gt;How to import tailwindcss custom config in JS/TS parts of a SvelteKit app&lt;/a&gt; by 0gust1&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.okupter.com/blog/sveltekit-internals-load-function&quot;&gt;SvelteKit Internals: Load function&lt;/a&gt; and &lt;a href=&quot;https://www.okupter.com/blog/svelte-and-css&quot;&gt;Svelte and CSS&lt;/a&gt; by Justin Ahinon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.captaincodeman.com/internationalization-formatting-with-intl-ssr-sveltekit&quot;&gt;Internationalization Formatting with Intl + SSR + SvelteKit&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.encodeart.dev/typesafe-i18n-with-sveltekit&quot;&gt;Typesafe i18n with SvelteKit&lt;/a&gt; by Andreas Söderlund&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cerbos.dev/blog/authorization-in-your-sveltekit-app&quot;&gt;Authorization in your SvelteKit app&lt;/a&gt; by Adam Barrett&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@Heesel/validate-your-form-using-sveltekit-tailwindcss-felte-and-yup-ddc11cd04717&quot;&gt;Validate your form using Sveltekit, Tailwindcss, Felte and Yup&lt;/a&gt; by Hessel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://enehana.nohea.com/general/sveltekit-form-actions-bound-to-typescript-class-validation-yup-w-dynamic-array/&quot;&gt;SvelteKit Form Actions bound to TypeScript class + Validation (yup) w/dynamic array&lt;/a&gt; by Hekili Tech&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://philkruft.dev/blog/smooth-page-transitions-with-sveltekit/&quot;&gt;Smooth Page Transitions with SvelteKit&lt;/a&gt; by Phil Kruft&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/theether0/redis-integration-in-sveltekit-a-game-changer-for-session-management-84i&quot;&gt;Redis Integration in SvelteKit: A Game-Changer for Session Management&lt;/a&gt; by Shivam Meena&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewlester.net/blog/posts/sveltekit-and-github-pages&quot;&gt;SvelteKit and GitHub Pages&lt;/a&gt; by Andrew Lester&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@gentmitch/tailwind-sveltkit-in-2023-44c19d91c8fd&quot;&gt;Tailwind + Sveltekit in 2023&lt;/a&gt; by Mitch Gent&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learnjavascripts.com/development/web-development/frameworks/svelte/svelte-stores-tutorial-share-data-between-multiple-components/&quot;&gt;Svelte Stores Tutorial: Share Data Between Multiple Components&lt;/a&gt; by Vincent Widerberg&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltepress.site/&quot;&gt;Sveltepress&lt;/a&gt; is a simple, easy to use, content centered site build tool with the full power of SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-form-helper&quot;&gt;Svelte Form Helper&lt;/a&gt; is a lightweight helper for form validation with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Bastian/dapper-ui&quot;&gt;Dapper UI&lt;/a&gt; is a sleek and modern UI component library for Svelte, offering full TypeScript support and extensive documentation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sidharth-anand.github.io/teil-ui/&quot;&gt;TeilUI&lt;/a&gt; is a better way to build design systems with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.neodrag.dev/&quot;&gt;Neodrag&lt;/a&gt; is an SSR-friendly, multi-framework draggable library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelvet.io/&quot;&gt;Svelvet&lt;/a&gt;, a UI library for Svelte, is now 5.0 (read more &lt;a href=&quot;https://medium.com/@efergus1/svelvet-5-0-a-community-driven-update-cfcc93e7b7a7&quot;&gt;here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maciekgrzybek/svelte-inview&quot;&gt;Svelte Inview&lt;/a&gt; is a Svelte action that monitors an element enters or leaves the viewport/parent element&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/drbh/html2svelte&quot;&gt;html2svelte&lt;/a&gt; makes it easy to convert HTML to Svelte components in a snap&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;お読みいただきありがとうございます！見落としなどございましたら &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt; にてお気軽にお知らせください。&lt;/p&gt;</description><pubDate>Wed, 01 Feb 2023 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2023年1月</title><link>https://svelte.dev/blog/whats-new-in-svelte-january-2023</link><author>Dani Sandoval</author><description>&lt;p&gt;&lt;a href=&quot;/blog/announcing-sveltekit-1.0&quot;&gt;SvelteKit 1.0&lt;/a&gt; のリリースからちょうど2週間が経ちました！ もしまだなら、&lt;a href=&quot;https://www.youtube.com/watch?v=N4BRVkQVoMc&quot;&gt;livestream&lt;/a&gt;、&lt;a href=&quot;https://kit.svelte.jp/&quot;&gt;新しい web サイト&lt;/a&gt; をチェックし、SvelteKit の全機能を段階的に学ぶなら &lt;a href=&quot;/tutorial&quot;&gt;tutorial&lt;/a&gt; をチェックしてみてください。&lt;/p&gt;
&lt;p&gt;それでは詳細を見ていきましょう…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@sveltejs/kit&lt;/code&gt; 1.0 is out! All future releases will follow semver and changes will be listed as major/minor/patch in the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md#100&quot;&gt;CHANGELOG&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improved support for Storybook and Histoire (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7990&quot;&gt;#7990&lt;/a&gt;). Work is ongoing to fully support those tools (&lt;a href=&quot;https://github.com/storybookjs/storybook/pull/20239&quot;&gt;storybook#20239&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vitePreprocess&lt;/code&gt; is now the default preprocessor. Please see &lt;a href=&quot;/docs/kit/integrations#vitePreprocess&quot;&gt;the docs&lt;/a&gt; for differences between &lt;code&gt;vitePreprocess&lt;/code&gt; and &lt;code&gt;svelte-preprocess&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/8036&quot;&gt;#8036&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-changes:&quot;&gt;&lt;span&gt;Breaking changes:&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-changes:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Unknown exports (except when starting with an underscore) are no longer allowed from &lt;code&gt;+(layout|page)(.server)?.js&lt;/code&gt; and &lt;code&gt;+server.js&lt;/code&gt; files (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7878&quot;&gt;#7878&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__data.json&lt;/code&gt; is now stripped from URL (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7979&quot;&gt;#7979&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sveltekit()&lt;/code&gt; will now return a promise for an array of Vite plugins (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7994&quot;&gt;#7994&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new &lt;code&gt;embedded&lt;/code&gt; option, turned off by default, helps with link clicks when embedding SvelteKit (&lt;a href=&quot;/docs/kit/configuration&quot;&gt;docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7969&quot;&gt;#7969&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Automatic fallback generation has been replaced with &lt;code&gt;builder.generateFallback(fallback)&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/8013&quot;&gt;#8013&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;invalid()&lt;/code&gt; is now &lt;code&gt;fail()&lt;/code&gt; and &lt;code&gt;ValidationError&lt;/code&gt; is now &lt;code&gt;ActionFailure&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/8012&quot;&gt;#8012&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit will now throw an error on invalid load response (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/8003&quot;&gt;#8003&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit is now using Vite 4 and requires a Svelte &lt;code&gt;peerDependency&lt;/code&gt; of &lt;code&gt;^3.54.0&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7543&quot;&gt;#7543&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Shells are now prerendered when &lt;code&gt;ssr&lt;/code&gt; is false and &lt;code&gt;prerender&lt;/code&gt; is not false - ensure prerender is false when ssr is also false (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/8131&quot;&gt;#8131&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Warnings and errors about removed/changed APIs have been removed (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/8019&quot;&gt;#8019&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;options.direction&lt;/code&gt; 引数を、カスタムのトランジション関数に渡せるようになりました (&lt;strong&gt;3.54.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/3918&quot;&gt;#3918&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@const&lt;/code&gt; で宣言した関数から、変数を更新できるようになりました (&lt;strong&gt;3.54.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/7843&quot;&gt;#7843&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte/elements&lt;/code&gt; に、Svelte/HTML の型定義が追加されました (&lt;strong&gt;3.55.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/7649&quot;&gt;#7649&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte extension と language tools が要求するミニマムバージョンが新しくなりました:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node のバージョン は 16 になりました&lt;/li&gt;
&lt;li&gt;TypeScript のバージョンは 4.9 になりました&lt;/li&gt;
&lt;li&gt;Svelte のバージョンは 3.55 になりました&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下の機能がリリースされました:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;missing handler quick fix (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1731&quot;&gt;#1731&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add Svelte anchor missing attribute code action (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1730&quot;&gt;#1730&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;better commit characters handling (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1742&quot;&gt;#1742&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add &lt;code&gt;--preserveWatchOutput&lt;/code&gt; option (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1715&quot;&gt;#1715&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;enhance Quickfixes to include Svelte Stores (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1789&quot;&gt;#1789&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;only show SvelteKit files context menu in SvelteKit projects (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1771&quot;&gt;#1771&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;use the &lt;code&gt;satisfies&lt;/code&gt; operator if possible (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1770&quot;&gt;#1770&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Svelte コンパイラに対する全ての変更については、まだ未リリースの変更も含め、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; をご確認ください。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte.recipes/&quot;&gt;Svelte Recipes 🧑‍🍳&lt;/a&gt; provides code snippets for common data visualization problems&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.everythingsvelte.com/&quot;&gt;Everything Svelte&lt;/a&gt; is a new course teaching everything you need to know to build a modern web application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-timeline.vercel.app/&quot;&gt;CSS Timeline&lt;/a&gt; is a Timeline of the history and evolution of CSS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mikaelkristiansson/gitbar&quot;&gt;GitBar&lt;/a&gt; is a system tray app for showing your pull requested reviews&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.texturelab.xyz/&quot;&gt;Texture Lab&lt;/a&gt; generates instant textures for games from any text&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://totems-soclage.com/&quot;&gt;Totems&lt;/a&gt; is a studio creating custom-made stands and supports&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.peopletonotion.com/&quot;&gt;PeopletoNotion&lt;/a&gt; is a Chrome Extension that adds LinkedIn profiles to Notion in one click&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://deckdev.com/&quot;&gt;DeckDev&lt;/a&gt; is a deck builder for Magic: The Gathering&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.defaultshortcuts.com/&quot;&gt;Default Shortcuts&lt;/a&gt; is a tool for searching keyboard shortcuts across browsers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;From Svelte Society&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2ijSarsHfN0&quot;&gt;Svelte Society - London December 2022&lt;/a&gt; featuring two talks by Antony and Rich, respectively. Rich&amp;rsquo;s talk, &amp;ldquo;Mistakes were made&amp;rdquo; is a SvelteKit 1.0 retrospective.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/BrittneyPostma/status/1603402599742537729?s=20&amp;t=Lw08QNMpdEP1JZzMQGXLDA&quot;&gt;SvelteKit with Netlify Edge Functions&lt;/a&gt; by Brittney Postma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2OnJYCXJPK4&quot;&gt;Sirens Stream: Skeleton - A fully featured UI Toolkit&lt;/a&gt; with Chris Simmons and Brittney Postma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_0ijqV0DmNQ&quot;&gt;Sirens: SvelteKit for Enterprise&lt;/a&gt; - Lacey Pevey joins the Sirens to talk through using SvelteKit at the Enterprise level&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2OISk5-EHek&quot;&gt;Sirens: Form Actions&lt;/a&gt; - Kev joins the Sirens again to chat about Form actions in SvelteKit and create a new form for speaker submissions on SvelteSirens.dev&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uEJ-Rnm2yOE&quot;&gt;SvelteKit is my mistress&lt;/a&gt; by Fireship&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3KGKDgwIrkE&quot;&gt;Sveltekit 1.0 in under 3 minutes&lt;/a&gt; by Gui Bibeau&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=O0mNU0maItY&quot;&gt;What Svelte UI Library Should You Use?&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=iGVhzsTZSa8&quot;&gt;The Best Icon Library For Svelte (Iconify)&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://escape.tech/blog/sveltemails/&quot;&gt;Rendering emails with Svelte&lt;/a&gt; by Gautier Ben Aïm&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://javascript.plainenglish.io/now-that-react-js-is-dead-whats-the-next-big-thing-7fa72a36a69b&quot;&gt;Now That React is Dead, What’s the Next Big Thing?&lt;/a&gt; by Somnath Singh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.tiia.rocks/what-is-sveltekit-and-why-should-you-care&quot;&gt;What is SvelteKit? And Why Should You Care?&lt;/a&gt; by Tila&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jefmeijvis.com/post/006-sveltekit-api-endpoints&quot;&gt;Sveltekit API endpoints&lt;/a&gt; by Jef Meijvis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chartjs/Chart.js/discussions/10977&quot;&gt;Chart.js 4.0&lt;/a&gt; has been released, with updated Svelte support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pqina.nl/blog/svelte-media-query-store/&quot;&gt;Creating A Custom Svelte Media Query Store&lt;/a&gt; by Rik Schennink&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://konstaui.com/&quot;&gt;Konsta UI&lt;/a&gt; is a library of pixel perfect mobile UI components built with Tailwind CSS for React, Vue &amp;amp; Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/probablykasper/modal-svelte&quot;&gt;probablykasper/modal-svelte&lt;/a&gt; is a modal component for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://spacecruft.org/deepcrayon/scrolltron&quot;&gt;deepcrayon/scrolltron&lt;/a&gt; is a news ticker overlay for OBS Studio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jetbrains.com/webstorm/whatsnew/#:~:text=Update%20about%20Svelte%20support&quot;&gt;JetBrains WebStorm 2022.3&lt;/a&gt; now has built-in support for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/blog/announcing-sveltekit-auth&quot;&gt;NextAuth.js&lt;/a&gt; is now available for SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@macfja/sveltekit-cas&quot;&gt;SvelteKit CAS authentication&lt;/a&gt; is a set of functions to ease usage of a CAS/SSO in SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@macfja/sveltekit-session&quot;&gt;@macfja/sveltekit-session&lt;/a&gt; is an easy way to do session management for SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-plugins.github.io/tooltips/&quot;&gt;@svelte-plugins/tooltips&lt;/a&gt; is a basic tooltip component written in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/icflorescu/trpc-sveltekit&quot;&gt;tRPC-SvelteKit&lt;/a&gt; provides end-to-end typesafe APIs for your SvelteKit applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/akiarostami/sveltekit-tailwind-blog-starter&quot;&gt;SvelteKit Tailwind Blog Starter&lt;/a&gt; is an easily configurable and customizable blog starter for SvelteKit + Tailwind CSS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltekitstarter.com/&quot;&gt;Free Svelte Accelerators&lt;/a&gt; is a list of Svelte and Sveltekit open source code to jump start your project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ハッピーニューイヤー 🎆 見落としなどございましたら &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt; にてお知らせください。&lt;/p&gt;</description><pubDate>Sun, 01 Jan 2023 00:00:00 GMT</pubDate></item><item><title>SvelteKit 1.0 発表</title><link>https://svelte.dev/blog/announcing-sveltekit-1.0</link><author>The Svelte team</author><description>&lt;p&gt;2年間の開発を経て、&lt;a href=&quot;https://kit.svelte.jp&quot;&gt;SvelteKit&lt;/a&gt; はついに 1.0 に到達しました。今日現在において、SvelteKit はあらゆる形・サイズの Svelte アプリを構築する場合に推奨されます。&lt;/p&gt;
&lt;p&gt;このリリースを皆さんに共有できることがとても嬉しいです。Svelte コアチームと広いコミュニティによる何千時間もの作業の集大成であり、小さなプロジェクトに取り組む単独の開発者であれ、大きなチームの一員であれ、本番レベル(production-grade)の Web を構築するのに最も楽しい方法だと思います。&lt;/p&gt;
&lt;p&gt;To get started, run &lt;code&gt;npm create svelte@latest&lt;/code&gt;, and visit the &lt;a href=&quot;/docs/kit&quot;&gt;docs&lt;/a&gt; and (experimental!) &lt;a href=&quot;https://learn.svelte.dev&quot;&gt;interactive tutorial&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;max&quot;&gt;
&lt;figure style=&quot;max-width: 960px; margin: 0 auto&quot;&gt;
&lt;div style=&quot;height: 0; padding: 0 0 57.1% 0; position: relative; margin: 0 auto;&quot;&gt;
	&lt;iframe style=&quot;position: absolute; width: 100%; height: 100%; left: 0; top: 0; margin: 0;&quot; src=&quot;https://www.youtube-nocookie.com/embed/N4BRVkQVoMc&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;figcaption&gt;Svelte Radio Live: the Christmas special&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;h2 id=&quot;What-is-SvelteKit&quot;&gt;&lt;span&gt;What is SvelteKit?&lt;/span&gt;&lt;a href=&quot;#What-is-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit は web アプリケーションを開発するためのフレームワークで、そのパフォーマンスと使いやすさから &lt;a href=&quot;https://2021.stateofjs.com/en-US/libraries/front-end-frameworks/&quot;&gt;開発者から&lt;/a&gt; &lt;a href=&quot;https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-web-frameworks&quot;&gt;最も&lt;/a&gt; &lt;a href=&quot;https://twitter.com/Rich_Harris/status/1589675637195042817&quot;&gt;愛されている&lt;/a&gt; UI コンポーネントフレームワークである &lt;a href=&quot;https://svelte.jp&quot;&gt;Svelte&lt;/a&gt; 上に構築されています。
Svelte のようなコンポーネントフレームワークを使ったことがあれば、DOM を直接操作するより、こういったフレームワークを使用したほうがユーザーインターフェースの構築がずっと簡単になることをご存知でしょう。しかし、多くの疑問が残っています:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ソースコードの構造はどうすればいいですか?&lt;/li&gt;
&lt;li&gt;サーバーサイドレンダリングを追加するには?&lt;/li&gt;
&lt;li&gt;サーバーでもブラウザでも動作するルーティングを追加するには?&lt;/li&gt;
&lt;li&gt;クライアントサイドルーティングをアクセシブルにするには?&lt;/li&gt;
&lt;li&gt;データを取得(fetch)はどうすればいいですか?&lt;/li&gt;
&lt;li&gt;データを変更(mutate)するには?&lt;/li&gt;
&lt;li&gt;エラーを処理するには?&lt;/li&gt;
&lt;li&gt;プロダクション向けにビルドを最適化するには?&lt;/li&gt;
&lt;li&gt;環境変数を賢くセキュアに扱うには?&lt;/li&gt;
&lt;li&gt;CSP ヘッダーと CSRF 保護を追加するには?&lt;/li&gt;
&lt;li&gt;service worker を追加するには? 何をどうキャッシュさせられる?&lt;/li&gt;
&lt;li&gt;アプリケーションをデプロイするにはどんな準備を?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;アプリケーションフレームワークは、これらの質問に応えられるよう設計されています。SvelteKit は、大勢のベータテスター (その多くは SvelteKit をプロダクションで運用しています — その勇気に敬意を表するとともに、貴重なフィードバックに感謝しています) の現実世界のニーズと、&lt;a href=&quot;https://nextjs.org/&quot;&gt;Next.js&lt;/a&gt; や &lt;a href=&quot;https://remix.run/&quot;&gt;Remix&lt;/a&gt; を含む他のアプリケーションフレームワークから得たベストなアイデアを反映した設計になっています。&lt;/p&gt;
&lt;h2 id=&quot;How-is-it-different&quot;&gt;&lt;span&gt;How is it different?&lt;/span&gt;&lt;a href=&quot;#How-is-it-different&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Web 開発者にとって、魅力的な選択肢が多いという現在の状況は贅沢な悩みでしょう。前述のフレームワーク以外にも、&lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; や、&lt;a href=&quot;https://rubyonrails.org/&quot;&gt;Rails&lt;/a&gt;・&lt;a href=&quot;https://laravel.com/&quot;&gt;Laravel&lt;/a&gt; といったプロダクションでの実績があるフレームワーク、そして数多くの静的サイトジェネレーターがあります。全て素晴らしいツールなので、選ぶのが楽しいはずです。&lt;/p&gt;
&lt;p&gt;ただ、SvelteKit は一味違います:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;従来の ‘マルチページアプリ’、MPA フレームワークと違い、&lt;/strong&gt; 最初にサーバーレンダリングされたページをロードしたあとは、デフォルトでクライアントサイドナビゲーションになります。これにより、高速なページ遷移、ページ間での状態の永続化(例えばサイドバーのスクロールポジション)、より少ないデータ使用量などが可能となります。また、サードパーティースクリプト(例えば analytics)が各ページのロードのたびに再実行されることを防ぎます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;従来のサーバーフレームワークと違い、&lt;/strong&gt; 単一の言語を使用することができます。密結合した2つのアプリ (1つは HTML の生成、1つはクライアントサイドインタラクションの処理) を持つことはありません。SvelteKit は JavaScript が動作する場所ならどこでも実行できるので、従来の Node サーバーとして、あるいはエッジを含むサーバーレス関数を使ってアプリをデプロイすることができます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;静的サイトジェネレーターと違い、&lt;/strong&gt; パーソナライズされたデータまたは動的なデータを使用するアプリを構築することができます。しかも、パフォーマンスを犠牲にすることもありませんし、ページロード後にブラウザからデータを取得することによって発生するレイアウトシフトもありません。&lt;/p&gt;
&lt;p&gt;SvelteKit によって、柔軟性を得られます。多くのフレームワークでは、アプリを構築する正しい方法は1つであると仮定していますが、現実はもっと微妙です。例えば、静的ページのプリレンダリングは単なるお手軽な &lt;code&gt;cache-control&lt;/code&gt; ではありません — ビルド時のバリデーションや、エッジ関数がアクセスできないファイルシステムからのデータのレンダリングを可能にし、不安定なデータベースに対するヘッジとして機能します。全てのページにサーバーサイドレンダリングが必要だ、というのも正しくありません — 堅牢でハイパフォーマンスアプリと、優れた SEO を実現したいのであれば、それは正しいデフォルトですが、数え切れないほどの例外があります。&lt;/p&gt;
&lt;p&gt;SvelteKit アプリでは、これらの選択を必要なだけきめ細やかに行うことができます — 例えば、あなたが今見ているこのページはプリレンダリングされたものですが、&lt;a href=&quot;/repl&quot;&gt;REPL&lt;/a&gt; では動的なデータがレンダリングされています。この2つの挙動は、1行のコードで切り替えることができます。このようなアプローチで構築されたアプリを、私たちは ‘&lt;a href=&quot;https://www.youtube.com/watch?v=860d8usGC0o&quot;&gt;transitional apps&lt;/a&gt;’ と呼んでいます。&lt;/p&gt;
&lt;h2 id=&quot;What-can-I-use-with-SvelteKit&quot;&gt;&lt;span&gt;What can I use with SvelteKit?&lt;/span&gt;&lt;a href=&quot;#What-can-I-use-with-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit は高速なビルドツールである &lt;a href=&quot;https://ja.vitejs.dev/&quot;&gt;Vite&lt;/a&gt; を使用しているので、ホットモジュールリロード(hot module reloading)、TypeScript、その他開発者が必要とするものをすぐに利用することができます。Vite と Rollup の広大なエコシステムからプラグインをインストールすることで、他のツールのサポートを追加することができます。&lt;/p&gt;
&lt;p&gt;SvelteKit プロジェクトを作成するとき、&lt;a href=&quot;https://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt;、&lt;a href=&quot;https://eslint.org/&quot;&gt;ESLint&lt;/a&gt;、&lt;a href=&quot;https://prettier.io/&quot;&gt;Prettier&lt;/a&gt;、&lt;a href=&quot;https://playwright.dev/&quot;&gt;Playwright&lt;/a&gt; (for end-to-end browser tests)、&lt;a href=&quot;https://vitest.dev/&quot;&gt;Vitest&lt;/a&gt; (for unit tests) を追加するか選択できます。例えば、&lt;a href=&quot;https://tailwindcss.com/docs/guides/sveltekit&quot;&gt;Tailwind&lt;/a&gt; や &lt;a href=&quot;https://supabase.com/docs/guides/getting-started/tutorials/with-sveltekit&quot;&gt;Supabase&lt;/a&gt; など、多くのポピュラーなプロジェクトにはすでにインテグレーションガイドがあります。コンポーネントストーリー(component stories) には &lt;a href=&quot;https://github.com/storybookjs/storybook/blob/next/code/frameworks/sveltekit/README.md&quot;&gt;Storybook&lt;/a&gt; や &lt;a href=&quot;https://histoire.dev/guide/svelte3/getting-started.html&quot;&gt;Histoire&lt;/a&gt; を使用することができます。コミュニティがメンテナンスしている &lt;a href=&quot;https://github.com/svelte-add/svelte-add&quot;&gt;svelte-add&lt;/a&gt; を使用すれば、コマンド1つでどんどん増えているインテグレーションの数々を追加することができます。&lt;/p&gt;
&lt;p&gt;もちろん、&lt;a href=&quot;https://npmjs.com/&quot;&gt;npm&lt;/a&gt; が提供するものすべてにアクセスできます。(一部のパッケージは Node.js が必要なため、それを使う場合はデプロイ先が Node ベースのプラットフォームに限定されることにご注意ください。)&lt;/p&gt;
&lt;h2 id=&quot;Where-can-I-deploy-my-apps&quot;&gt;&lt;span&gt;Where can I deploy my apps?&lt;/span&gt;&lt;a href=&quot;#Where-can-I-deploy-my-apps&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;どこでも! SvelteKit CLI にはローカルにインストールされた Node.js が必要ですが、フレームワーク自体にはどんなプラットフォームにも依存しません。つまり、JavaScript が動作する場所であれば、どこにでもデプロイすることができます。&lt;/p&gt;
&lt;p&gt;This is made possible by &lt;a href=&quot;/docs/kit/adapters&quot;&gt;adapters&lt;/a&gt;. The default adapter, &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages/adapter-auto&quot;&gt;adapter-auto&lt;/a&gt;, provides zero-config support for Vercel, Netlify, Cloudflare Pages and Azure Static Web Apps, with more platforms coming in the future. Community-provided adapters add support for Deno, Bun, Firebase, App Engine, AWS Lambda and many others.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages/adapter-node&quot;&gt;adapter-node&lt;/a&gt; を使えばアプリを Node.js サーバーとしてデプロイすることもできます。&lt;/p&gt;
&lt;p&gt;アプリ全体がプリレンダリングに適している場合や、シングルページアプリ (SPA) である場合、&lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages/adapter-static&quot;&gt;adapter-static&lt;/a&gt; (これによって SvelteKit は静的サイトジェネレーターになります) を &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt; を含むあらゆる Web サーバー向けに使用することができます。&lt;/p&gt;
&lt;h2 id=&quot;Acknowledgements&quot;&gt;&lt;span&gt;Acknowledgements&lt;/span&gt;&lt;a href=&quot;#Acknowledgements&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;このリリースは、とても多くの人々のハードワークによって実現されました。何よりもまず最初に、洞察に満ちたフィードバックや大小様々な幾千ものコントリビュートをしてくれた Svelte コミュニティに感謝したいと思います。彼らのおかげで、私たちは誇りを持って、このプロジェクトを web 開発者の広いコミュニティに共有できるものにすることができました。&lt;/p&gt;
&lt;p&gt;また、&lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt; とコミュニティのアンバサダーにも感謝しています。&lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt; や &lt;a href=&quot;https://sveltesirens.dev/&quot;&gt;Svelte Sirens&lt;/a&gt; でイニシアチブを取り、オンラインでもオフラインでも、Svelte 開発者のために活気に満ちた友好的なスペースを作り上げてくれました。&lt;/p&gt;
&lt;p&gt;コンテンツクリエーターがとても多いので、漏れのないように名前を挙げることはできませんが、SvelteKit 周辺の講座をリリースしたり、教育コンテンツを制作してくださった皆様、ありがとうございました。&lt;/p&gt;
&lt;p&gt;2021年の初頭、Vite を採用したとき、私たちは Vite を採用した初めてのメジャーなアプリケーションフレームワークでした。当時はリスキーな賭けでしたが、その賭けが報われたことに今は感動しています。Vite は JavaScript の世界で向かうところ敵なしの勢力に成長し、そして Vite チームは本当に素晴らしい、親切なパートナーです。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://vercel.com&quot;&gt;Vercel&lt;/a&gt;、&lt;a href=&quot;https://netlify.app/&quot;&gt;Netlify&lt;/a&gt;、&lt;a href=&quot;https://www.cloudflare.com/&quot;&gt;Cloudflare&lt;/a&gt; それぞれのチームから素晴らしいサポートを受け、これらのプラットフォームへのデプロイメントをゼロコンフィグにすることができました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stackblitz.com/&quot;&gt;StackBlitz&lt;/a&gt; の友人たちは、私たちにとって初となる &lt;a href=&quot;https://blog.stackblitz.com/posts/introducing-webcontainers/&quot;&gt;WebContainer&lt;/a&gt; を使用したインタラクティブなチュートリアルである &lt;a href=&quot;https://learn.svelte.dev&quot;&gt;learn.svelte.dev&lt;/a&gt; (日本語版: &lt;a href=&quot;https://learn.svelte.jp&quot;&gt;learn.svelte.jp&lt;/a&gt;) を実現するために熱心に取り組んでくれました。&lt;/p&gt;
&lt;p&gt;最後に、このプロジェクトは資金支援者の方々がいなければ実現できなかったことをお伝えします。そこには、&lt;a href=&quot;https://opencollective.com/svelte&quot;&gt;Open Collective&lt;/a&gt; の数百名の支援者の方々、二人のコア開発者 (&lt;a href=&quot;https://bsky.app/profile/rich-harris.dev&quot;&gt;Rich&lt;/a&gt; と &lt;a href=&quot;https://bsky.app/profile/dummdidumm.bsky.social&quot;&gt;Simon&lt;/a&gt;) を雇用し、フルタイムで Svelte に取り組ませてくれた Vercel、その他様々な方法 (例えば &lt;a href=&quot;https://www.steph-dietz.com/&quot;&gt;Steph の&lt;/a&gt; &lt;a href=&quot;https://vercel.com/docs/beginner-sveltekit&quot;&gt;Beginner SvelteKit&lt;/a&gt; コースなど) でプロジェクトを支援してくれた方々も含まれます。&lt;/p&gt;
&lt;h2 id=&quot;Migrating&quot;&gt;&lt;span&gt;Migrating&lt;/span&gt;&lt;a href=&quot;#Migrating&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit のプレリリースバージョンで構築したアプリをお持ちの場合、1.0 にアップグレードする前に、プレリリースの最終バージョン — &lt;code&gt;@sveltejs/kit@1.0.0-next.588&lt;/code&gt; — にアップグレードすることをおすすめします。安定(stable)バージョンではプレリリースバージョン間の移行に使われていたエラーや警告が削除されているからです。特に、1.0.0-next-406 より古いバージョンを使用している場合は、&lt;a href=&quot;https://github.com/sveltejs/kit/discussions/5774&quot;&gt;このマイグレーションガイド&lt;/a&gt; を参照することをおすすめします。&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-next&quot;&gt;&lt;span&gt;What’s next?&lt;/span&gt;&lt;a href=&quot;#What&#39;s-next&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit 1.0 は始まりであり、終わりではありません。今日はプロダクションで使用する準備は整っていますが、まだ始まったばかりです。ロードマップには、ビルトインの i18n サポート、incremental static regeneration、デプロイメントリージョンとランタイムのきめ細やかなコントロール、イメージ最適化(image optimisation)、その他多くの改善があります。また、来年には Svelte 4 の取り組みを始める予定です — 詳細はまた今度。&lt;/p&gt;
&lt;p&gt;But don’t let us have the final word. Svelte is a community project, and many of our best ideas aren’t really ours at all — they’re yours. Subscribe to Svelte Society on &lt;a href=&quot;https://bsky.app/profile/sveltesociety.dev&quot;&gt;BlueSky&lt;/a&gt; and &lt;a href=&quot;https://youtube.com/sveltesociety&quot;&gt;YouTube&lt;/a&gt; to stay up to date, and join us in our &lt;a href=&quot;/chat&quot;&gt;Discord server&lt;/a&gt; and on &lt;a href=&quot;https://github.com/sveltejs&quot;&gt;GitHub&lt;/a&gt; to contribute back.&lt;/p&gt;
&lt;p&gt;あなたが作ったものを見るのが待ちきれません。&lt;/p&gt;</description><pubDate>Wed, 14 Dec 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年12月</title><link>https://svelte.dev/blog/whats-new-in-svelte-december-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;SvelteKit 1.0 はもう間近です！&lt;a href=&quot;https://github.com/sveltejs/kit/milestone/2&quot;&gt;マイルストーンにあるイシューの99%が完了したので&lt;/a&gt;、先月のたくさんの変更点をカバーしなければなりません…&lt;/p&gt;
&lt;p&gt;それでは参りましょう！&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Use the &lt;code&gt;willUnload&lt;/code&gt; property to find out if the navigation will result the app being unloaded (full page reload/closing/leaving to another page). (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/6813&quot;&gt;#6813&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__data.json&lt;/code&gt; requests now allows for caching while ensuring we cache matching responses for all invalidation scenarios (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7532&quot;&gt;#7532&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Linking to &lt;code&gt;&amp;lt;a name=&amp;quot;hash&amp;quot;&amp;gt;&lt;/code&gt; tags is now supported (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7596&quot;&gt;#7596&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Throwing redirects in the &lt;code&gt;handle&lt;/code&gt; hook is now supported (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7612&quot;&gt;#7612&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A fallback component will now be added automatically for layouts without one (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7619&quot;&gt;#7619&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;preload&lt;/code&gt; function within the &lt;code&gt;resolve&lt;/code&gt; hook determines what files should be added to the &lt;head&gt; tag to preload it (&lt;a href=&quot;/docs/kit/hooks#Server-hooks-handle&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4963&quot;&gt;#4963&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7704&quot;&gt;#7704&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;version&lt;/code&gt; is now available via &lt;code&gt;$app/environment&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7689&quot;&gt;#7689&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7694&quot;&gt;#7694&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;handleError&lt;/code&gt; can now return a promise (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7780&quot;&gt;#7780&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-changes:&quot;&gt;&lt;span&gt;Breaking changes:&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-changes:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;routeId&lt;/code&gt; が &lt;code&gt;route.id&lt;/code&gt; になりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7450&quot;&gt;#7450&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;beforeNavigate&lt;/code&gt; メソッドと &lt;code&gt;afterNavigate&lt;/code&gt; メソッドの &amp;lsquo;load&amp;rsquo; は &amp;lsquo;enter&amp;rsquo; に、&amp;rsquo;unload&amp;rsquo; は &amp;lsquo;leave&amp;rsquo; にリネームされました。外部へのナビゲーションの際に、&lt;code&gt;beforeNavigate&lt;/code&gt; は type &amp;lsquo;leave&amp;rsquo; を引数にとって一回だけ呼び出され、リダイレクトの際には実行されなくなりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7502&quot;&gt;#7502&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7529&quot;&gt;#7529&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7588&quot;&gt;#7588&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redirect&lt;/code&gt; ヘルパーは、リダイレクト時はステータスコードの 300-308 のみを許可し、&lt;code&gt;error&lt;/code&gt; ステータスコードの場合は 400-599 のみを許可するようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7767&quot;&gt;#7767&lt;/a&gt;) (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7615&quot;&gt;#7615&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7767&quot;&gt;#7767&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ルート(route)ディレクトリ名の特殊文字は、hex/unicode のエスケープシーケンスでエンコードされるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7644&quot;&gt;#7644&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;action data の(デ)シリアライズに devalue が使用されるようになりました - これは、&lt;code&gt;use:enhance&lt;/code&gt; を使わずに直接 action を fetch する方にとっては breaking change です (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7494&quot;&gt;#7494&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trailingSlash&lt;/code&gt; が configuration ではなく page option になりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7719&quot;&gt;#7719&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;クライアントサイドのルーターは、&lt;code&gt;%sveltekit.body%&lt;/code&gt; の外にあるリンクを無視するようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7766&quot;&gt;#7766&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prerendering&lt;/code&gt; は &lt;code&gt;building&lt;/code&gt; にリネームされ、&lt;code&gt;config.kit.prerender.enabled&lt;/code&gt; は削除されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7762&quot;&gt;#7762&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getStaticDirectory()&lt;/code&gt; は builder API から削除されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7809&quot;&gt;#7809&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;format&lt;/code&gt; オプションが &lt;code&gt;generateManifest(...)&lt;/code&gt; から削除されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7820&quot;&gt;#7820&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data-sveltekit-prefetch&lt;/code&gt; は &lt;code&gt;-preload-code&lt;/code&gt; と &lt;code&gt;-preload-data&lt;/code&gt; に置き換えられ、&lt;code&gt;prefetch&lt;/code&gt; は &lt;code&gt;preloadData&lt;/code&gt; になり、&lt;code&gt;prefetchRoutes&lt;/code&gt; は &lt;code&gt;preloadCode&lt;/code&gt; になりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7776&quot;&gt;#7776&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7776&quot;&gt;#7776&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SubmitFunction&lt;/code&gt; は &lt;code&gt;$app/forms&lt;/code&gt; から &lt;code&gt;@sveltejs/kit&lt;/code&gt; に移動しました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7003&quot;&gt;#7003&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;New-in-Svelte&quot;&gt;&lt;span&gt;New in Svelte&lt;/span&gt;&lt;a href=&quot;#New-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;css コンパイラオプションの &lt;code&gt;css: false&lt;/code&gt; と &lt;code&gt;css: true&lt;/code&gt; は、&lt;code&gt;&amp;#39;external&amp;#39; | &amp;#39;injected&amp;#39; | &amp;#39;none&amp;#39;&lt;/code&gt; 設定に置き換えられ、&lt;code&gt;ssr&lt;/code&gt; ビルド向けのコンパイルが高速化し、わかりやすさが改善されました (&lt;strong&gt;3.53.0&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Svelte compiler に対する全ての変更については、まだ未リリースの変更も含め、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; をご確認ください。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/appwrite/console&quot;&gt;Appwrite&amp;rsquo;s new console&lt;/a&gt; makes its secure backend server for web, mobile &amp;amp; Flutter developers available in the browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.repomagic.com/&quot;&gt;RepoMagic&lt;/a&gt; is a search and analytics tool for GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/containers/podman-desktop&quot;&gt;Podman Desktop&lt;/a&gt; is a graphical tool for developing on containers and Kubernetes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ballerine-io/ballerine&quot;&gt;Ballerine&lt;/a&gt; is a Know Your Customer (KYC) UX for any vertical or geography using modular building blocks, components, and 3rd party integrations&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Nico-Mayer/budget_pen&quot;&gt;Budget Pen&lt;/a&gt; is a Codepen-like browser code editor with Tailwind included&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SarcevicAntonio/doTogether&quot;&gt;doTogether&lt;/a&gt; helps you keep track of stuff you have get done via a List of recurring Tasks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.redditcollegeresults.com/&quot;&gt;Webscraped College Results&lt;/a&gt; is a collection of visualizations for data from r/collegeresults&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://letspremortem.com/&quot;&gt;Let&amp;rsquo;s premortem&lt;/a&gt; helps avoid lengthy, frustrating post-mortems after a project fails&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://beta.blkmarket.com/&quot;&gt;BLKMARKET.COM&lt;/a&gt; is an illustration library for commercial and personal use&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sigilspace.com/&quot;&gt;Sigil&lt;/a&gt; is a canvas for anything with spaces organized by the most-voted content&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ryanatkn/corpus-activity-streams&quot;&gt;corpus-activity-streams&lt;/a&gt; is an unofficial ActivityStreams 2.0 vocabulary data set and alternative docs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Andrea055/nodeMyAdmin&quot;&gt;nodeMyAdmin&lt;/a&gt; is an alternative to phpMyAdmin written with SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thread-bare.com/convert&quot;&gt;Image to Pattern Conversion&lt;/a&gt; is a cross-stitch pattern conversion tool with &lt;a href=&quot;https://www.thread-bare.com/store&quot;&gt;a list of pre-made patterns&lt;/a&gt; to start with&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://verbums.vdoc.dev/&quot;&gt;Verbums&lt;/a&gt; is an English vocabulary trainer to improve language comprehension&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svgps.app/&quot;&gt;SVGPS&lt;/a&gt; removes the burden of working with a cluster of SVG files by converting your icons into a single JSON file&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://photon-alexwarnes.vercel.app/showcase/asteroids&quot;&gt;This 3D retro-themed asteroid shooter&lt;/a&gt; was made with threlte&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;To Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/catching-up&quot;&gt;Catching up after Svelte Summit&lt;/a&gt; and &lt;a href=&quot;https://www.svelteradio.com/episodes/3d-webgl-and-ai&quot;&gt;3D, WebGL and AI&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=t-LKRrNedps&quot;&gt;Domenik Reitzner - The easy way, an introduction to Sveltekit&lt;/a&gt; from Svelte Society Vienna&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2OISk5-EHek&quot;&gt;Sirens: Form Actions&lt;/a&gt; - Kev joins the Sirens again to chat about Form actions in SvelteKit and create a new form for speaker submissions on SvelteSirens.dev&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=89LYeHOncVk&quot;&gt;Introduction To 3D With Svelte (Threlte)&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=jHSwChkx3TQ&quot;&gt;How To Use Global Styles In SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=6pv70d7i-3Q&quot;&gt;Progressive Form Enhancement With SvelteKit&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/tic-tac-toe/&quot;&gt;Building tic-tac-toe with Svelte&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.captaincodeman.com/speed-up-sveltekit-pages-with-a-redis-cache&quot;&gt;Speed up SvelteKit Pages With a Redis Cache&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.okupter.com/blog/environment-variables-in-sveltekit&quot;&gt;Understanding environment variables in SvelteKit&lt;/a&gt;, &lt;a href=&quot;https://www.okupter.com/blog/sveltekit-form-validation-with-zod&quot;&gt;Form validation with SvelteKit and Zod&lt;/a&gt; and &lt;a href=&quot;https://www.okupter.com/blog/build-a-sveltekit-application-with-docker&quot;&gt;Build a SvelteKit application with Docker&lt;/a&gt; by Justin Ahinon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/igrep/why-i-failed-to-create-the-solidjss-store-for-svelte-and-announcing-svelte-store-tree-v031-1am2&quot;&gt;Why I failed to create the &amp;ldquo;Solid.js&amp;rsquo;s store&amp;rdquo; for Svelte, and announcing svelte-store-tree v0.3.1&lt;/a&gt; by YAMAMOTO Yuji&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sarcevic.dev/offline-first-installable-pwa-sveltekit-workbox-precaching&quot;&gt;Create an offline-first and installable PWA with SvelteKit and workbox-precaching&lt;/a&gt; by Antonio Sarcevic&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.skeleton.dev/&quot;&gt;Skeleton&lt;/a&gt; is a UI toolkit to build fast and reactive web interfaces using Svelte + Tailwind CSS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/luluvia/svelte-svg-spinners&quot;&gt;svelte-svg-spinners&lt;/a&gt; is a collection of SVG Spinners components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/fedorovvvv/svelte-floating-ui&quot;&gt;Svelte Floating UI&lt;/a&gt; enables floating UIs with actions - no wrapper components or component bindings required&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/micha-lmxt/at-html&quot;&gt;at-html&lt;/a&gt; lets you use &lt;code&gt;{@html }&lt;/code&gt; tags with slots in Svelte apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PatrickG/html-svelte-parser&quot;&gt;html-svelte-parser&lt;/a&gt; is a HTML to Svelte parser that works on both the server (Node.js) and the client (browser)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rohitpotato/svelte-switcher&quot;&gt;svelte-switcher&lt;/a&gt; is a fully customisable, touch-friendly, accessible and tiny toggle component&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@svackages/sveltkit-hook-html-minifier&quot;&gt;sveltkit-hook-html-minifier&lt;/a&gt; is a hook that wrapps &lt;code&gt;html-minifier&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@svackages/sveltekit-hook-redirect&quot;&gt;sveltekit-hook-redirect&lt;/a&gt; is a hook that makes redirects easy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/harshmangalam/sveltekit-video-meet&quot;&gt;sveltekit-video-meet&lt;/a&gt; is a video calling web app built with SvelteKit and SocketIO&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-colourpicker&quot;&gt;svelte-colourpicker&lt;/a&gt; is a lightweight opinionated colour picker component for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://captaincodeman.github.io/svelte-headlessui/&quot;&gt;Svelte-HeadlessUI&lt;/a&gt; is an unofficial implementation of Tailwind HeadlessUI for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/binsarjr/svelte-lazyimage-cache&quot;&gt;svelte-lazyimage-cache&lt;/a&gt; is a Lazy Image component with IntersectionObserver and cache action&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/ywit18/threlte_v50_is_here_a_completely_new_developer/&quot;&gt;threlte v5.0&lt;/a&gt; is a completely new developer experience that is faster, more powerful, and incredibly flexible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今月はこれでおしまいです！見落としなどございましたら &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt; にてお知らせください。&lt;/p&gt;
&lt;p&gt;それではまた来年 🎆&lt;/p&gt;</description><pubDate>Thu, 01 Dec 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年11月</title><link>https://svelte.dev/blog/whats-new-in-svelte-november-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;10月は Svelte コミュニティにとって忙しい月でした。SvelteKit では &lt;code&gt;use:enhance&lt;/code&gt; と 高度なルート(Advanced Routes) が大きく改善され、Svelte コンパイラは日々の開発体験が改善されたマイナーバージョンがリリースされました。&lt;/p&gt;
&lt;p&gt;そして &lt;em&gt;巨大な&lt;/em&gt; ショーケースもカバーしなければ… それでは参りましょう！&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The new &lt;code&gt;update&lt;/code&gt; method for &lt;code&gt;use:enhance&lt;/code&gt; lets you easily get back the default form behavior while augmenting it with your own logic (&lt;a href=&quot;/docs/kit/form-actions#Progressive-enhancement-use:enhance&quot;&gt;docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7083&quot;&gt;#7083&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7326&quot;&gt;#7326&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[[optional]]&lt;/code&gt; parameters are now available for routing (&lt;a href=&quot;/docs/kit/advanced-routing#Optional-parameters&quot;&gt;docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7051&quot;&gt;#7051&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;goto&lt;/code&gt; now has &lt;code&gt;invalidateAll&lt;/code&gt; to (re-)run all &lt;code&gt;load&lt;/code&gt; functions belonging to the new active page (&lt;a href=&quot;/docs/kit/$app-navigation#goto&quot;&gt;docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7407&quot;&gt;#7407&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config.kit.paths.base&lt;/code&gt; is now used in adapters looking for static assets - fixing 404 issues across &lt;code&gt;adapter-netlify&lt;/code&gt;, &lt;code&gt;adapter-vercel&lt;/code&gt;, &lt;code&gt;adapter-cloudflare&lt;/code&gt;, and &lt;code&gt;adapter-cloudflare-workers&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4448&quot;&gt;#4448&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-changes:&quot;&gt;&lt;span&gt;Breaking changes:&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-changes:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;ルート(routes)がコンフリクトしたとき、エラーがスローされるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7051&quot;&gt;#7051&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;プリレンダリング時の、グローバルな &lt;code&gt;fetch&lt;/code&gt; オーバーライドが削除されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7318&quot;&gt;#7318&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Route ID の先頭に &lt;code&gt;/&lt;/code&gt; が付与されるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/7338&quot;&gt;#7338&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Svelte-changes&quot;&gt;&lt;span&gt;Svelte changes&lt;/span&gt;&lt;a href=&quot;#Svelte-changes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;New accessibility warnings, &lt;code&gt;a11y-click-events-have-key-events&lt;/code&gt; and &lt;code&gt;a11y-no-noninteractive-tabindex&lt;/code&gt;, will now warn when your components lack required key events or tabindex. While &lt;code&gt;a11y-role-has-required-aria-props&lt;/code&gt; will no longer warn when elements match their semantic role (&lt;strong&gt;3.51.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--style-props&lt;/code&gt; are now supported on &lt;code&gt;&amp;lt;svelte:component&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt; (&lt;strong&gt;3.51.0&lt;/strong&gt;, Component Example: &lt;a href=&quot;/playground/48984f20503f4959b70f24f4130d164b?version=3.47.0&quot;&gt;Before&lt;/a&gt; and &lt;a href=&quot;/playground/48984f20503f4959b70f24f4130d164b?version=3.51.0&quot;&gt;After&lt;/a&gt;, SVG Example: &lt;a href=&quot;/playground/b7a3f94255914044b35462234ccaea43?version=3.50.0&quot;&gt;Before&lt;/a&gt; and &lt;a href=&quot;/playground/b7a3f94255914044b35462234ccaea43?version=3.51.0&quot;&gt;After&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;nullish&amp;rdquo; values for component event handlers are now supported (&lt;strong&gt;3.51.0&lt;/strong&gt;, &lt;a href=&quot;/playground/9228022922af4c76af68ce42349ccbf9?version=3.51.0&quot;&gt;Example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Scoped styles can now be applied to &lt;code&gt;&amp;lt;svelte:element&amp;gt;&lt;/code&gt; (&lt;strong&gt;3.51.0&lt;/strong&gt;, &lt;a href=&quot;/playground/23d982fc6f4f4f06a6aa227860fa2d84?version=3.51.0&quot;&gt;Example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;You can now use &lt;code&gt;important&lt;/code&gt; in inline style tags: &lt;code&gt;style:foo|important&lt;/code&gt; (&lt;strong&gt;3.52.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/7365&quot;&gt;#7365&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A warning will now be thrown when using &lt;code&gt;&amp;lt;a target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;/code&gt; without &lt;code&gt;rel=&amp;quot;noreferrer&amp;quot;&lt;/code&gt; (&lt;strong&gt;3.52.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/6188&quot;&gt;#6188&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tom Smykowski さんが &lt;a href=&quot;https://tomaszs2.medium.com/svelte-3-52-0-improves-dev-experience-45f8c460bb96&quot;&gt;3.52.0 の全変更点&lt;/a&gt; のグレートなサマリを書いてくれました！Svelte コンパイラの全変更点と、今後の変更については、こちらの &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; をご確認ください！&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.attendzen.io/&quot;&gt;AttendZen&lt;/a&gt; is an event management and marketing platform for in-person, virtual or hybrid events&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gramjam.app/&quot;&gt;Gram Jam&lt;/a&gt; is a challenging daily word game using SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://collabwriting.com/&quot;&gt;Collabwriting&lt;/a&gt; is an actionable knowledge base for your team&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dazzlega.me/&quot;&gt;Dazzle&lt;/a&gt; is a Puzzle Game made with Svelte &amp;amp; DallE&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Hugo-Dz/figma_autoname_client_app&quot;&gt;Figma Autoname plugin&lt;/a&gt; automatically names your Figma layers in one click&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sfx101/deck&quot;&gt;DECK&lt;/a&gt; is powerful and high performant local web development studio for MacOS, Ubuntu and Windows&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Specy/asm-editor&quot;&gt;Asm editor&lt;/a&gt; is a webapp to write and run m68k assembly code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mellobacon/Nucleus&quot;&gt;Nucleus&lt;/a&gt; is a text editor featuring a clean and easy to use user interface inspired by Visual Studio Code, Atom, Fleet, and others&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/diamonc/observer&quot;&gt;Observer&lt;/a&gt; is a frontend for Arth Panel, an open-source &amp;amp; self-hosted minecraft server panel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://plan.lodzero.com/&quot;&gt;.PLAN&lt;/a&gt; is a cloud-based notetaking app with markdown and section support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yekta/stablecog&quot;&gt;Stablecog&lt;/a&gt; is a simple, free &amp;amp; open source AI image generator&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/merkie/freespeech&quot;&gt;FreeSpeech AAC&lt;/a&gt; is a free and open-source assistive communication app written in TypeScript&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sqrdoff.cubieverse.co/&quot;&gt;sqrdoff&lt;/a&gt; is a dots and boxes to enjoy playing with friends&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://launch.itty-sh.pages.dev/&quot;&gt;itty&lt;/a&gt; is a fresh take on the traditional link-shortener&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://splits.best/&quot;&gt;splits&lt;/a&gt; lets you track your splits, calculate your race pace, become a better athlete&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jrende.xyz/weaver/&quot;&gt;Weaver&lt;/a&gt; is an application for creating &lt;a href=&quot;https://www.gistyarn.com/blogs/how-to-weave/how-to-read-a-weaving-draft&quot;&gt;weave drafts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pdKJzrPA0DY&quot;&gt;Starting With Svelte - Brittney Postma&lt;/a&gt; by fitcevents&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QoR0AZ-Rov8&quot;&gt;Learn Svelte from scratch with Geoff Rich: A Svelte tutorial&lt;/a&gt; by Kelvin Omereshone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gwktlvFHLMA&quot;&gt;How To Connect to MongoDB in Svelte Kit&lt;/a&gt; by LevelUpTuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=E3VG-dLCRUk&quot;&gt;SvelteKit Authentication Using Cookies&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=kMz_Ba_OF2w&quot;&gt;Make A Typing Game With Svelte&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=J_G_xP0chog&quot;&gt;SvelteKit Tailwind CSS Setup With Automatic Class Sorting&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=doDKaKDvB30&quot;&gt;Authentication with SvelteKit &amp;amp; PocketBase&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=52nXUwQWeKI&quot;&gt;Form Actions in SvelteKit (+page)&lt;/a&gt; by Huntabyte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eC7IePI5rIk&quot;&gt;Sybil - Episode 1 - Rust knowledge management with SurrealDB&lt;/a&gt; by Raphael Darley&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/4-things-i-miss-svelte/&quot;&gt;4 things I miss from Svelte after working in React&lt;/a&gt; and &lt;a href=&quot;https://geoffrich.net/posts/svelte-social-image/&quot;&gt;Create dynamic social card images with Svelte components&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://storybook.js.org/blog/first-class-vite-support-in-storybook/&quot;&gt;First-class Vite support in Storybook 7.0&lt;/a&gt; (Svelte and SvelteKit included) by Ian VanSchooten&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/webstorm/2022/09/webstorm-2022-3-eap1/#information_regarding_svelte_support&quot;&gt;Better Svelte support is coming to WebStorm&lt;/a&gt; from JetBrains&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pyronaur.com/dark-mode/&quot;&gt;Dark Mode&lt;/a&gt; Toggle by pyronaur&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.captaincodeman.com/headlessui-components-with-svelte&quot;&gt;HeadlessUI Components with Svelte&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cherrific.io/0xedB00816FB204b4CD9bCb45FF2EF693E99723484/story/23&quot;&gt;Using Sequelize with SvelteKit&lt;/a&gt; by MetaZebre&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.encodeart.dev/implementing-maintenance-mode-on-a-sveltekit-site&quot;&gt;Implementing Maintenance mode on a SvelteKit site&lt;/a&gt; by Andreas Söderlund&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/buhrmi/actionstore-real-time-svelte-stores-for-rails-4jhg&quot;&gt;ActionStore: Real-time Svelte stores for Rails&lt;/a&gt; by Stefan Buhrmester&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/svelte-css-image-slider/&quot;&gt;Svelte CSS Image Slider: with Bouncy Overscroll&lt;/a&gt; and &lt;a href=&quot;https://rodneylab.com/sveltekit-local-edge-functions/&quot;&gt;SvelteKit Local Edge Functions: Edge on Localhost&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.openreplay.com/creating-a-svelte-tabs-component-with-slot-props/&quot;&gt;Creating a Svelte Tabs component with Slot props&lt;/a&gt; by Shinichi Okada&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/stripe/sky-cart-an-open-source-cloud-agnostic-shopping-cart-using-stripe-checkout-o5k&quot;&gt;Sky Cart: An Open Source, cloud-agnostic shopping cart using Stripe Checkout&lt;/a&gt; by Mike Bifulco for Stripe&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://threlte.xyz/&quot;&gt;Threlte&lt;/a&gt; is a component library for Svelte to build and render three.js scenes declaratively and state-driven in Svelte apps. It&amp;rsquo;s being featured again to highlight the new &amp;ldquo;Playground&amp;rdquo; button in its examples&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ghostdevv/svelte-turnstile&quot;&gt;Svelte Turnstile&lt;/a&gt; is a library to integrate Cloudflare&amp;rsquo;s Turnstile (a new CAPTCHA alternative) into a Svelte app&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/buhrmi/actionstore&quot;&gt;ActionStore&lt;/a&gt; allows you to push data directly into Svelte stores via ActionCable&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltekit-is-land.vercel.app/&quot;&gt;SvelteKit + &lt;code&gt;&amp;lt;is-land&amp;gt;&lt;/code&gt;&lt;/a&gt; is an experiment with partial hydration in SvelteKit using &lt;code&gt;@11ty/is-land&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/CaptainCodeman/svelte-color-select&quot;&gt;Svelte Color Select&lt;/a&gt; is an Okhsv Color Selection component for Svelte using OKLab perceptual colorspace&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Ennoriel/svelte-awesome-color-picker&quot;&gt;svelte-awesome-color-picker&lt;/a&gt; is a highly customizable color picker component library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/rx-svelte-forms&quot;&gt;rx-svelte-forms&lt;/a&gt; creates reactive Svelte forms inspired by Angular reactive forms&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-wc-bind&quot;&gt;svelte-wc-bind&lt;/a&gt; enables two way data binding in Svelte web components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/valterkraemer/svelte-preprocess-style-child-component&quot;&gt;svelte-preprocess-style-child-component&lt;/a&gt; allows you to style elements inside a child component using similar syntax as CSS Shadow Parts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/unplugin-svelte-components&quot;&gt;unplugin-svelte-components&lt;/a&gt; allows for on-demand components auto importing for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paoloricciuti/sveltekit-search-params&quot;&gt;sveltekit-search-params&lt;/a&gt; aims to be the fastest way to read AND WRITE from query search params in SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sabine/svelte-crop-window&quot;&gt;svelte-crop-window&lt;/a&gt; is a crop window component for images and videos that supports touch gestures (pinch zoom, rotate, pan), as well as mousewheel zoom, mouse-dragging the image, and rotating on right mouse button&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/etherCorps/sveltekit-og&quot;&gt;Open Graph Image Generation&lt;/a&gt; lets you generate open graph images dynamically from HTML/CSS without a browser in SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/binsarjr/svelte-taphold&quot;&gt;Svelte Tap Hold&lt;/a&gt; is a minimalistic tap and hold component for Svelte/SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ghostdevv/svelte-copy&quot;&gt;svelte-copy&lt;/a&gt;&amp;rsquo;s new version lets you customize the events that cause text to be copied to the clipboard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;UI Kits, Integrations and Starters&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ivodolenc/sveltekit-statiko&quot;&gt;SvelteKit Statiko&lt;/a&gt; is a multi-featured assistant for SvelteKit static projects&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/N00nDay/stwui&quot;&gt;Svelte-TailwindCSS UI (STWUI)&lt;/a&gt; is a Tailwind-based UI that is currently in pre-release beta&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kevmodrome/kitbase&quot;&gt;KitBase&lt;/a&gt; is a starter template for SvelteKit and PocketBase&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/unocss/unocss/tree/main/examples/sveltekit-scoped&quot;&gt;UnoCSS Vite Plugin (svelte-scoped)&lt;/a&gt; is a scoped-CSS utility for Vite/SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/fabiorodriguesroque/sveltekit_auth_app&quot;&gt;SvelteKit Auth App&lt;/a&gt; is an example of how we can create an authentication system with SvelteKit using JsonWebToken and Prisma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/xulioc/sveltekit-supabase-dashboard&quot;&gt;SvelteKit Supabase Dashboard&lt;/a&gt; is a simple dashboard inspired by Supabase UI made with SvelteKit as frontend and Supabase as backend&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/j4w8n/supakit&quot;&gt;Supakit&lt;/a&gt; is a Supabase auth helper for SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@bun-community/sveltekit-adapter-bun&quot;&gt;@bun-community/sveltekit-adapter-bun&lt;/a&gt; is an adapter for SvelteKit apps that generates a standalone Bun server&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/micha-lmxt/hooks-as-store&quot;&gt;hooks-as-store&lt;/a&gt; lets you use React custom hooks in Svelte Apps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Fun ones&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paoloricciuti/svelte-typewriter-store&quot;&gt;svelte-typewriter-store&lt;/a&gt; is the simplest way to get a rotating typewriter effect in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/aksel&quot;&gt;Aksel&lt;/a&gt; is the seagull you needed on your site&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/WbaN314/svelte-dodge&quot;&gt;Svelte-Dodge&lt;/a&gt; makes components dodge the pointer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今月はこれでおしまいです！見落としなどございましたら &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.gg/svelte&quot;&gt;Discord&lt;/a&gt; にてお知らせください。&lt;/p&gt;
&lt;p&gt;それではまた来月 👋&lt;/p&gt;</description><pubDate>Tue, 01 Nov 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年10月</title><link>https://svelte.dev/blog/whats-new-in-svelte-october-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;今月は更新がいっぱいあります… Svelte と SvelteKit の新機能から 2日間の &lt;em&gt;サミット&lt;/em&gt; まで! それに加えて、Svelte の extension に追加された便利な新機能、新しいアクセシビリティ (a11y) の警告、そして Tan Li Hau による Svelte と Svelte スプレッドシートの構築方法についての講座もございます 😎&lt;/p&gt;
&lt;h2 id=&quot;What-happened-at-Svelte-Summit&quot;&gt;&lt;span&gt;What happened at Svelte Summit?&lt;/span&gt;&lt;a href=&quot;#What-happened-at-Svelte-Summit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;コンテンツが盛り沢山です! それぞれのライブストリームから、タイムスタンプで全ての講演をご覧いただけます。分割されたビデオは近日中に Svelte Society のチャンネルに追加される予定ですので、まだの方は &lt;a href=&quot;https://www.youtube.com/c/SvelteSociety&quot;&gt;チャンネル登録&lt;/a&gt; をお忘れなく!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Day One&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=751s&quot;&gt;12:31&lt;/a&gt; - How to get Svelte adopted at work&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=2001s&quot;&gt;33:21&lt;/a&gt; - Animating Data Visualization in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=8436s&quot;&gt;2:20:36&lt;/a&gt; - Red flags &amp;amp; code smells&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=10422s&quot;&gt;2:53:42&lt;/a&gt; - Enhance your DX&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=16961s&quot;&gt;4:42:41&lt;/a&gt; - Svelte in UBS’ knowledge graph&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=18402s&quot;&gt;5:06:42&lt;/a&gt; - How to migrate react libraries to svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=20727s&quot;&gt;5:45:27&lt;/a&gt; - DX magic in the world of Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=26739s&quot;&gt;7:25:39&lt;/a&gt; - Data visualizations powered by Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=28778s&quot;&gt;7:59:38&lt;/a&gt; - Partial Hydration in Svelte for Increased Performance&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=pJcbZr5VlV4&amp;t=30049s&quot;&gt;8:20:49&lt;/a&gt; - Building the future, faster&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Day Two&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8jkJTWacow&amp;t=1449s&quot;&gt;24:09&lt;/a&gt; - Scrollytell me why: Ain&amp;rsquo;t nothing but a piece of cake&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8jkJTWacow&amp;t=7360s&quot;&gt;2:02:40&lt;/a&gt; - I told you my dog wouldn’t run&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8jkJTWacow&amp;t=8983s&quot;&gt;2:29:43&lt;/a&gt; - 10Xing Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8jkJTWacow&amp;t=11096s&quot;&gt;3:04:56&lt;/a&gt; - Svemix? Re-svmix? Re-svelte?: Bringing Svelte to Remix Router&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8jkJTWacow&amp;t=18579s&quot;&gt;5:09:39&lt;/a&gt; - Having fun with stores: an interactive demo of Svelte’s built in state management library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8jkJTWacow&amp;t=20226s&quot;&gt;5:37:06&lt;/a&gt; - When Keeping it Svelte Goes Wrong. An Analysis of Some of the Worst Svelte I Have Ever Coded&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8jkJTWacow&amp;t=26525s&quot;&gt;7:22:05&lt;/a&gt; - Getting started with Hooks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=A8jkJTWacow&amp;t=27494s&quot;&gt;7:38:14&lt;/a&gt; - Special Announcement*&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;*サミットの最後のトークでは、Rich Harris が SvelteKit の最初のリリース候補版(Release Candidate)を発表しました! 破壊的変更は行われなくなる予定で、チームはバグ潰しと 1.0 に向けた残りの機能の追加に懸命に取り組んでいます…&lt;/p&gt;
&lt;h2 id=&quot;More-SvelteKit-Updates&quot;&gt;&lt;span&gt;More SvelteKit Updates&lt;/span&gt;&lt;a href=&quot;#More-SvelteKit-Updates&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;use:enhance&lt;/code&gt; is the easiest way to progressively enhance a form (&lt;a href=&quot;/docs/kit/form-actions#Progressive-enhancement-use:enhance&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/6633&quot;&gt;#6633&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/6828&quot;&gt;#6828&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/7012&quot;&gt;#7012&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The demo app has been updated to add the Sverdle game, which Rich demoed at Svelte Summit and demonstrates &lt;code&gt;use:enhance&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/6979&quot;&gt;#6979&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Cloudflare Pages &lt;code&gt;_routes.json&lt;/code&gt; specification is now supported by &lt;code&gt;adapter-cloudflare&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/6530&quot;&gt;#6530&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improved build performance by running asset and page compression in parallel (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/6710&quot;&gt;#6710&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;More-SvelteKit-Updates-Breaking-changes:&quot;&gt;&lt;span&gt;Breaking changes:&lt;/span&gt;&lt;a href=&quot;#More-SvelteKit-Updates-Breaking-changes:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Node 16.14 is now the minimum version to run SvelteKit (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/6388&quot;&gt;#6388&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App.PrivateEnv&lt;/code&gt; and &lt;code&gt;App.PublicEnv&lt;/code&gt; have been removed in favour of generated types (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/6413&quot;&gt;#6413&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%sveltekit.message%&lt;/code&gt; has been replaced with &lt;code&gt;%sveltekit.error.message%&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/6659&quot;&gt;6659&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App.PageError&lt;/code&gt; is now &lt;code&gt;App.Error&lt;/code&gt; - check for it in your hooks (&lt;a href=&quot;/docs/kit/hooks#Shared-hooks-handleError&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/6963&quot;&gt;#6963&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;externalFetch&lt;/code&gt; is now &lt;code&gt;handleFetch&lt;/code&gt; and will run for all fetch calls in &lt;code&gt;load&lt;/code&gt; that run on the server (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/6565&quot;&gt;#6565&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;変更の全リストは、SvelteKit の &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; をご確認ください。&lt;/p&gt;
&lt;h2 id=&quot;Svelte-Updates&quot;&gt;&lt;span&gt;Svelte Updates&lt;/span&gt;&lt;a href=&quot;#Svelte-Updates&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;新たな a11y warning として &lt;code&gt;incorrect-aria-attribute-type&lt;/code&gt;、&lt;code&gt;no-abstract-role&lt;/code&gt;、&lt;code&gt;interactive-element-to-noninteractive-role&lt;/code&gt;、&lt;code&gt;role-has-required-aria-props&lt;/code&gt; が追加されました。&lt;code&gt;no-noninteractive-tabindex&lt;/code&gt; と &lt;code&gt;click-events-have-key-events&lt;/code&gt; も間もなくです! (&lt;strong&gt;3.50.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ComponentEvents&lt;/code&gt; and &lt;code&gt;SveltePreprocessor&lt;/code&gt; (&lt;strong&gt;3.50.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;新たな型として &lt;code&gt;ComponentEvents&lt;/code&gt; と &lt;code&gt;SveltePreprocessor&lt;/code&gt; が追加されました (&lt;strong&gt;3.50.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;ホワイトスペースの大きいブロックが含まれている場合においてパースのスピードが改善されました (&lt;strong&gt;3.50.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;全てのグローバルな JavaScript オブジェクトと関数が、既知のグローバルなものとして認識されるようになりました (&lt;strong&gt;3.50.1&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Svelte コンパイラに対する全ての変更や、今後の変更については、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; をご確認ください。&lt;/p&gt;
&lt;h2 id=&quot;New-in-Language-Tools&quot;&gt;&lt;span&gt;New in Language Tools&lt;/span&gt;&lt;a href=&quot;#New-in-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;エディタが提案するコードフォーマットが改善されました (&lt;strong&gt;106.0.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1598&quot;&gt;#1598&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit の route ファイルが、コンテキストメニューやコマンドパレットから簡単に作成できるようになりました (&lt;strong&gt;106.1.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1620&quot;&gt;#1620&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Ask-Questions-in-the-Svelte-Discord&quot;&gt;&lt;span&gt;Ask Questions in the Svelte Discord&lt;/span&gt;&lt;a href=&quot;#Ask-Questions-in-the-Svelte-Discord&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;発表を見逃してしまった方、Svelte Discord にエキサイティングな更新があるんです… それはフォーラムです! 新しい &lt;a href=&quot;https://discord.com/channels/457912077277855764/1023340103071965194&quot;&gt;questions channel&lt;/a&gt; は、Discord の新しいフォーラム機能を利用し、質問とその発見、そして回答をするためのより良いコミュニティとなることを支援します!&lt;/p&gt;
&lt;p&gt;Svelte や SvelteKit を使って実現したいことや、コミュニティのライブラリ、ツールなど、なんにでもお使いいただけます。お気軽にどうぞ!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.timeflow.site/&quot;&gt;Timeflow&lt;/a&gt; is a smart calendar &amp;amp; task manager that dynamically schedules your tasks between your events&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/woutdp/geoquest&quot;&gt;GeoQuest&lt;/a&gt; is an open source geography game&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://housesof.world/&quot;&gt;Houses Of&lt;/a&gt; is a project showcasing charismatic houses around the world&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://greenfield-brewery.vercel.app/&quot;&gt;Greenfield Brewery&lt;/a&gt; is a tool for quickly installing a lot of homebrew casks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gramjam.app/&quot;&gt;Gram Jam&lt;/a&gt; is a word puzzle game inspired by match three games and Scrabble&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/snuffyDev/Beatbump&quot;&gt;Beatbump&lt;/a&gt; is a privacy-respecting alternative frontend for YouTube Music&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wxsd-sales/roomos-device-widgets&quot;&gt;RoomOS Device Widgets&lt;/a&gt; is an app for demoing RoomOS device capabilities in Kiosk/PWA mode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://store.steampowered.com/app/1870320/World_Seed/&quot;&gt;World Seed&lt;/a&gt; is a full blown online multiplayer game&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lirify-tan.vercel.app/&quot;&gt;Lirify&lt;/a&gt; is a song lyrics writing web app tool made in Latvia&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.splet.rs/&quot;&gt;Splet Tech Konferencija&lt;/a&gt; is a tech conference in Serbia with a &lt;em&gt;very&lt;/em&gt; fancy website&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://unbounded.polkadot.network/&quot;&gt;Unbounded&lt;/a&gt; is an open-source variable font - funded by blockchain (and an awesome-looking website)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shop.porterspaints.com/&quot;&gt;Porter&amp;rsquo;s Paints&lt;/a&gt; is an eCommerce site for (you guessed it) paints built with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cran-e.com/&quot;&gt;CRAN/E&lt;/a&gt; is a search engine for modern R-packages&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Starring the Svelte team&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=vzeZskhjoeQ&quot;&gt;Upgrading SvelteKit&lt;/a&gt; by Svelte Sirens (with Brittney, Kev, and GHOST!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mwvyKGw2CzU&quot;&gt;Build your own Svelte&lt;/a&gt; by lihautan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/page-transitions-1/&quot;&gt;Native Page Transitions in SvelteKit: Part 1&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ghostdev.xyz/posts/build-a-cross-platform-app-with-tauri/&quot;&gt;Build a cross platform app with Tauri&lt;/a&gt; by GHOST&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eqwtoaP-0pk&quot;&gt;How To Use Future CSS In Svelte&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=3RlBfUQCiAQ&quot;&gt;Master Animation With Svelte&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=i5zdnv83mxY&quot;&gt;Svelte Kit Form Actions 101 - New Svelte Kit API&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=PK2Mpt1q6K8&quot;&gt;Svelte Kit Form Actions - Real World Examples - Q&amp;amp;A&lt;/a&gt; by LevelUpTuts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/parables/whats-new-in-svelte-kit-100-next445-group-layout-1ld5&quot;&gt;What&amp;rsquo;s new in &lt;code&gt;svelte-kit, 1.0.0-next.445&lt;/code&gt;: (group) layout&lt;/a&gt; by Parables&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maier.tech/posts/handling-breaking-changes-in-sveltekit-pre-1-0&quot;&gt;Handling breaking changes in SvelteKit pre-1.0&lt;/a&gt; by Thilo Maier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://raqueebuddinaziz.com/blog/svelte-custom-stores-demystified/&quot;&gt;Svelte Custom Stores Demystified&lt;/a&gt; by Raqueebuddin Aziz&lt;/li&gt;
&lt;li&gt;Sveltekit Changes: &lt;a href=&quot;https://dev.to/theether0/sveltekit-changes-advanced-layouts-3id4&quot;&gt;Advanced Layouts&lt;/a&gt;, &lt;a href=&quot;https://dev.to/theether0/sveltekit-changes-form-actions-and-progressive-enhancement-31h9&quot;&gt;Form Actions and Progressive Enhancement&lt;/a&gt; and &lt;a href=&quot;https://dev.to/theether0/sveltekit-changes-session-and-cookies-enb&quot;&gt;Cookies and Authentication&lt;/a&gt; by Shivam Meena&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://xvrc.net/&quot;&gt;How to add an Emoji Picker to Sveltekit&lt;/a&gt; by Xavier Coiffard&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://plus.rodneylab.com/tutorials/get-started-sveltekit-headless-wordpress&quot;&gt;Get Started with SvelteKit Headless WordPress&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.captaincodeman.com/speed-up-sveltekit-pages-with-a-redis-cache&quot;&gt;Speed up SvelteKit Pages With a Redis Cache&lt;/a&gt; and &lt;a href=&quot;https://www.captaincodeman.com/how-to-await-firebase-auth-with-sveltekit&quot;&gt;How to await Firebase Auth with SvelteKit&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://abyteofcoding.com/blog/deploying-sveltekit-with-nodejs-pm2-to-server/&quot;&gt;Deploying SvelteKit with NodeJS to a Server Using GitLab and PM2&lt;/a&gt; by A Byte of Coding&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/xltgyp/quality_of_life_tips_when_using_sveltekit_in_vs/&quot;&gt;Quality of Life Tips when using SvelteKit in VS Code&lt;/a&gt; by doa-doa&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leveluptuts/svelte-fit&quot;&gt;Svelte Fit&lt;/a&gt; is an extremely simple, no dependency fit text library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/l-portet/svelte-switch-case&quot;&gt;svelte-switch-case&lt;/a&gt; is a switch case syntax for your Svelte components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/andreasmcdermott/svelte-canvas-confetti&quot;&gt;svelte-canvas-confetti&lt;/a&gt; uses a single canvas to render full-screen confetti&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Valexr/Slidy/tree/master/packages/svelte&quot;&gt;@slidy/svelte&lt;/a&gt; is a simple, configurable &amp;amp; reusable carousel component built with Svelte - based on &lt;code&gt;@slidy/core&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/canutin/svelte-currency-input&quot;&gt;svelte-currency-input&lt;/a&gt; is a form input that converts numbers to localized currency formats as you type&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pilcrowOnPaper/adria&quot;&gt;Adria&lt;/a&gt; is a super simple form validation library, with autocomplete and value/type checking&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oslabs-beta/canopy&quot;&gt;Canopy&lt;/a&gt; is a Svelte debugging app for the Chrome devtools panel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MyHwu9508/altv-os-menu-framework&quot;&gt;MenuFramework&lt;/a&gt; is a menu framework written for &lt;a href=&quot;https://altv.mp/#/&quot;&gt;alt:V&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://whyframe.dev/&quot;&gt;whyframe&lt;/a&gt; gives iframes superpowers, making it easy to render anything in isolation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vnphanquang/svelte-put/tree/main/packages/misc/modal&quot;&gt;@svelte-put/modal&lt;/a&gt; is a solution to async, declarative, type-safe modals in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/grottopress/kitty&quot;&gt;Kitty&lt;/a&gt; is a collection of libraries and handlers for developing secure frontend apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ghostdevv/svelte-turnstile&quot;&gt;svelte-turnstile&lt;/a&gt; is a component for Cloudflare Turnstile, the privacy focused CAPTCHA replacement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;UI Kits and Starters&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kwchang0831/svelte-QWER&quot;&gt;QWER&lt;/a&gt; is a blog starter built with SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Refzlund/sveltekit-zero-api&quot;&gt;SvelteKit Zero API&lt;/a&gt; provides type-safety between the frontend and backend - creating a structure for easy APIs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sw-yx/sveltekit-monorepo&quot;&gt;sveltekit-monorepo&lt;/a&gt; is monorepo starter with 2022 tech&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/davipon/svelte-component-test-recipes&quot;&gt;svelte-component-test-recipes&lt;/a&gt; uses &lt;code&gt;vitest&lt;/code&gt;, &lt;code&gt;@testing-library/svelte&lt;/code&gt;, and &lt;code&gt;svelte-htm&lt;/code&gt; to test Svelte components that seemed to be hard to test&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whew! 更新が盛り沢山でしたね。何か見逃していることがあれば &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; でお知らせください!&lt;/p&gt;
&lt;p&gt;それではまた来月 👋&lt;/p&gt;</description><pubDate>Sat, 01 Oct 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年9月</title><link>https://svelte.dev/blog/whats-new-in-svelte-september-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;今月やりたいことをまだお探しですか? Svelte Summit Stockholm のチケットを手に入れる最後のチャンスです! &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;9月8-9日です、ご参加ください&lt;/a&gt; 🎉&lt;/p&gt;
&lt;p&gt;先月、再設計された SvelteKit のファイルシステムベースルーターがマージされ、今月は、&lt;a href=&quot;https://github.com/sveltejs/kit/discussions/5774&quot;&gt;移行スクリプト&lt;/a&gt; から新しいブログ記事の数々、ビデオ、チュートリアルまで、コンテンツが盛り沢山です。&lt;/p&gt;
&lt;p&gt;しかし、SvelteKit の新機能は新しいルーティングだけではありません…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;HTTP ヘッダーの &lt;code&gt;Link&lt;/code&gt; がサポートされ、Cloudflare の &lt;a href=&quot;https://github.com/sveltejs/kit/issues/5455&quot;&gt;Automatic Early Hints&lt;/a&gt; がすぐに使えるようになりました (&lt;strong&gt;1.0.0-next.405&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/5735&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;機密性の高い値がディスクに書き込まれるのを防ぐため、&lt;code&gt;$env/static/*&lt;/code&gt; は仮想化(virtual)されました (&lt;strong&gt;1.0.0-next.413&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/5825&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$app/stores&lt;/code&gt; がブラウザのどこからでも使用できるようになりました (&lt;strong&gt;1.0.0-next.428&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/6100&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config.kit.env.dir&lt;/code&gt; は &lt;code&gt;.env&lt;/code&gt; ファイルを探すディレクトリを設定する新しいコンフィグです (&lt;strong&gt;1.0.0-next.430&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/6175&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-changes:&quot;&gt;&lt;span&gt;Breaking changes:&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-changes:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;The filesystem-based router and &lt;code&gt;load&lt;/code&gt; API improves the way routes are managed. &lt;strong&gt;Before installing version &lt;code&gt;@sveltejs/kit@1.0.0-next.406&lt;/code&gt; or later, &lt;a href=&quot;https://github.com/sveltejs/kit/discussions/5774&quot;&gt;follow this migration guide&lt;/a&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5778&quot;&gt;PR&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/discussions/5748&quot;&gt;Issue&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;event.session&lt;/code&gt; has been removed from &lt;code&gt;load&lt;/code&gt; along with the &lt;code&gt;session&lt;/code&gt; store and &lt;code&gt;getSession&lt;/code&gt;. Use &lt;code&gt;event.locals&lt;/code&gt; instead (&lt;strong&gt;1.0.0-next.415&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/5946&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Named layouts have been removed in favor of &lt;code&gt;(groups)&lt;/code&gt; (&lt;strong&gt;1.0.0-next.432&lt;/strong&gt;, &lt;a href=&quot;/docs/kit/advanced-routing#Advanced-layouts&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/6174&quot;&gt;PR &amp;amp; Migration Instructions&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;event.clientAddress&lt;/code&gt; is now &lt;code&gt;event.getClientAddress()&lt;/code&gt; (&lt;strong&gt;1.0.0-next.438&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/6237&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$app/env&lt;/code&gt; has been renamed to &lt;code&gt;$app/environment&lt;/code&gt;, to disambiguate with &lt;code&gt;$env/...&lt;/code&gt; (&lt;strong&gt;1.0.0-next.445&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/6334&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;変更の全リストは、kit の  &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; をご確認ください。&lt;/p&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Updates-to-language-tools&quot;&gt;&lt;span&gt;Updates to language tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Updates-to-language-tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;TypeScript が SvelteKit の $types をうまく解決できませんでしたが、Svelte の language tools の最新バージョンではそれが改善されました (&lt;strong&gt;105.21.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1592&quot;&gt;#1592&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/a_warnes/status/1556724034959818754?s=20&amp;t=RyKWALPByqMT5A_PkLtUew&quot;&gt;canno&lt;/a&gt; is a simple interactive 3d physics game with adjustable gravity, cannon power, and debug visualizer - made with threlte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://straw.page/&quot;&gt;straw.page&lt;/a&gt; is an extremely simple website builder that lets you create unique websites straight from your phone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://patra.webjeda.com/&quot;&gt;Patra&lt;/a&gt; lets you share short notes just with a link. No database. No storage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://promptomania.com/&quot;&gt;promptoMANIA&lt;/a&gt; is an AI art community with an online prompt builder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.albumbymood.com/&quot;&gt;Album by Mood&lt;/a&gt; lets you listen to music based on your mood&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://digivaux.com/sumeiro/daily/&quot;&gt;Daily Sumeiro&lt;/a&gt; is a daily game to test your math and logic skills&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lofiandgames.com/&quot;&gt;Lofi and Games&lt;/a&gt; - play relaxing, casual games right from your browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joelgibson/pitch-pipe&quot;&gt;Pitch Pipe&lt;/a&gt; is a digital pitch pipe with a frequency analyser and just-intonation intervals&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ekzhang/classes.wtf&quot;&gt;classes.wtf&lt;/a&gt; is a custom, distributed search engine written in Go and Svelte to make searching for Harvard courses much quicker than the standard course catalog&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scrumpack.io/&quot;&gt;Scrumpack&lt;/a&gt; is a set of tools to help agile/scrum teams with their ceremonies like Planning Poker and Retrospectives&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Starring the Svelte team&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://syntax.fm/show/499/supper-club-rich-harris-author-of-svelte&quot;&gt;Supper Club × Rich Harris, Author of Svelte — Syntax Podcast 499&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/lets-talk-routing-with-rich-harris&quot;&gt;Let&amp;rsquo;s talk routing with Rich Harris on Svelte Radio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=F1sSUDVoij4&quot;&gt;2.17 - Building the Future of Svelte at Vercel with Rich Harris&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xLhuUShkYkM&quot;&gt;1.15 - What&amp;rsquo;s Up With SvelteKit with Shawn Wang (swyx)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=l4sbqrY0XGk&quot;&gt;Adding Notion Tailwindcss and DaisyUI to Svelte App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=IIeBERpyxx4&quot;&gt;Svelte 101 Session&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=iYKKg-50Gm4&quot;&gt;Astro and Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xXHFRzqUxoE&quot;&gt;Storyblok in Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ua6gE2zPulw&quot;&gt;Svelte London August Recording&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Learning the new SvelteKit routing&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.netlify.com/blog/migrating-breaking-changes-in-sveltekit/&quot;&gt;Migrating Breaking Changes in SvelteKit&lt;/a&gt; by Brittney Postma (Netlify)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OUGn7VifUCg&quot;&gt;Major Svelte Kit API Change - Fixing &lt;code&gt;load&lt;/code&gt;, and tightening up SvelteKit&amp;rsquo;s design before 1.0&lt;/a&gt; - Video by LevelUpTuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eVFcGA-15LA&quot;&gt;SvelteKit Is Never Going To Be The Same&lt;/a&gt; - Video by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joshcollinsworth.com/blog/build-static-sveltekit-markdown-blog&quot;&gt;Let&amp;rsquo;s learn SvelteKit by building a static Markdown blog from scratch&lt;/a&gt; by Josh Collinsworth (updated Aug 26th to keep up with the new changes)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uWDBEUkTRGk&quot;&gt;Svelte Guide For React Developers&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=4dDjQiOVrOo&quot;&gt;Svelte State Management Guide&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aOBGhvggsq0&quot;&gt;What Is Bookit? The Svelte Kit Storybook Killer&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=y0DvJTVO65M&quot;&gt;What Is @type{import In Svelte Kit - JSDoc Syntax&lt;/a&gt; by LevelUpTuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?app=desktop&amp;v=nT8QtDBIKZA&quot;&gt;TWF Yet another JS Framework... or not? Svelte!&lt;/a&gt; by TWF meetup&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lekoarts.de/javascript/creating-a-figma-plugin-with-svelte&quot;&gt;Creating a Figma Plugin with Svelte&lt;/a&gt; by Lennart&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://plus.rodneylab.com/tutorials/svelte-video-blog&quot;&gt;Svelte Video Blog: Vlog with Mux from your own SvelteKit Site&lt;/a&gt; and &lt;a href=&quot;https://rodneylab.com/svelte-shy-header/&quot;&gt;Svelte Shy Header: Peekaboo Sticky Header with CSS&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svelte-plugins/tooltips&quot;&gt;@svelte-plugins/tooltips&lt;/a&gt; is a simple tooltip action and component designed for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pilcrowOnPaper/lucia-sveltekit&quot;&gt;Lucia&lt;/a&gt; is a simple authentication library for SvelteKit that connects your SvelteKit app to your database&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/brophdawg11/remix-routers/tree/main/packages/svelte&quot;&gt;remix-router-svelte&lt;/a&gt; is a Svelte implementation of the &lt;code&gt;react-router-dom&lt;/code&gt; API (driven by &lt;code&gt;@remix-run/router&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/j4w8n/mkrt&quot;&gt;MKRT&lt;/a&gt; is a CLI to help you create SvelteKit routes, fast&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://histoire.dev/guide/&quot;&gt;Histoire&lt;/a&gt; is a tool to generate stories applications - scenarios where you showcase components for specific use cases&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/sveltekit-flash-message&quot;&gt;sveltekit-flash-message&lt;/a&gt; is a Sveltekit library that passes temporary data to the next request, usually from endpoints&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/matteobruni/tsparticles#svelte&quot;&gt;svelte-particles&lt;/a&gt; is a lightweight TypeScript library for creating particles&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bufgix/svelte-claps&quot;&gt;svelte-claps&lt;/a&gt; adds clap button (like Medium) to any page for your SvelteKit apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/fd5e3b2be7da42fe8afddf89661af7d7?version=3.49.0&quot;&gt;Neon Flicker&lt;/a&gt; is a Svelte component to make your text flicker in a cyberpunk style&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/144f22d18c6943abb1fdd00f13e23fde?version=3.49.0&quot;&gt;ComboBox&lt;/a&gt; is a search input to help users select from a large list of items&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vnphanquang/svelte-put&quot;&gt;@svelte-put&lt;/a&gt; is useful svelte stuff to put in your projects&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshnuss/vite-plugin-svelte-bridge&quot;&gt;vite-plugin-svelte-bridge&lt;/a&gt; lets you write Svelte components and use them from React &amp;amp; Vue&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;UI Kits and Starters&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/basf/svelte-spectre&quot;&gt;Svelte-spectre&lt;/a&gt; is a UI-kit based on spectre.css and powered by Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://skeleton.brainandbonesllc.com/&quot;&gt;Skeleton&lt;/a&gt; allows you to build fast and reactive web UI using the power of Svelte + Tailwind&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/iconsax-svelte&quot;&gt;iconsax-svelte&lt;/a&gt; brings the popular icon kit to Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/NukeJS/laravel-vite-svelte-spa-template&quot;&gt;laravel-vite-svelte-spa-template&lt;/a&gt; is a Laravel 9, Vite, Svelte SPA, Tailwind CSS (w/ Forms Plugin &amp;amp; Aspect Ratio Plugin), Axios, &amp;amp; TypeScript starter template&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Raffaele/neutralino-svelte-boilerplate-js&quot;&gt;neutralino-svelte-boilerplate-js&lt;/a&gt; is a cross platform desktop template for Neutralino and Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/candidosales/figma-plugin-svelte-vite&quot;&gt;figma-plugin-svelte-vite&lt;/a&gt; is a boilerplate for creating Figma plugins using Svelte, Vite and Typescript&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/importantimport/urara&quot;&gt;Urara&lt;/a&gt; is a sweet &amp;amp; powerful SvelteKit blog starter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/templates/svelte/sveltekit-commerce&quot;&gt;SvelteKit Commerce&lt;/a&gt; is an all-in-one starter kit for high-performance e-commerce sites built with SvelteKit by Vercel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Did we miss anything? Let us know on &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;See ya next month!&lt;/p&gt;</description><pubDate>Thu, 01 Sep 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年8月</title><link>https://svelte.dev/blog/whats-new-in-svelte-august-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;今月は盛り沢山です… 1.0 が完了する前に、SvelteKit の設計に大きな変更があります。まだご存知ないようでしたら、Rich さんの Discussion &lt;a href=&quot;https://github.com/sveltejs/kit/discussions/5748&quot;&gt;Fixing &lt;code&gt;load&lt;/code&gt;, and tightening up SvelteKit&amp;rsquo;s design before 1.0 #5748&lt;/a&gt; をチェックしてみてください。&lt;/p&gt;
&lt;p&gt;また、&lt;a href=&quot;https://github.com/dummdidumm&quot;&gt;@dummdidumm&lt;/a&gt; (Simon H) 氏が &lt;a href=&quot;https://twitter.com/dummdidumm_/status/1549041206348222464&quot;&gt;Vercel に加わり、フルタイムで Svelte に取り組むことになりました&lt;/a&gt;。そして &lt;a href=&quot;https://github.com/tcc-sejohnson&quot;&gt;@tcc-sejohnson&lt;/a&gt; 氏が SvelteKit メンテナーのグループに加わりました! Svelte と SvelteKit の開発に専念できるメンテナーが増え、すでに大きなインパクトを与えています。7月には、SvelteKit の開始以来、3番目に大きな変更がありました!&lt;/p&gt;
&lt;p&gt;それではアップデートの残りを見ていきましょう…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Dynamically imported styles are now included during SSR (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5138&quot;&gt;#5138&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improvements to routes and prop updates to prevent unnecessary rerendering (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5654&quot;&gt;#5654&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/5671&quot;&gt;#5671&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lots of improvements to error handling (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4665&quot;&gt;#4665&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/5622&quot;&gt;#5622&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/5619&quot;&gt;#5619&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/5616&quot;&gt;#5616&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Custom Vite modes are now respected in SSR builds (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5602&quot;&gt;#5602&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Custom Vite config locations are now supported (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5705&quot;&gt;#5705&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Private environment variables (aka &amp;ldquo;secrets&amp;rdquo;) are now much more secure. Now if you accidentally import them to client-side code, you&amp;rsquo;ll see an error (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5663&quot;&gt;#5663&lt;/a&gt;, &lt;a href=&quot;/docs/kit/configuration#env&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Vercel&amp;rsquo;s v3 build output API is now being used in &lt;code&gt;adapter-vercel&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5514&quot;&gt;#5514&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vite-plugin-svelte&lt;/code&gt; has reached 1.0 and now supports Vite 3. You&amp;rsquo;ll notice new default ports for &lt;code&gt;dev&lt;/code&gt; (port 5173) and &lt;code&gt;preview&lt;/code&gt; (port 4173) (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5005&quot;&gt;#5005&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/CHANGELOG.md&quot;&gt;vite-plugin-svelte CHANGELOG&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-changes:&quot;&gt;&lt;span&gt;Breaking changes:&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-changes:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mode&lt;/code&gt;, &lt;code&gt;prod&lt;/code&gt; and &lt;code&gt;server&lt;/code&gt; are no longer available in &lt;code&gt;$app/env&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5602&quot;&gt;#5602&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte-kit&lt;/code&gt; CLI commands are now run using the &lt;code&gt;vite&lt;/code&gt; command and &lt;code&gt;vite.config.js&lt;/code&gt; is required. This will allow first-class support with other projects in the Vite ecosystem like Vitest and Storybook (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5332&quot;&gt;#5332&lt;/a&gt;, &lt;a href=&quot;/docs/kit/project-structure#Project-files-vite.config.js&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;endpointExtensions&lt;/code&gt; is now &lt;code&gt;moduleExtensions&lt;/code&gt; and can be used to filter param matchers (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5085&quot;&gt;#5085&lt;/a&gt;, &lt;a href=&quot;/docs/kit/configuration#moduleExtensions&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Node 16.9 is now the minimum version for SvelteKit (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5395&quot;&gt;#5395&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;%-encoded filenames are now allowed. If you had a &lt;code&gt;%&lt;/code&gt; in your route, you must now encode it with &lt;code&gt;%25&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5056&quot;&gt;#5056&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Endpoint method names are now uppercased to match HTTP specifications (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5513&quot;&gt;#5513&lt;/a&gt;, &lt;a href=&quot;/docs/kit/routing#server&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writeStatic&lt;/code&gt; has been removed to align with Vite&amp;rsquo;s config (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5618&quot;&gt;#5618&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;transformPage&lt;/code&gt; is now &lt;code&gt;transformPageChunk&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5657&quot;&gt;#5657&lt;/a&gt;, &lt;a href=&quot;/docs/kit/hooks#Server-hooks-handle&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;prepare&lt;/code&gt; script is no longer needed in &lt;code&gt;package.json&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5760&quot;&gt;#5760&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-node&lt;/code&gt; no longer does any compression while we wait for a &lt;a href=&quot;https://github.com/expressjs/compression/pull/183&quot;&gt;bug fix in the &lt;code&gt;compression&lt;/code&gt; library&lt;/a&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5506&quot;&gt;#5560&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;変更の全リストは、kit の &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte &amp;amp; Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@layer&lt;/code&gt; &lt;a href=&quot;https://developer.mozilla.org/ja/docs/Web/CSS/@layer&quot;&gt;CSS at-rule&lt;/a&gt; が Svelte コンポーネントでサポートされました (&lt;strong&gt;3.49.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/7504&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inert&lt;/code&gt; &lt;a href=&quot;https://html.spec.whatwg.org/multipage/interaction.html#the-inert-attribute&quot;&gt;HTML 属性&lt;/a&gt; が Svelte の language tool とプラグインでサポートされました (&lt;strong&gt;105.20.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1565&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Svelte プラグインは、利用可能な場合は、&lt;code&gt;SvelteComponentTyped&lt;/code&gt; の型付けを使用するようになりました (&lt;strong&gt;105.19.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1548&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pocketbase/pocketbase&quot;&gt;PocketBase&lt;/a&gt; is an open source Go backend with a single file and an admin dashboard built with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.playhondo.com/how-to-play&quot;&gt;Hondo&lt;/a&gt; is a word guessing game with multiple rounds&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gereleth/hexapipes&quot;&gt;Hexapipes&lt;/a&gt; is a site for playing hexagonal pipes puzzle&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mordon.app/&quot;&gt;Mail Must Move&lt;/a&gt; is an email made for those who want to get more done&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/brysonbw/vscode-jot-down&quot;&gt;Jot Down&lt;/a&gt; is a Visual Studio Code extension for quick and simple note taking&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kadium.kasper.space/&quot;&gt;Kadium&lt;/a&gt; is an app for staying on top of YouTube channels&amp;rsquo; uploads&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://1mets10.avrotros.nl/&quot;&gt;Samen zjin we #1metS10&lt;/a&gt; is a campaign website to support S10, the dutch Eurovision finalist, by sending a drawing or a wish&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://onwritingcode.com/&quot;&gt;On Writing Code&lt;/a&gt; is an interactive website to learn programming design patterns&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/novacbn/svelte-in-motion&quot;&gt;Svelte-In-Motion&lt;/a&gt; lets you create Svelte-animated videos in your browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Nico-Mayer/svelte-terminal&quot;&gt;Svelte Terminal&lt;/a&gt; is a terminal-like website&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bulletlist.com/&quot;&gt;Bulletlist&lt;/a&gt; is a simple tool with a single purpose: making lists&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/probablykasper/remind-me-again&quot;&gt;Remind Me Again&lt;/a&gt; is an app for toggleable reminders on Mac, Linux and Windows&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://heyweek.com/&quot;&gt;Heyweek&lt;/a&gt; is a timetracking app built for freelancers craving that extra pizzazz&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Starring the Svelte team&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/the-svelte-documentary-is-out&quot;&gt;The Svelte Documentary is out!&lt;/a&gt; on Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/docs/beginner-sveltekit&quot;&gt;Beginner SvelteKit&lt;/a&gt; by Vercel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://prismic.io/blog/try-svelte-build-game&quot;&gt;Challenge: Explore Svelte by Building a Bubble Popping Game&lt;/a&gt; by Brittney Postma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3foVDSknGEY&quot;&gt;Let&amp;rsquo;s write a Client-side Routing Library with Svelte&lt;/a&gt; by lihautan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltesirens.dev/event/testing-in-svelte&quot;&gt;Svelte Sirens July Talk - Testing in Svelte with Jess Sachs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RkD88ARvucM&quot;&gt;10 Awesome Svelte UI Component Libraries&lt;/a&gt; by LevelUpTuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=VizuTy3uSNE&quot;&gt;Learn How SvelteKit Works&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=XnVxDLTgCgo&quot;&gt;SvelteKit Endpoints&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=L4F5dSu0FcQ&quot;&gt;SvelteKit using TS, and Storybook setup&lt;/a&gt; by Jarrod Kane&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=prsXVk1fdW4&quot;&gt;Building Apps with Svelte!&lt;/a&gt; by Simon Grimm&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Y98KipzwVdM&quot;&gt;SvelteKit authentication, the better way - Tutorial&lt;/a&gt; by Pilcrow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/assorted-svelte-demos/&quot;&gt;Some assorted Svelte demos&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maier.tech/posts/three-ways-to-bootstrap-a-svelte-project&quot;&gt;Three ways to bootstrap a Svelte project&lt;/a&gt; by Thilo Maier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bootcamp.uxdesign.cc/design-build-an-app-with-svelte-ecd7ed0729da&quot;&gt;Design &amp;amp; build an app with Svelte&lt;/a&gt; by Hugo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/maxcore/define-routes-via-js-in-sveltekit-27e9&quot;&gt;Define routes via JS in SvelteKit&lt;/a&gt; by Max Core&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/theether0/integrating-telegram-api-with-sveltekit-5gb&quot;&gt;Integrating Telegram api with SvelteKit&lt;/a&gt; by Shivam Meena&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/sveltekit-ssg/&quot;&gt;SvelteKit SSG: how to Prerender your SvelteKit Site&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/adeo-tech/adeo-design-system-building-a-web-component-library-with-svelte-and-rollup-72d65de50163&quot;&gt;ADEO Design System: Building a Web Component library with Svelte and Rollup&lt;/a&gt; by Mohamed Mokhtari&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thevalleyofcode.com/svelte/&quot;&gt;The Svelte Handbook&lt;/a&gt; by The Valley of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://davipon.hashnode.dev/test-svelte-component-using-vitest-playwright&quot;&gt;Test Svelte Component Using Vitest &amp;amp; Playwright&lt;/a&gt; by David Peng&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nathancahill.com/phoenix-svelte&quot;&gt;Transitional Apps with Phoenix and Svelte&lt;/a&gt; by Nathan Cahill&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Tech Demos&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.the-guild.dev/blog/houdini-and-kitql&quot;&gt;Bringing the best GraphQL experience to Svelte&lt;/a&gt; by The Guild&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stylifycss.com/blog/style-your-svelte-website-faster-with-stylify-css/&quot;&gt;Style your Svelte website faster with Stylify CSS&lt;/a&gt; by Stylify&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://supabase.com/blog/2022/07/13/supabase-auth-helpers-with-sveltekit-support&quot;&gt;Revamped Auth Helpers for Supabase (with SvelteKit support)&lt;/a&gt; by Supabase&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pilcrowOnPaper/lucia-sveltekit&quot;&gt;Lucia&lt;/a&gt; is a simple, JWT based authentication library for SvelteKit that connects your SvelteKit app with your database&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Brain-Bones/skeleton&quot;&gt;Skeleton&lt;/a&gt; is a UI component library for use with Svelte + Tailwind&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pass-composer.vercel.app/&quot;&gt;pass-composer&lt;/a&gt; helps you compose your postprocessing passes for threlte scenes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://whenderson.github.io/stores-mono/&quot;&gt;@crikey/stores-*&lt;/a&gt; is a collection of libraries to extend Svelte stores for common use-cases&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shaun-wild/svelte-chrome-storage&quot;&gt;Svelte Chrome Storage&lt;/a&gt; is a lightweight abstraction between Svelte stores and Chrome extension storage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/restspace/svelte-schema-form&quot;&gt;Svelte Schema Form&lt;/a&gt; is a form generator for JSON schema&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wobsoriano/svelte-gesture&quot;&gt;svelte-gesture&lt;/a&gt; is a library that lets you bind richer mouse and touch events to any component or view&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ThaUnknown/snap-layout&quot;&gt;Snap Layout&lt;/a&gt; and &lt;a href=&quot;https://github.com/ThaUnknown/universal-title-bar&quot;&gt;universal-title-bar&lt;/a&gt; bring Windows 11 snap layout and title features to webapps and PWAs. Both can be imported as a &lt;code&gt;.svelte&lt;/code&gt; module or as a web component&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gornostay25/svelte-adapter-bun&quot;&gt;svelte-adapter-bun&lt;/a&gt; is an adapter for SvelteKit apps that generates a standalone Bun server&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/json2dir&quot;&gt;json2dir&lt;/a&gt; converts JSON objects into directory trees&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rohitpotato/svelte-command-palette&quot;&gt;Svelte Command Palette&lt;/a&gt; is a drop-in command palette component&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/untemps/svelte-use-drop-outside&quot;&gt;svelte-use-drop-outside&lt;/a&gt; is a Svelte action to drop an element outside an area&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/muonw/powertable&quot;&gt;PowerTable&lt;/a&gt; is a JavaScript component that turns JSON data into an interactive HTML table&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rajasegar/svelte-slides&quot;&gt;svelte-slides&lt;/a&gt; is a slide show template for Svelte using Reveal.js&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=webmaek.svelte-theme-light&quot;&gt;Svelte Theme Light&lt;/a&gt; is a Visual Studio Code theme based on the Svelte REPL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もし見落としがありましたら、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; か &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; にどうぞ!&lt;/p&gt;
&lt;p&gt;9月に何かやりたいことをお探しでしたら、ストックホルムで開催される Svelte Summit に参加してみませんか! &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;チケットはこちらです&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;また来月!&lt;/p&gt;</description><pubDate>Mon, 01 Aug 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年7月</title><link>https://svelte.dev/blog/whats-new-in-svelte-july-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;SSR の高速化から SvelteKit における Vitest と Storybook のサポートまで、今月のニュースレターは盛り沢山です…&lt;/p&gt;
&lt;p&gt;それでは見ていきましょう!&lt;/p&gt;
&lt;h2 id=&quot;OpenCollective-funding-drives-Svelte-forward&quot;&gt;&lt;span&gt;OpenCollective funding drives Svelte forward&lt;/span&gt;&lt;a href=&quot;#OpenCollective-funding-drives-Svelte-forward&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte の支援者の方々は、約 $80,000 を &lt;a href=&quot;https://opencollective.com/svelte&quot;&gt;OpenCollective のプロジェクト&lt;/a&gt; に寄付してくれました。この資金が、Svelte を有意義に前進させるために使用されていることを、私たちは嬉しく思っています。&lt;strong&gt;&lt;a href=&quot;https://github.com/gtm-nayan&quot;&gt;@gtm-nayan&lt;/a&gt;&lt;/strong&gt; 氏は SvelteKit を 1.0 レベルに安定させるため、プロジェクトの paid contributor として先月から issue のトリアージと修正を行っています! @gtm-nayan はずっと長い間 Svelte コミュニティのアクティブなメンバーであり、私たちの Discord サーバーの運営を助ける bot を書いていることでも知られています。今回の資金提供により、彼がより多くの時間を Svelte に使えるようになったことを嬉しく思います。&lt;/p&gt;
&lt;p&gt;また、OpenCollective の資金を活用して、Svelte のコアメンテナーが秋の &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt; に現地参加できるようにする予定です。寄付してくださった皆様、ありがとうございます!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte-Language-Tools&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte &amp;amp; Language Tools&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/tutorial&quot;&gt;The tutorial&lt;/a&gt; is a new way to learn Svelte and SvelteKit from the ground up that is currently in development&lt;/li&gt;
&lt;li&gt;Faster SSR is coming in the next Svelte release. A PR two years in the making, resulting in up to 3x faster rendering in some benchmarking tests! (&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/5701&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Find File References&amp;rdquo; (&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/language-server-0.14.28&quot;&gt;0.14.28&lt;/a&gt;) and &amp;ldquo;Find Component References&amp;rdquo; (&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/language-server-0.14.29&quot;&gt;0.14.29&lt;/a&gt;) in the latest versions of the Svelte extension shows where Svelte files and components have been imported and used (&lt;a href=&quot;https://twitter.com/dummdidumm_/status/1532459709604716544/photo/1&quot;&gt;Demo&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Svelte extension now supports CSS path completion (&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/language-server-0.14.29&quot;&gt;0.14.29&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Vitest や Storybook などの、Vite エコシステムの他のツールと SvelteKit の総合運用を可能にする &lt;code&gt;@sveltejs/kit/experimental/vite&lt;/code&gt; が作成されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5094&quot;&gt;#5094&lt;/a&gt;)。この機能を experimental から外して全てのユーザーに対して &lt;code&gt;vite.config.js&lt;/code&gt; を必須にするか検討するため、この機能が動作するか、役に立つかどうか、&lt;a href=&quot;https://github.com/sveltejs/kit/issues/5184&quot;&gt;フィードバック&lt;/a&gt; をお願いします&lt;/li&gt;
&lt;li&gt;エンドポイントで Streaming がサポートされました (&lt;a href=&quot;https://github.com/sveltejs/kit/issues/3419&quot;&gt;#3419&lt;/a&gt;)。これは Undici の &lt;code&gt;fetch&lt;/code&gt; 実装に切り替えることで可能になりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5117&quot;&gt;#5117&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;開発環境において、静的なアセットをシンボリックリンクできるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5089&quot;&gt;#5089&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;server&lt;/code&gt; と &lt;code&gt;prod&lt;/code&gt; 環境変数が利用できるようになりました。これは &lt;code&gt;browser&lt;/code&gt; と &lt;code&gt;dev&lt;/code&gt; にそれぞれ対応するものです (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5251&quot;&gt;#5251&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.virtualmaker.net/&quot;&gt;Virtual Maker&lt;/a&gt; lets you make interactive 3D and VR scenes in your browser&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/v7ic2s/apple_beta_music_uses_svelte/&quot;&gt;Apple Beta Music&lt;/a&gt; appears to have been written in some combination of Svelte and web components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.itatiaia.com.br/&quot;&gt;Itatiaia&lt;/a&gt;, the largest radio station in the country of Brazil just relaunched its news portal in SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pronauns.com&quot;&gt;Pronauns&lt;/a&gt; helps you learn pronunciation online with IPA to speak better and sound more native&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.immich.app/&quot;&gt;Immich&lt;/a&gt; is an open source, high performance self-hosted backup solution for videos and photos on your mobile phone&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leovoon/link-shortener&quot;&gt;Pendek&lt;/a&gt; is a link shortener built with SvelteKit, Prisma and PlanetScale&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://grunfy.com/tools&quot;&gt;Grunfy&lt;/a&gt; is a set of guitar tools - recently migrated to SvelteKit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=co.broadcastapp.Radiant&quot;&gt;Radiant: The Future of Radio&lt;/a&gt; is a personal radio station app built with Svelte and Capacitor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://imperfectreminders.mildlyupset.com/&quot;&gt;Imperfect Reminders&lt;/a&gt; is a todo list for things that are only sort of time sensitive&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/janosh/periodic-table&quot;&gt;Periodic Table&lt;/a&gt; is a dynamic Periodic Table component written in Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/open-source-labs/Svelvet&quot;&gt;Svelvet&lt;/a&gt; is a lightweight Svelte component library for building interactive node-based diagrams&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bluwy/publint&quot;&gt;publint&lt;/a&gt; lints for packaging errors to ensure compatibility across environments&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alextana/spotify-playlist-creator&quot;&gt;Playlistr&lt;/a&gt; helps manage and create Spotify playlists&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/geoffrich_/status/1534980702785003520&quot;&gt;Geoff Rich&amp;rsquo;s page transitions demo&lt;/a&gt; shows how SvelteKit&amp;rsquo;s &lt;code&gt;beforeNavigate&lt;/code&gt; / &lt;code&gt;afterNavigate&lt;/code&gt; hooks can make smooth document transitions in the latest Chrome Canary&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/a_warnes/status/1536215896078811137&quot;&gt;Menger Sponge&lt;/a&gt; is a fractal built with Threlte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Want to contribute to a site using the latest SvelteKit features? &lt;a href=&quot;https://github.com/svelte-society/sveltesociety.dev/issues&quot;&gt;Help build the Svelte Society site&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;Starring the Svelte team&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=kMlkCYL9qo0&quot;&gt;Svelte Origins: A JavaScript Documentary&lt;/a&gt; by OfferZen Origins&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://portal.gitnation.org/contents/full-stack-documentation&quot;&gt;Full Stack Documentation (announcing learn.svelte.dev)&lt;/a&gt; by Rich Harris @ JSNation 2022&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/all-about-the-sirens&quot;&gt;All About the Sirens&lt;/a&gt; by Svelte Radio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=yQRf2wmTu5w&quot;&gt;SvelteKit Page Endpoints&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=UHX9TJ0BxZY&quot;&gt;Named Layouts&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=CXaCstU5pcw&quot;&gt;Passing data from page component to layout component with $page.stuff&lt;/a&gt; by lihautan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=f6prqYlbTE4&quot;&gt;🍞 &amp;amp; 🧈: Magically load data with SvelteKit Endpoints&lt;/a&gt; by Johnny Magrippis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7tsrwrx5HtQ&quot;&gt;Svelte for React developers&lt;/a&gt; by frontendtier&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=1rKRarJJFrY&amp;list=PLIGDNOJWiL1-7zCgdR7MKuho-tPC6Ra6C&amp;index=1&quot;&gt;Learn Svelte JS || JavaScript Compiler for Building Front end Applications&lt;/a&gt; by Code with tsksharma&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=T935Ya4W5X0&amp;list=PLA9WiRZ-IS_zKrDzhOhV5RGKKTHNIyTDO&amp;index=1&quot;&gt;SvelteKit Authentication&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=CqgsWFrwQIU&quot;&gt;Svelte + websockets: Build a real-time Auction app&lt;/a&gt; by Evgeny Maksimov&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://paullj.github.io/posts/up-to-date-analytics-on-a-static-website&quot;&gt;Up-To-Date Analytics on a Static Website&lt;/a&gt; and &lt;a href=&quot;https://paullj.github.io/posts/fast-lightweight-fuzzy-search-using-fuse.js&quot;&gt;Fast, Lightweight Fuzzy Search using Fuse.js&lt;/a&gt; by paullj&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chientrm.medium.com/use-sveltekit-as-a-handler-in-the-expressjs-project-15524b01128f&quot;&gt;Use SvelteKit as a handler in the ExpressJs project&lt;/a&gt; by Tran Chien&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Stijn-B/tauri-sveltekit-example&quot;&gt;Creating a desktop application with Tauri and SvelteKit&lt;/a&gt; by Stijn-B&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/samuba/awesome-svelte-stores&quot;&gt;List of awesome Svelte stores&lt;/a&gt; by samuba&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/sveltekit-content-security-policy/&quot;&gt;SvelteKit Content Security Policy: CSP for XSS Protection&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kudadam.com/blog/understanding-sveltekit-hooks&quot;&gt;SvelteKit Hooks. Everything You Need To Know&lt;/a&gt; by Lucretius K. Biah&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mathiaspicker.com/posts/3-tips-for-upgrading-the-performance-of-your-svelte-stores&quot;&gt;3 tips for upgrading the performance of your Svelte stores&lt;/a&gt; by Mathias Picker&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oslabs-beta/svend3r&quot;&gt;Svend3r&lt;/a&gt; is a plug and play D3 charting library for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/davipon/svelte-hover-draw-svg&quot;&gt;Svelte Hover Draw SVG&lt;/a&gt; is a lightweight Svelte component to draw SVG on hover&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-french-toast.com/&quot;&gt;Svelte French Toast&lt;/a&gt; provides buttery smooth toast notifications that are lightweight, customizable, and beautiful by default&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svooltip.vercel.app/&quot;&gt;SVooltip&lt;/a&gt; is a basic Svelte tooltip directive, powered by Floating UI&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/anotherempty/svelte-brick-gallery&quot;&gt;Svelte Brick Gallery&lt;/a&gt; is a masonry-like image gallery component for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/enyo/use-vest&quot;&gt;use-vest&lt;/a&gt; is a Svelte action for Vest - a library that makes it easy to validate forms and show errors when necessary&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svelidate/svelidate&quot;&gt;Svelidate&lt;/a&gt; is a simple and lightweight form validation library for Svelte with no dependencies&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oslabs-beta/Svve11&quot;&gt;Svve11&lt;/a&gt; is an &amp;ldquo;accessibility-first&amp;rdquo; component library for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Valexr/Slidy&quot;&gt;Slidy&lt;/a&gt; is a simple, configurable &amp;amp; reusable carousel sliding action script with templates &amp;amp; some useful plugins&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=brysonbw.svelte-component-snippets&quot;&gt;Svelte Component Snippets&lt;/a&gt; is a VS Code extension with access to common Svelte snippets&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Mitcheljager/svelte-confetti&quot;&gt;Svelte Confetti&lt;/a&gt; adds a little bit of flair to your app with some confetti 🎊&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もし見落としがありましたら、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; で教えてください。&lt;/p&gt;
&lt;p&gt;ストックホルムで開催される Svelte Summit に現地参加することもできますので、お忘れなく! Svelteの素晴らしいコンテンツでいっぱいの2日間に是非加わってください! &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;チケットはこちらです&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;また来月お会いしましょう!&lt;/p&gt;</description><pubDate>Fri, 01 Jul 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年6月</title><link>https://svelte.dev/blog/whats-new-in-svelte-june-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;先月 &lt;a href=&quot;https://www.youtube.com/watch?v=qqj2cBockqE&quot;&gt;Svelte Summit&lt;/a&gt; があったので、私たちは学んだことすべてをこの6月に適用する準備ができています! また、&lt;code&gt;createEventDispatcher&lt;/code&gt;、&lt;code&gt;@const&lt;/code&gt; 宣言 などの QOL を上げてくれる変更や、SvelteKit 1.0 に向けた大量の進捗があります。&lt;/p&gt;
&lt;p&gt;それでは見ていきましょう!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Custom events can now be cancelled in the &lt;code&gt;createEventDispatcher&lt;/code&gt; function (&lt;strong&gt;3.48.0&lt;/strong&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#run-time-svelte-createeventdispatcher&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/7064&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;{@const}&lt;/code&gt; tag can now be used in &lt;code&gt;{#if}&lt;/code&gt; blocks to conditionally define variables (&lt;strong&gt;3.48.0&lt;/strong&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#template-syntax-const&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/7451&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lots of bug fixes across &lt;code&gt;&amp;lt;svelte:element&amp;gt;&lt;/code&gt;, animations and various DOM elements. Check out the &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md#3480&quot;&gt;CHANGELOG&lt;/a&gt; for a deeper dive!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Vite 2.9.9 was released as one of the last Vite 2 releases. The Svelte team has been hard at work contributing to the Vite 3 release to make the integration between SvelteKit and Vite smoother than ever (&lt;a href=&quot;https://github.com/vitejs/vite/milestone/5&quot;&gt;Vite 3.0 Milestone&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config.kit.alias&lt;/code&gt; lets you more easily declare a custom alias to replace values in &lt;code&gt;import&lt;/code&gt; statements (&lt;a href=&quot;/docs/kit/configuration#alias&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4964&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Pages marked for prerendering will now fail during SSR at runtime (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4812&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-Changes&quot;&gt;&lt;span&gt;Breaking Changes&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-Changes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Node 14 is no longer supported (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4922&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Requests to &lt;code&gt;/favicon.ico&lt;/code&gt; will no longer be suppressed and will instead be handled as a valid route (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5046&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;AMP support has been moved to a separate &lt;code&gt;@sveltejs/amp&lt;/code&gt; package (&lt;a href=&quot;/docs/kit/seo#Manual-setup-AMP&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4710&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Generated types are now written to &lt;code&gt;_types&lt;/code&gt; directories - update your imports accordingly (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4705&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%svelte.head%&lt;/code&gt; and &lt;code&gt;%svelte.body%&lt;/code&gt; are now &lt;code&gt;%sveltekit.head%&lt;/code&gt; and &lt;code&gt;%sveltekit.body%&lt;/code&gt; in &lt;code&gt;app.html&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/5016/&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LoadInput&lt;/code&gt; is now &lt;code&gt;LoadEvent&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Dropped support for Wrangler 1 in favor of Wrangler 2 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4887&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jim-fx/plantarium&quot;&gt;Plantarium&lt;/a&gt; は、3D の植物を手続き的に生成するためのツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AlexWarnes/lamina-spatula&quot;&gt;SPATULA&lt;/a&gt; は、lamina と threejs を使用するプロジェクトであればコードマテリアルとしてポータブルなシェーディングマテリアルを構築するためのツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://waaard.com/&quot;&gt;Waaard&lt;/a&gt; は、様々な SSO プロバイダーでリンクを保護できるようにし、それを送信することができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/magidoc-org/magidoc&quot;&gt;Magidoc&lt;/a&gt; は、高速かつ高いカスタマイズ性を備えた GraphQL ドキュメントジェネレーターです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eyssette/myMarkmap&quot;&gt;myMarkmap&lt;/a&gt; は、マークアップ向けのカスタムエディタで、SvelteKit で構築されています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://passshare.mynt.pw/&quot;&gt;PassShare&lt;/a&gt; では、あなたのパスワードをあなたの友人に、安全かつ効率的に共有することができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://beta.dashingos.com/&quot;&gt;DashingOS&lt;/a&gt; は、(Notion + CodeSandbox のような)ツールで、プロトタイプと文書化を一箇所で、素早く簡単に行うことができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/miunau/worker-kit-email&quot;&gt;worker-kit-email&lt;/a&gt; は、通常の SvelteKit のルート(routes)を使用して、トランザクショナルな email を開発するのに便利です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cyan-2048/kaios-weather-svelte&quot;&gt;kaios-weather-svelte&lt;/a&gt; は、KaiOS 向けのとても親しみやすい天気アプリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ANovokmet/svelte-gantt&quot;&gt;svelte-gantt&lt;/a&gt; は、軽量で高速かつインタラクティブなガントチャート/リソースブッキングコンポーネントです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ThaUnknown/miru&quot;&gt;Miru&lt;/a&gt; は、cats 向けの BitTorrent ストリーミングソフトウェアです&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;素晴らしい SvelteKit Web サイトに貢献してみませんか? &lt;a href=&quot;https://github.com/svelte-society/sveltesociety.dev/issues&quot;&gt;Svelte Society のサイトの構築を手伝っていただけませんか&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://component-party.dev/&quot;&gt;Component party&lt;/a&gt; is a site that compares common patterns in different frameworks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/style-prop-defaults/&quot;&gt;Quick tip: style prop defaults&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ghostdev.xyz/posts/working-with-reduced-motion-in-svelte&quot;&gt;Working with reduced motion in Svelte&lt;/a&gt; by GHOST&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.taniarascia.com/musical-instrument-web-audio-api/&quot;&gt;Building a Musical Instrument with the Web Audio API&lt;/a&gt; by Tania Rascia&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/alexwarnes/svelte-cubed-creating-an-accessible-and-consistent-experience-across-devices-42ae&quot;&gt;Svelte-Cubed: Creating an Accessible and Consistent Experience Across Devices&lt;/a&gt; and &lt;a href=&quot;https://dev.to/alexwarnes/svelte-cubed-loading-your-gltf-models-14lf&quot;&gt;Svelte-Cubed: Loading Your glTF Models&lt;/a&gt; by Alex Warnes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;From Svelte Society:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qqj2cBockqE&quot;&gt;The Svelte Summit Spring 2022 stream recording&lt;/a&gt; has been updated with chapter markers to make it easy to watch again and again&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=zIxzJzTnoxA&quot;&gt;The full recording of Svelte London, April 2022&lt;/a&gt; is up! Check out the amazing talks from across the Svelte London community&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/channel/UCfWH9lCsXN3j8oXq8dru82Q&quot;&gt;Persian Svelte Society&lt;/a&gt; is making Persian-language videos about Svelte&lt;/li&gt;
&lt;li&gt;Svelte Sirens has been talking monthly to creators and contributors across the Svelte Community:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=j0_1hfiEVWA&amp;list=PL8bMgX1kyZThkJ_Rk6AAFI4eY24g5XKwK&amp;index=5&quot;&gt;SvelteKit + Sanity.io: a match made in heaven&lt;/a&gt; on May 13&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=FUbHwwMALkk&quot;&gt;Slicing up your Svelte Sites with Prismic&lt;/a&gt; on May 20&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SnV_hMLVyqs&quot;&gt;Rendering your Svelte apps on Render&lt;/a&gt; on May 24&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aK0xXm3hPxk&amp;list=PL8bMgX1kyZThkJ_Rk6AAFI4eY24g5XKwK&amp;index=7&quot;&gt;The story behind the (unofficial) Svelte newsletter&lt;/a&gt; on May 27&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Across the Web:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=udYB24IMtsY&quot;&gt;Building vite-plugin-svelte-inspector&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=xhi0m1QZue0&quot;&gt;What is Singleton?&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=Ym-OnGUps2c&quot;&gt;What is Navigation?&lt;/a&gt; by lihautan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=JXvKBtTPr64&quot;&gt;Auto Import Components In Svelte Kit - Weekly Svelte&lt;/a&gt; by LevelUpTuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=5bQD3dCoyHA&quot;&gt;🧪 Test SvelteKit with TDD &amp;amp; VITEST 🧪&lt;/a&gt; by Johnny Magrippis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=l-x6H0fnqqQ&quot;&gt;Google Analytics With SvelteKit&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=mAcKzdW5fR8&quot;&gt;Using WebSockets With SvelteKit&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=T935Ya4W5X0&quot;&gt;SvelteKit Authentication Using Cookies&lt;/a&gt; and &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/ueu849/svelte_headless_ui_component_library/&quot;&gt;Svelte Headless UI Component Library&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=hKg_V3jouLk&quot;&gt;Named Layouts In Nested Routes in SvelteKit&lt;/a&gt; by The Svelte Junction&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/sveltekit-shiki-syntax-highlighting/&quot;&gt;SvelteKit Shiki Syntax Highlighting: Markdown Codeblocks&lt;/a&gt; and &lt;a href=&quot;https://rodneylab.com/svelte-capsize-styling/&quot;&gt;Svelte Capsize Styling: Typography Tooling&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Svelte Radio has been putting out weekly episodes:&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/the-adventures-of-running-a-svelte-meetup&quot;&gt;The Adventures of Running a Svelte Meetup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/the-other-rich-geoff&quot;&gt;The other Rich! Geoff! (feat. Geoff Rich)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/inspecting-svelte-code-with-dominik-g&quot;&gt;Inspecting Svelte Code with Dominik G.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/stores-galore&quot;&gt;Stores Galore&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thenewstack.io/svelte-and-the-future-of-front-end-development/&quot;&gt;Svelte and the Future of Frontend Development (feat. Rich Harris)&lt;/a&gt; from The New Stack&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jhubbardsf/vite-plugin-svelte-console-remover&quot;&gt;vite-plugin-svelte-console-remover&lt;/a&gt; is a Vite plugin that removes all console statements (log, group, dir, error, etc) from Svelte, JS, and TS files during build so they don&amp;rsquo;t leak into production&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bryanmylee/svelte-headless-table&quot;&gt;Svelte Headless Tables&lt;/a&gt; is an unopinionated and extensible data tables for Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nimeshnayaju/y-presence&quot;&gt;y-presence&lt;/a&gt; is a lightweight set of libraries to easily add presence (live cursors/avatars) to any web application (now with Svelte support!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oslabs-beta/Svelcro&quot;&gt;Svelcro&lt;/a&gt; is a component performance tracker for Svelte applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/orefalo/svelte-splitpanes&quot;&gt;Svelte-Splitpanes&lt;/a&gt; lets you create dynamic and predictable view panels to layout an application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ThaUnknown/svelte-miniplayer&quot;&gt;svelte-miniplayer&lt;/a&gt; is a lightweight, fast, resizable and draggable miniplayer for media&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ThaUnknown/svelte-keybinds&quot;&gt;svelte-keybinds&lt;/a&gt; is a minimalistic keybinding interface, with rebinding and saving&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jhubbardsf/svelte-speech-recognition&quot;&gt;svelte-speech-recognition&lt;/a&gt; converts speech from the microphone to text and makes it available to your Svelte components&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Special-Feature:-Svelte-Stores&quot;&gt;&lt;span&gt;Special Feature: Svelte Stores&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Special-Feature:-Svelte-Stores&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;There were lots of Svelte stores released this month from a number of authors...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/feltcoop/svelte-mutable-store&quot;&gt;svelte-mutable-store&lt;/a&gt; is a Svelte store for mutable values with the &lt;code&gt;immutable&lt;/code&gt; compiler option&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/aredridel/svelte-damped-store&quot;&gt;svelte-damped-store&lt;/a&gt; is a derived writable store that can suspend updates while &lt;a href=&quot;https://github.com/aredridel/svelte-lens-store&quot;&gt;svelte-lens-store&lt;/a&gt; is a functional lens over Svelte stores&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/furudean/svelte-persistent-store&quot;&gt;svelte-persistent-store&lt;/a&gt; is a writable svelte store that saves and loads data from &lt;code&gt;Window.localStorage&lt;/code&gt; or &lt;code&gt;Window.sessionStorage&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もし見落としがありましたら、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; で教えてください。&lt;/p&gt;
&lt;p&gt;ストックホルムで開催される Svelte Summit に現地参加することもできますので、お忘れなく! Svelteの素晴らしいコンテンツでいっぱいの2日間に是非加わってください! &lt;a href=&quot;https://ti.to/svelte/svelte-summit-fall-edition&quot;&gt;チケットはこちらです&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;また来月お会いしましょう!&lt;/p&gt;</description><pubDate>Wed, 01 Jun 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年5月</title><link>https://svelte.dev/blog/whats-new-in-svelte-may-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;昨日 Svelte Summit があったので、シェアするニュースがたくさんあります！&lt;a href=&quot;https://www.youtube.com/sveltesociety&quot;&gt;Svelte Society YouTube Channel&lt;/a&gt; のレコーディングをチェックしてみてください。それでは、今月の更新情報をどうぞ…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in Svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;svelte:element&amp;gt;&lt;/code&gt; element lets you render an element of a dynamically specified type. This is useful, for example, when rendering rich text content from a CMS. Check out the &lt;a href=&quot;https://v4.svelte.dev/docs#template-syntax-svelte-element&quot;&gt;docs&lt;/a&gt; or the &lt;a href=&quot;/tutorial/svelte/svelte-element&quot;&gt;tutorial&lt;/a&gt; for more info (&lt;strong&gt;3.47.0&lt;/strong&gt;)!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Language-Tools-updates&quot;&gt;&lt;span&gt;Language Tools updates&lt;/span&gt;&lt;a href=&quot;#Language-Tools-updates&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;svelte:element&lt;/code&gt; と &lt;code&gt;sveltekit:reload&lt;/code&gt; がサポートされました&lt;/li&gt;
&lt;li&gt;無効な Svelte インポートパスが自動的に検知されるようになりました。以前の動作に戻したい場合は PR をご確認ください (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1448&quot;&gt;#1448&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source.sortImports&lt;/code&gt; によって、未使用のインポートを削除することなくインポートをソートできるようになりました (&lt;a href=&quot;https://github.com/sveltejs/language-tools/issues/1338&quot;&gt;#1338&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML 属性にカーソルを合わせたときに、TS のホバー情報ではなく HTML のホバー情報が表示されるようになり、より便利な情報が見られるようになりました (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1447&quot;&gt;#1447&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;VS Code で、&lt;code&gt;Insert Snippet&lt;/code&gt; コマンドを使って既存のコードブロックをコントロールフロータグでラップできるようになりました (&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/1373&quot;&gt;#1373&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Files and directories can now be named &lt;code&gt;__tests__&lt;/code&gt; and &lt;code&gt;__test__&lt;/code&gt; in the routes directory (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4438&quot;&gt;#4438&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Netlify Edge Functions (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4657&quot;&gt;#4657&lt;/a&gt;) and the Vercel build output API (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4663&quot;&gt;#4663&lt;/a&gt;) are now supported&lt;/li&gt;
&lt;li&gt;Custom &lt;code&gt;load&lt;/code&gt; dependencies, array of strings representing URLs the page depends on, are now available when loading routes (&lt;a href=&quot;/docs/kit/load#Rerunning-load-functions&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4536&quot;&gt;#4536&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-Changes&quot;&gt;&lt;span&gt;Breaking Changes&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-Changes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Validators are now called &amp;ldquo;matchers&amp;rdquo; (&lt;a href=&quot;/docs/kit/advanced-routing#Matching&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4358&quot;&gt;#4358&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__layout.reset&lt;/code&gt; has been replaced by named layouts - which have much configurability for shared layout elements (&lt;a href=&quot;/docs/kit/advanced-routing#Advanced-layouts-layout&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4388&quot;&gt;#4388&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Prerendering is now skipped for &lt;code&gt;rel=&amp;quot;external&amp;quot;&lt;/code&gt; links (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4545&quot;&gt;#4545&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxage&lt;/code&gt; is now &lt;code&gt;cache&lt;/code&gt; in &lt;code&gt;LoadOutput&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4690&quot;&gt;#4690&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ar.polyspectra.com/&quot;&gt;polySpectra AR&lt;/a&gt; は、AR のファイルを渡すことで 3D プリントを早くプロトタイプすることができます (&lt;a href=&quot;https://www.youtube.com/watch?v=VhYCeVGcG3E&quot;&gt;video demo&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/liveblocks/pixel-art-together&quot;&gt;Pixel Art Together&lt;/a&gt; は、複数人で使用できるフリーのピクセルアートエディタです。Liveblocks を使用しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tooling-manager.netlify.app/&quot;&gt;Tooling Manager&lt;/a&gt; では、あなたの JavaScript の技術スタックと、業界の標準的なボイラープレートを比較することができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://easy-portfolio.com/&quot;&gt;Easy Portfolio&lt;/a&gt; は、あなたの GitHub プロフィールをもとにポートフォリオを生成します&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/muttoni/float&quot;&gt;FLOAT&lt;/a&gt; は、イベント用の出席管理プログラムです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thecoinperspective.com/&quot;&gt;The Coin Perspective&lt;/a&gt; は暗号通貨の価格トラッカー兼ポートフォリオ管理ツールです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pbouillon/locutionis&quot;&gt;Locutionis&lt;/a&gt; は、修辞的表現法の小さなオンラインリファレンスです (フランス語)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://asm-editor.specy.app/&quot;&gt;ASM Editor&lt;/a&gt; は、M68K と MIPS 向けのオールインワンなエディタです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alombi/otium&quot;&gt;Otium&lt;/a&gt; はフリーでオープンソースのブックマネージャーであり、ブックシェルフオーガナイザーです。あなたの本や読みたい本を管理するのに役立ちます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Hugo-Dz/Sinwaver&quot;&gt;Sinwaver&lt;/a&gt; は正弦波の SVG を生成するジェネレーターです&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;モダンな SvelteKit webサイト に貢献してみたいですか？&lt;a href=&quot;https://github.com/svelte-society/sveltesociety.dev/issues&quot;&gt;Svelte Society のサイト構築を手伝っていただけませんか&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/clean-component-tips/&quot;&gt;4 tips for cleaner Svelte components&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.100ms.live/blog/clubhouse-clone-with-svelte&quot;&gt;Building a Clubhouse clone with Svelte and 100ms&lt;/a&gt; By Seun Taiwo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/sveltekit-uvu-testing/&quot;&gt;SvelteKit uvu Testing: Fast Component Unit Tests&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/pilcrowonpaper/sveltekit-jwt-authentication-tutorial-2m34&quot;&gt;SvelteKit JWT authentication tutorial&lt;/a&gt; by pilcrowOnPaper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/kit/discussions/4595&quot;&gt;Converting a Rollup-based Svelte SPA to SvelteKit&lt;/a&gt; by Simon H&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://davipon.hashnode.dev/add-commitint-commitizen-standard-version-and-husky-to-sveltekit-project&quot;&gt;Add Commitint, Commitizen, Standard Version, and Husky to SvelteKit Project&lt;/a&gt; by David Peng&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch or Hear&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=s6a1pbTVcUs&quot;&gt;Rich Harris - The Road to SvelteKit 1.0 (Svelte Society NYC)&lt;/a&gt; by Svelte Society&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codingcat.dev/course/intro-to-svelte&quot;&gt;Svelte Fundamentals - Intro to Svelte&lt;/a&gt; by Coding Cat&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ZiEROAqobwM&quot;&gt;Svelte Components Using Custom Markdown Renderers - Weekly Svelte&lt;/a&gt; by LevelUpTuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=f5iReGqjmG0&quot;&gt;Implementing {@const} in if block&lt;/a&gt; by lihautan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://podcast.20minjs.com/1952066/10417700-episode-6-svelte-and-contributing-to-open-source-with-geoff-rich&quot;&gt;Svelte and Contributing to Open-Source with Geoff Rich&lt;/a&gt; by 20minJS&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svelteness/kit-docs&quot;&gt;KitDocs&lt;/a&gt; は SvelteKit 向けのドキュメントのインテグレーションです。Svelte にとっての VitePress のようなものです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ghostdevv/svelte-copy&quot;&gt;Svelte Copy&lt;/a&gt; は、クリック/タップで簡単にクリップボードにコピーすることができるライブラリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oslabs-beta/svend3r&quot;&gt;Svend3r&lt;/a&gt; は D3 のパワーを活用した美しいビジュアライゼーションを提供してデータに命を吹き込み、それだけでなく、命令形のコードを抽象化できます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ghostdevv/svelte-hamburgers&quot;&gt;Svelte Hamburgers&lt;/a&gt; は Svelte 向けの簡単に使えるハンバーガーメニューコンポーネントです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/probablykasper/svelte-droplet&quot;&gt;Svelte Droplet&lt;/a&gt; は Svelte 向けのファイルドロップゾーンです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-mp3&quot;&gt;Svelte MP3&lt;/a&gt; は Svelte 向けの、軽量で高速かつシンプルでミニマルなオーディオプレーヤーです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Brisklemonade/svelteui&quot;&gt;SvelteUI&lt;/a&gt; は高機能でアクセシブルな Web アプリケーションをより速く構築するためのコンポーネントライブラリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/beynar/svelte-spotlight&quot;&gt;svelte-spotlight&lt;/a&gt; はヘッドレスな spotlight コンポーネントで、短時間でサイト全体の検索ボックスを構築するのに役立ちます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gspasov/svelte-pdf-simple&quot;&gt;svelte-pdf-simple&lt;/a&gt; は PDF を表示するためのシンプルな Svelte ライブラリで、コントロールがカスタマイズ可能です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/omer-g/persistent-svelte-store&quot;&gt;persistent-svelte-store&lt;/a&gt; は永続化のための汎用的な書き込み可能なストア(writable store)です。TypeScriptでスクラッチで構築されており、Svelte のストアコントラクト(store contract)に準拠しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ssssota/svelte-exmarkdown&quot;&gt;svelte-exmarkdown&lt;/a&gt; は markdown を動的にレンダリングするための Svelte コンポーネントです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leveluptuts/bookit&quot;&gt;Bookit&lt;/a&gt; は storybook ライクなコンポーネントレンダリング環境です。SvelteKit プロジェクトで動作するように細かくチューニングされています&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この続きは &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; で！&lt;/p&gt;
&lt;p&gt;オフラインでのコミュニティ参加を待ち望んでいた方に朗報です。ついに Svelte Summit がリアルワールドに移行します。是非、素晴らしい Svelte コンテンツ でいっぱいの2日間にご参加ください！&lt;a href=&quot;https://ti.to/svelte/svelte-summit-fall-edition&quot;&gt;チケットはこちら！&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また来月お会いしましょう！&lt;/p&gt;</description><pubDate>Sun, 01 May 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年4月</title><link>https://svelte.dev/blog/whats-new-in-svelte-april-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;今月は、SvelteKit のページプロパティの扱い方に変更がありました。フォールスルールート(fallthrough routes)を必要とするユースケースの最後の難関「パラメータプロパティの検証」が、より具体的なソリューションに置き換えられました。&lt;/p&gt;
&lt;p&gt;より詳細な情報と、その他 Svelte の新機能について見ていきましょう…&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Param matchers allow you to check if a url parameter matches before rendering a page - replacing the need for fallthrough routes for this purpose (&lt;a href=&quot;/docs/kit/advanced-routing#Matching&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4334&quot;&gt;#4334&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Explicit redirects can now be handled directly from endpoints (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4260&quot;&gt;#4260&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte-kit sync&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4182&quot;&gt;#4182&lt;/a&gt;), TypeScript 4.6 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4190&quot;&gt;#4190&lt;/a&gt;) and Vite 2.9 were released - adding non-blocking dependency optimization and experimental CSS source maps in dev mode as well as a number of bug fixes contributed by the SvelteKit team (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4468&quot;&gt;#4468&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-New-Config-Options&quot;&gt;&lt;span&gt;New Config Options&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-New-Config-Options&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;outDir&lt;/code&gt; fixes path issues in monorepos and other situations where the desired output directory is outside the project directory (&lt;a href=&quot;/docs/kit/configuration#outDir&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4176&quot;&gt;#4176&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;endpointExtensions&lt;/code&gt; prevents files other than .js and .ts files from being treated as endpoints, unless you specify &lt;code&gt;endpointExtensions&lt;/code&gt; (&lt;a href=&quot;https://kit.svelte.dev/docs/configuration#endpointextensions&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4197&quot;&gt;#4197&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prerender.default&lt;/code&gt; lets you prerender every page without having to write &lt;code&gt;export const prerender = true&lt;/code&gt; in every page file (&lt;a href=&quot;/docs/kit/configuration#prerender&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/4192&quot;&gt;#4192&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-Changes&quot;&gt;&lt;span&gt;Breaking Changes&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-Changes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;フォールスルールート(Fallthrough routes)が削除されました。マイグレーションのための tips については、PR を確認してみてください (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4330&quot;&gt;#4330&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tabindex=&amp;quot;-1&amp;quot;&lt;/code&gt; がナビゲーションの間 &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; にのみ追加されるようになります (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4140&quot;&gt;#4140&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4184&quot;&gt;#4184&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Adapter は &lt;code&gt;getClientAddress&lt;/code&gt; 関数を提供する必要があります (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4289&quot;&gt;#4289&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;InputProps&lt;/code&gt; と &lt;code&gt;OutputProps&lt;/code&gt; は、生成される &lt;code&gt;Load&lt;/code&gt; において別々に型付けされるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4305&quot;&gt;#4305&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;\$&lt;/code&gt; 文字が動的なパラメータとして使えなくなりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4334&quot;&gt;#4334&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte-kit package&lt;/code&gt; が experimental としてマークされ、Kit 1.0 以降に変更があっても breaking と見なされません (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4164&quot;&gt;#4164&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;New-across-the-Svelte-ecosystem&quot;&gt;&lt;span&gt;New across the Svelte ecosystem&lt;/span&gt;&lt;a href=&quot;#New-across-the-Svelte-ecosystem&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Svelte: TypeScript、Svelte plugin ユーザー向けに新しい型が多く追加されました。&lt;code&gt;style:&lt;/code&gt; ディレクティブや Svelte Actions も含まれます (&lt;strong&gt;3.46.4&lt;/strong&gt;、&lt;strong&gt;3.46.5&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Language Tools: Svelte のプロジェクトファイルを、TS ファイルでインポートしていなくても参照(reference)からインポート/検索できるようになりました (&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-105.13.0&quot;&gt;105.13.0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Language Tools: html で、 &lt;code&gt;&amp;lt;!--#region--&amp;gt;&lt;/code&gt; / &lt;code&gt;&amp;lt;!--#endregion--&amp;gt;&lt;/code&gt; で折りたたみができるようになりました (&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-105.13.0&quot;&gt;105.13.0&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites-built-with-Svelte&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites built with Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites-built-with-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://launcher.team/&quot;&gt;Launcher&lt;/a&gt; はオープンソースのアプリランチャーです。SvelteKit、Prisma、Tailwind を使用しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://paaster.io/&quot;&gt;Paaster&lt;/a&gt; は end to end で暗号化された pastebin で、デフォルトで安全です。Svelte、Vite、TypeScript、Python、Starlette、rclone、Docker で構築されています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/berlyozzy/Simple-AF-Video-Converter&quot;&gt;Simple AF Video Converter&lt;/a&gt; は ffmpeg.wasm の Electron ラッパーです。フォーマット間の動画変換を簡単に行うことができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/streamchaser/streamchaser&quot;&gt;Streamchaser&lt;/a&gt; は、一元化されたエンターテイメントテクノロジープラットフォームを通じて、映画やシリーズ、ドキュメンタリーなどの検索をシンプルにすることを追求しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/V-Py/svelte-material-color-picker&quot;&gt;Svelte Color Picker&lt;/a&gt; はシンプルなカラーピッカーで、Svelteで構築されています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mcmxcdev/ConcertMash&quot;&gt;ConcertMash&lt;/a&gt; は、Spotify API を使用してあなたが参加する予定のコンサートに基づいた新しいプレイリストを生成する小さな web サイトです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://modulus.vision/&quot;&gt;Modulus&lt;/a&gt; はデザイン+コードのシンクタンクで、デザインとテクノロジーを進化させることを主なミッションとしています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.multiply.us/&quot;&gt;Multiply&lt;/a&gt; はカルチャーのスピードに合わせた PR とソーシャルの総合エージェンシーです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.yia.co.nz/&quot;&gt;yia!&lt;/a&gt; はニュージーランドの Young Innovator Award コンペティションです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.writetorussia.org/index&quot;&gt;Write to Russia&lt;/a&gt; は、パブリックな &lt;code&gt;.ru&lt;/code&gt; のメールアドレスとやり取りするためのコミュニティメール作成プラットフォームです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Petros-K/markdown-playground&quot;&gt;Markdown Playground&lt;/a&gt; は、markdown 色々試してみるのに特化したオンラインの playground です &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rathermisty.com/&quot;&gt;RatherMisty&lt;/a&gt; は装飾を省いた天気予報アプリで、Open-Meteo の気象データを使用しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MauritsWilke/mcpfp&quot;&gt;Minecraft Profile Pic (MCPFP)&lt;/a&gt; は Minecraft のプロフィール画像を簡単に生成できるサイトです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jpaquim/svelte-webgl-fluid-simulation&quot;&gt;WebGL Fluid Simulation&lt;/a&gt; は様々な設定が可能な流体シミュレーションで、Svelte と WebGL で構築されています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/perbyhring/status/1504754949791621120&quot;&gt;この @NobelPeaceOslo の展示&lt;/a&gt; は、プリントグラフィックス、プロジェクションモーショングラフィックス、パーティクルアニメーション、ジェネレーティブサウンドデザインを用いて構築されています&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;モダンな SvelteKit webサイト に貢献してみたいですか？&lt;a href=&quot;https://github.com/svelte-society/sveltesociety.dev/issues&quot;&gt;Svelte Society のサイト構築を手伝っていただけませんか&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;To Attend&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit: Spring&lt;/a&gt; が2022年4月30日に開催されます！&lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;YouTube&lt;/a&gt; と Discord で、5回目のバーチャルな Svelte カンファレンスに是非ご参加ください 🍾&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ivanhofer/sveltekit-typescript-showcase&quot;&gt;Svelte(Kit) TypeScript Showcase + general TypeScript tips&lt;/a&gt; by Hofer Ivan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/local-constants/&quot;&gt;Local constants in Svelte with the @const tag&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://render.com/blog/svelte-design-patterns&quot;&gt;Design Patterns for Building Reusable Svelte Components&lt;/a&gt; by Eric Liu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://labs.hamy.xyz/posts/svelte-is-better-than-react/&quot;&gt;Svelte is better than React&lt;/a&gt; by Hamilton Greene&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.connorrothschild.com/post/svelte-and-d3&quot;&gt;Making Visualizations Literally with Svelte and D3&lt;/a&gt; by Connor Rothschild&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://imfeld.dev/writing/svelte_deferred_transitions&quot;&gt;Coordinating Multiple Elements with Svelte Deferred Transitions&lt;/a&gt; by Daniel Imfeld&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/maciekgrzybek/animate-on-scroll-with-svelte-inview-266f&quot;&gt;Animate on scroll with Svelte Inview - Little Bits&lt;/a&gt; by Maciek Grzybek&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.captaincodeman.com/lazy-loading-firebase-with-sveltekit&quot;&gt;Lazy-Loading Firebase with SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.captaincodeman.com/headlessui-components-with-svelte&quot;&gt;HeadlessUI Components with Svelte&lt;/a&gt; by Captain Codeman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rodneylab.com/sveltekit-accessibility-testing/&quot;&gt;SvelteKit Accessibility Testing: Automated CI A11y Tests&lt;/a&gt; by Rodney Lab&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scottspence.com/posts/getting-started-with-kitql-and-graphcms&quot;&gt;Getting Started with KitQL and GraphCMS&lt;/a&gt; by Scott Spence&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/joshnuss/react-to-svelte-cheatsheet-1a2a&quot;&gt;React ⇆ Svelte Cheatsheet&lt;/a&gt; は、2つのライブラリの類似点と相違点のリストです - by Joshua Nussbaum&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mT4CLVHgtSg&quot;&gt;Svelte Extravaganza | Async&lt;/a&gt; by pngwn&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=y5SrUKcX_Co&quot;&gt;6 Svelte Packages You Should Know&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=DiSuwLlhOxs&quot;&gt;Basic React To Svelte Conversion&lt;/a&gt; by LevelUpTuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=j-9D5UDyVOM&quot;&gt;Page/Shadow Endpoint in SvelteKit&lt;/a&gt; by WebJeda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=p1aPfVyZ1IY&quot;&gt;Custom Svelte Store: Higher Order Store&lt;/a&gt; by lihautan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=bLBHecY4-ak&amp;list=PLA9WiRZ-IS_zXZZyW4qfj0akvOAtk6MFS&quot;&gt;SvelteKit For Beginners (Playlist)&lt;/a&gt; by Joy of Code - follow along with the &lt;a href=&quot;https://joyofcode.xyz/sveltekit-for-beginners&quot;&gt;blog guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MAHE4iQgh5Q&quot;&gt;Fullstack SvelteKit Auth 🔐 with Firebase &amp;amp; Magic Links! 🪄&lt;/a&gt; by Johnny Magrippis&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=N6Y3hqhZvNI&quot;&gt;Firebase Authentication in SvelteKit! Full Stack App&lt;/a&gt; by Ryan Boddy&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltable.io/&quot;&gt;SvelTable&lt;/a&gt; は多機能なデータテーブルコンポーネントで、Svelteで構築されています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Cybersteam00/svelte-cyberComp&quot;&gt;svelte-cyberComp&lt;/a&gt; はパワフルで軽量な Svelte コンポーネントで、Svelte と TypeScript で書かれています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shinokada/flowbite-svelte&quot;&gt;Flowbite Svelte&lt;/a&gt; は Svelte 向けの非公式な Flowbite コンポーネントライブラリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jbertovic/svelte-tide-project&quot;&gt;Svelte-Tide-Project&lt;/a&gt; は、フロントエンドに Svelte、バックエンドに Rust の Tide を使った スターター・テンプレートです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vhscom/fetch-inject#sveltekit&quot;&gt;Fetch Inject&lt;/a&gt; は非同期な JavaScript の依存関係を管理するためのパフォーマンス最適化の実装で、Svelte をサポートし始めました&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shinokada/svelte-utterances&quot;&gt;svelte-utterances&lt;/a&gt; は GitHub issues をベースにした軽量なコメントウィジェットです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/malipetek/liquivelte-vscode&quot;&gt;Liquivelte&lt;/a&gt; は、Svelte ライクなコンポーネントで Shopify のテーマを構築することができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/storyblok/storyblok-svelte&quot;&gt;@storyblok/svelte&lt;/a&gt; は、Storyblok API を使用するのに必要な Svelte SDK で、リアルタイムでビジュアル編集が可能となります&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svelte-on-solana/wallet-adapter&quot;&gt;@svelte-on-solana/wallet-adapter&lt;/a&gt; は Solana/Anchor アプリケーション向けのモジュラーな TypeScript wallet adapter と UI コンポーネント で、フレームワークとして SvelteJS を使用しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-lookat&quot;&gt;svelte-lookat&lt;/a&gt; は、その子要素がマウスカーソル(モバイルの場合はユーザーの顔)に追従するような div を作成します&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この続きは &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; で！&lt;/p&gt;
&lt;p&gt;また来月お会いしましょう！&lt;/p&gt;</description><pubDate>Fri, 01 Apr 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年3月</title><link>https://svelte.dev/blog/whats-new-in-svelte-march-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;発表: &lt;a href=&quot;https://www.sveltesummit.com/&quot;&gt;Svelte Summit Spring&lt;/a&gt; が 2022 年 4 月 30 日に開催されます。5 回目となるバーチャルな Svelte カンファレンスでは、&lt;a href=&quot;https://www.sveltesummit.com/#speakers&quot;&gt;発表者&lt;/a&gt;と&lt;a href=&quot;https://www.sveltesummit.com/sponsors&quot;&gt;スポンサー&lt;/a&gt;を募集中です。プロポーザルを書いてみませんか！&lt;/p&gt;
&lt;p&gt;また、長らく待ち望まれていたいくつかの機能が今月 SvelteKit に追加されました…それにはページエンドポイントも含まれています！これは &lt;code&gt;load&lt;/code&gt; 関数の動作を変えるもので、これにより、ベーシックなページにおけるデータの取得や、POST レスポンスからのリダイレクト、404 やその他のエラーのハンドリングなどがより簡単になります。&lt;/p&gt;
&lt;p&gt;他にも新機能やバグフィックスがございます、以下をご覧ください！&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;The docs are now searchable and multipage with type definitions and hoverable code examples - Check them out at &lt;a href=&quot;/docs/kit/&quot;&gt;svelte.dev/docs/kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Page endpoints significantly decrease the boilerplate needed when loading a page (&lt;a href=&quot;https://github.com/sveltejs/kit/issues/3532&quot;&gt;Issue&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/3679&quot;&gt;PR&lt;/a&gt;, &lt;a href=&quot;/docs/kit/routing#server&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Application versioning and update detection support lets you determine what to do when a route fails to load after an app update (&lt;a href=&quot;https://github.com/sveltejs/kit/issues/87&quot;&gt;Issue&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/3412&quot;&gt;PR&lt;/a&gt;, &lt;a href=&quot;/docs/kit/configuration#version&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new option in &lt;code&gt;npm init svelte@next&lt;/code&gt; will now set up Playwright automatically for testing (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/4056&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-Changes&quot;&gt;&lt;span&gt;Breaking Changes&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-Changes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;target&lt;/code&gt; option is no longer available. Instead, the &lt;code&gt;init&lt;/code&gt; script hydrates its &lt;code&gt;parentNode&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3674&quot;&gt;#3674&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;App-level types now live in the &lt;code&gt;App&lt;/code&gt; namespace which allows you to type global types like &lt;code&gt;Stuff&lt;/code&gt; or &lt;code&gt;Session&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3670&quot;&gt;#3670&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;JSONString&lt;/code&gt; is now &lt;code&gt;JSONValue&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3683&quot;&gt;#3683&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;createIndexFiles&lt;/code&gt; has been removed — it is now controlled by the &lt;code&gt;trailingSlash&lt;/code&gt; option (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3801&quot;&gt;#3801&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit will no longer exclude root-relative external links from prerendering, which will cause 404s if these URLs are intended to be served by a separate app. Use a custom &lt;a href=&quot;/docs/kit/configuration#prerender&quot;&gt;&lt;code&gt;prerender.onError&lt;/code&gt;&lt;/a&gt; handler if you need to ignore them (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3826&quot;&gt;#3826&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;New-in-Language-Tools&quot;&gt;&lt;span&gt;New in Language Tools&lt;/span&gt;&lt;a href=&quot;#New-in-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Svelte の language tool で、マークアップのプロパティへのアクセスが改善されました (&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-105.12.0&quot;&gt;105.12.0&lt;/a&gt;)。オートコンプリートに関するいくつかの既知の issue が解決します (&lt;a href=&quot;https://github.com/sveltejs/language-tools/issues/538&quot;&gt;#538&lt;/a&gt; / &lt;a href=&quot;https://github.com/sveltejs/language-tools/issues/1302&quot;&gt;#1302&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/open-source-labs/SvelteStorm&quot;&gt;SvelteStorm&lt;/a&gt; is specifically tailored to provide all of the essential tools a Svelte developer needs to build a Svelte application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Lleweraf/supachat&quot;&gt;Supachat&lt;/a&gt; is a real-time chat app using Svelte and Supabase&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://radicle.xyz/&quot;&gt;Radicle&lt;/a&gt; is a peer-to-peer stack for building software together&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://the-making-known.com/&quot;&gt;The Making Known&lt;/a&gt; is a narrated encounter with posters designed by the Nazi German government to communicate with the occupied nations of Belgium, France, and Luxembourg during the Second World War&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/V-Py/svelte-kanban&quot;&gt;Svelte Kanban&lt;/a&gt; is a simple Svelte Kanban made in pure CSS&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nvlgzr/fngrng&quot;&gt;fngrng&lt;/a&gt; is a typing trainer focussed on accuracy over speed&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/873988ce33db43f097c0ca69df57b3ac?version=3.46.4&quot;&gt;Generative grids&lt;/a&gt; is a neat little generative SVG grid in a Svelte REPL, with randomly generated color palettes and shapes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/BlockchainCommons/lifehash.info&quot;&gt;LifeHash&lt;/a&gt; is a method of hash visualization that creates beautiful, deterministic icons&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://typedwebhook.tools/&quot;&gt;TypedWebhook.tools&lt;/a&gt; is a webhook testing tool for checking payloads, with automatic type generation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/spiegelgraphics/speedskating&quot;&gt;Speedskating&lt;/a&gt; is an animation widget to show olympic speedskating runs. Built with Svelte, D3 and regl&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mishankov/web-tail&quot;&gt;Web tail&lt;/a&gt; is a web application to view lines from file on local system or on remote server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SvelteKit のサイトを一緒に作るのに興味がありますか？ &lt;a href=&quot;https://github.com/svelte-society/sveltesociety.dev/issues&quot;&gt;Svelte Society のサイトにコントリビュートしてみましょう&lt;/a&gt;！&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@yesmeno/svelte-components-as-web-components-b400d1253504&quot;&gt;Svelte Components as Web Components&lt;/a&gt; by Matias Meno&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bjornlu.com/blog/simple-svelte-routing-with-reactive-urls&quot;&gt;Simple Svelte Routing with Reactive URLs&lt;/a&gt; by Bjorn Lu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ryanboddy.net/level-up-blog&quot;&gt;Leveling Up my Sveltekit / Sanity.io Blog Content with Featured Videos and Syntax Highlighting&lt;/a&gt; by Ryan Boddy&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://paullj.github.io/posts/how-this-blog-makes-the-most-of-github/&quot;&gt;How This Blog Makes the Most of GitHub&lt;/a&gt; by paullj&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/sirneij/fullstack-jwt-introducing-sveltekit-3jcn&quot;&gt;FullStack JWT Auth: Introducing SvelteKit&lt;/a&gt; by John Idogun&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/alexwarnes/svelte-cubed-adding-motion-to-3d-scenes-51lo&quot;&gt;Svelte-Cubed: Adding Motion to 3D Scenes&lt;/a&gt; by Alex Warnes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ghostdev.xyz/posts/creating-a-rss-feed-with-sanity-and-svelte-kit&quot;&gt;Creating a RSS feed with Sanity and Svelte Kit&lt;/a&gt; by GHOST&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/style-directives/&quot;&gt;How to use Svelte&amp;rsquo;s style directive&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://retro.cloud/sveltekit-and-the-client-pattern/&quot;&gt;SvelteKit and the &amp;ldquo;Client pattern&amp;rdquo;&lt;/a&gt; by Julian Laubstein&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=PoYPZT7ruqI&quot;&gt;&lt;del&gt;Shadow&lt;/del&gt; Page Endpoints In Svelte Kit - Weekly Svelte&lt;/a&gt; by LevelUpTuts&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=y53wwdBr5AI&amp;list=PLA9WiRZ-IS_z7KpqhPELfEMbhAGRwZrzn&quot;&gt;Testing For Beginners (Playlist)&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=6pH4fnFN70w&quot;&gt;KitQL - The native SvelteKit library for GraphQL&lt;/a&gt; by Jean-Yves COUËT&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sachinbhutani/gosvelte&quot;&gt;gosvelte&lt;/a&gt; は、Svelte が生成するページを Go 言語の HTTP サーバーでサーブし、Svelte コンポーネントにサーバーデータを props として送信する概念実証(proof of concept)です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-ethers-store&quot;&gt;svelte-ethers-store&lt;/a&gt; は ethers.js ライブラリを使用した、Svelte・Sapper・SvelteKit 向けの読み取り可能なストアのコレクションです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fluid-grid.com/&quot;&gt;Fluid Grid&lt;/a&gt; は未来の web のための CSS グリッドシステムです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/seeReadCode/stirstack&quot;&gt;stirstack&lt;/a&gt; は、Svelte.js、TailwindCSS、InertiaJS、Ruby on Rails を組み合わせたオピニオネイテッドなフレームワークです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeberg.org/vhs/oathqr&quot;&gt;OATHqr&lt;/a&gt; は 2FA/MFA と 他の OAUTH 対応アプリを使用するためのセキュリティクレデンシャルを作るのに便利です。Aegis や YubiKey などのワンタイムパスワード認証アプリ向けのスキャン可能な QR コードを生成するのに使用します&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/honeybeeSunshine/svelte-GridTiles&quot;&gt;svelte-GridTiles&lt;/a&gt; はドラッグアンドドロップでサイズ変更可能なタイルライブラリで、レスポンシブグリッド上に構築されています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alex-knyaz/Miscellaneous-svelte-components/&quot;&gt;Miscellaneous Svelte Components&lt;/a&gt; は、alex-knyaz がよく使用する様々な svelte コンポーネントのコレクションです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/j2l/walk-and-graph-svelte-components&quot;&gt;walk-and-graph-svelte-components&lt;/a&gt; は、svelte と js ファイルを走査し、依存関係(imports)を美しい JPG に描画する CLI node script です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/felte&quot;&gt;Felte&lt;/a&gt; は Svelte 向けのシンプルに使えるフォームライブラリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/untemps/svelte-use-tooltip&quot;&gt;svelte-use-tooltip&lt;/a&gt; は tooltip を表示するための Svelte action です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/omer-g/persistent-svelte-store&quot;&gt;persistent-svelte-store&lt;/a&gt; は汎用的に使える書き込み可能な永続化ストアです。Svelte の store contract に従って TypeScript でスクラッチで開発されました&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;なにか見落としがありましたか？ &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; に参加してください、お話を伺いましょう。&lt;/p&gt;
&lt;p&gt;また来月お会いしましょう！&lt;/p&gt;</description><pubDate>Tue, 01 Mar 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年2月</title><link>https://svelte.dev/blog/whats-new-in-svelte-february-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;Happy February, everyone! ここ1か月ほどで、Svelte と SvelteKit の &lt;a href=&quot;accelerating-sveltes-development&quot;&gt;開発が加速し&lt;/a&gt;、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/s9n8ou/new_rules/&quot;&gt;Reddit&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/community/blob/main/CODE_OF_CONDUCT.md&quot;&gt;GitHub&lt;/a&gt;、&lt;a href=&quot;https://discord.com/channels/457912077277855764/831611707667382303/935264550436102315&quot;&gt;Discord&lt;/a&gt; で新しいコミュニティのルールができ、そしてかなりの数の素晴らしいアプリ、チュートリアル、ライブラリがリリースされました。&lt;/p&gt;
&lt;p&gt;それでは見ていきましょう…&lt;/p&gt;
&lt;h2 id=&quot;Highlights-from-the-Svelte-changelog&quot;&gt;&lt;span&gt;Highlights from the Svelte changelog&lt;/span&gt;&lt;a href=&quot;#Highlights-from-the-Svelte-changelog&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;3.45.0&lt;/strong&gt; brought a &lt;a href=&quot;https://v4.svelte.dev/docs#accessibility-warnings-a11y-no-redundant-roles&quot;&gt;new a11y warning &lt;code&gt;a11y-no-redundant-roles&lt;/code&gt;&lt;/a&gt;, destructuring and caching fixes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3.46.0&lt;/strong&gt; added the much requested &lt;a href=&quot;https://v4.svelte.dev/docs#template-syntax-const&quot;&gt;&lt;code&gt;{@const}&lt;/code&gt; tag&lt;/a&gt; and &lt;a href=&quot;https://v4.svelte.dev/docs#template-syntax-element-directives-style-property&quot;&gt;&lt;code&gt;style:&lt;/code&gt; directive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Check out &lt;strong&gt;3.46.1 - 3.46.3&lt;/strong&gt; for fixes to the &lt;code&gt;{@const}&lt;/code&gt; tag and &lt;code&gt;style:&lt;/code&gt; directive, along with a number of fixes to animations&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/hello-world&quot;&gt;AST output is now available in the Svelte REPL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;inlineStyleThreshold&lt;/code&gt; allows you to specify where inline stylesheets are inserted into the page (&lt;a href=&quot;/docs/kit/configuration#inlineStyleThreshold&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/2620&quot;&gt;#2620&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;beforeNavigate&lt;/code&gt; / &lt;code&gt;afterNavigate&lt;/code&gt; lifecycle functions lets you add functionality before or after a page navigation (&lt;a href=&quot;/docs/kit/$app-navigation&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/3293&quot;&gt;#3293&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Platform context can now be passed from adapters (&lt;a href=&quot;/docs/kit/adapters#Platform-specific-context&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/3429&quot;&gt;#3429&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Hooks now have an &lt;code&gt;ssr&lt;/code&gt; parameter in &lt;code&gt;resolve&lt;/code&gt; to make it easier to skip SSR, when needed (&lt;a href=&quot;/docs/kit/hooks#Server-hooks-handle&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/2804&quot;&gt;#2804&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$page.stuff&lt;/code&gt; provides a mechanism for pages to pass data &amp;lsquo;upward&amp;rsquo; to layouts (&lt;a href=&quot;https://kit.svelte.dev/docs/loading#input-stuff&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/3252&quot;&gt;#3252&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fallthrough routes let you specify where to route when an route can&amp;rsquo;t be loaded (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3217&quot;&gt;#3217&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-New-configs&quot;&gt;&lt;span&gt;New configs&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-New-configs&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Content Security Policy (CSP) is now supported for increased security when using inline javascript or stylesheets (&lt;a href=&quot;/docs/kit/configuration#csp&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/3499&quot;&gt;#3499&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kit.routes&lt;/code&gt; config allows you to customise public/private modules during build (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3576&quot;&gt;#3576&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prerender.createIndexFiles&lt;/code&gt; config lets you prerender index.html files as their subfolder&amp;rsquo;s name (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2632&quot;&gt;#2632&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTTP methods can now be overridden using &lt;code&gt;kit.methodOverride&lt;/code&gt; (&lt;a href=&quot;https://kit.svelte.dev/docs/routing#endpoints-http-method-overrides&quot;&gt;Docs&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/pull/2989&quot;&gt;#2989&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Config-changes&quot;&gt;&lt;span&gt;Config changes&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Config-changes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;config.kit.hydrate&lt;/code&gt; and &lt;code&gt;config.kit.router&lt;/code&gt; are now nested under &lt;code&gt;config.kit.browser&lt;/code&gt; (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3578&quot;&gt;3578&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;What&#39;s-new-in-SvelteKit-Breaking-change&quot;&gt;&lt;span&gt;Breaking change&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit-Breaking-change&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;エンドポイント(endpoints) と Hooks で、&lt;code&gt;Request&lt;/code&gt; オブジェクトと &lt;code&gt;Response&lt;/code&gt; オブジェクト が使われるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3384&quot;&gt;#3384&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://paullj.github.io/timb&quot;&gt;timb(re)&lt;/a&gt; は、ライブミュージックプログラミング環境です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://musicforprogramming.net/latest/&quot;&gt;Music for Programming&lt;/a&gt; は、&lt;code&gt;${task}&lt;/code&gt; 中に聴くことで脳を集中させやる気を起こすことを目的としてミックスシリーズです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://teamtale.app/&quot;&gt;Team Tale&lt;/a&gt; は、1つのストーリーを2人の執筆者がタッグを組むような形で書くことができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.puzzlez.io/&quot;&gt;Puzzlez&lt;/a&gt; は、数独と Wordle をオンラインでプレイできます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.closedcaptioncreator.com/&quot;&gt;Closed Caption Creator&lt;/a&gt; は、Windows、Mac、Google Chrome で、あなたのビデオに簡単に字幕を付けられます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sc3-lab.netlify.app/&quot;&gt;SC3Lab&lt;/a&gt; は、svelte-cubed and three.js を使用した実験的なコードジェネレーターです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/0ql/Donkeytype&quot;&gt;Donkeytype&lt;/a&gt; は、Monkeytype にインスパイアされた、ミニマルで軽量なタイピングテストです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://above.silas.pro/&quot;&gt;Above&lt;/a&gt; は、ADHD/自閉症の方のために作られたビジュアル・ルーティーン・タイマーです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://base.report/&quot;&gt;base.report&lt;/a&gt; は、本格的な投資家向けのモダンなリサーチプラットフォームです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://string.kampsy.xyz/&quot;&gt;String&lt;/a&gt; は、あなたのスマートフォンをセキュアでポータブルなオーディオレコーダーに変身させ、個人的なメモ、家族の思い出、講義などを記録して共有するのを簡単にしてくれます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jakobwesthoff/the_raytracer_challenge_repl&quot;&gt;The Raytracer Challenge REPL&lt;/a&gt; は、シーンのレイトレーシングを設定してそれをレンダリングするライブ・エディター・インタフェースで、モダンなブラウザで動作します&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/janosh/awesome-svelte-kit&quot;&gt;awesome-svelte-kit&lt;/a&gt; は、SvelteKit の素晴らしい example のリストです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.geo-projections.com/&quot;&gt;Map Projection Explorer&lt;/a&gt; は、様々な地図の投影法を調べ、その違いを明白にすることができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MeharGaur/rubiks&quot;&gt;Rubiks&lt;/a&gt; はルービックキューブのシミュレーターです &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pianisto.net/&quot;&gt;Pianisto&lt;/a&gt; は、SVG と ToneJS と多くの忍耐によって作られた、実際に動くピアノです&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;みんなで SvelteKit サイト に取り組んでみたいなら、&lt;a href=&quot;https://github.com/svelte-society/sveltesociety-2021/issues&quot;&gt;Svelte Society のサイトへのコントリビュートにトライしてみてください&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-and-Listening&quot;&gt;&lt;span&gt;Learning and Listening&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-and-Listening&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/blog/accelerating-sveltes-development&quot;&gt;Accelerating Svelte&amp;rsquo;s Development&lt;/a&gt; by Ben McCann&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://storybook.js.org/blog/storybook-for-vite/&quot;&gt;Storybook for Vite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joshcollinsworth.com/blog/build-static-sveltekit-markdown-blog&quot;&gt;Let&amp;rsquo;s learn SvelteKit by building a static Markdown blog from scratch&lt;/a&gt; by Josh Collinsworth&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://harryherskowitz.com/2022/01/05/tapedrop-app.html&quot;&gt;Building an iOS app with Svelte, Capacitor and Firebase&lt;/a&gt; by Harry Herskowitz&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/mohamadharith/mutating-query-params-in-sveltekit-without-page-reloads-or-navigations-2i2b&quot;&gt;Mutating Query Params in SvelteKit Without Page Reloads or Navigations&lt;/a&gt; and &lt;a href=&quot;https://dev.to/mohamadharith/workaround-for-bubbling-custom-events-in-svelte-3khk&quot;&gt;Workaround for Bubbling Custom Events in Svelte&lt;/a&gt; by Mohamad Harith&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/shadid12/how-to-build-a-full-stack-serverless-application-with-svelte-graphql-and-fauna-5427&quot;&gt;How to build a full stack serverless application with Svelte and GraphQL&lt;/a&gt; by Shadid Haque&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltesaas.com/articles/sveltekit-github-pages-guide/&quot;&gt;How to Deploy SvelteKit Apps to GitHub Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://anthonyriley.org/2021/12/31/creating-a-dapp-with-sveltekit/&quot;&gt;Creating a dApp with SvelteKit&lt;/a&gt; by Anthony Riley&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opendirective.net/2022/01/06/comparing-svelte-reactivity-options/&quot;&gt;Comparing Svelte Reactivity Options&lt;/a&gt; by Steve Lee&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Kc1ULlfyUcw&quot;&gt;Integrating Storybook with SvelteKit&lt;/a&gt; and &lt;a href=&quot;https://www.youtube.com/watch?v=zaoLZc76uZM&quot;&gt;Integrating FaunaDB with Svelte&lt;/a&gt; by the Svelte Sirens&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9OlLxkaeVvw&amp;list=PL4cUxeGkcC9hpM9ARM59Ve3jqcb54dqiP&quot;&gt;SvelteKit Crash Course Tutorial&lt;/a&gt; by The Net Ninja&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=BrkrOjknC_E&amp;list=PLA9WiRZ-IS_ylnMYxIFCsZN6xVVSvLuHk&quot;&gt;Svelte for Beginners&lt;/a&gt; by Joy of Code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ydR_M0fw9Xc&quot;&gt;SvelteKit For Beginners | Movie App Tutorial&lt;/a&gt; by Dev Ed&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gBPhr1xbgaQ&quot;&gt;SvelteKit $app/stores&lt;/a&gt; by lihautan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Y_NE2R3HuOU&quot;&gt;Sveltekit - Get All Routes/Pages&lt;/a&gt; by WebJeda&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Listen To&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://share.transistor.fm/s/36212cdc&quot;&gt;New Year, New Svelte!?&lt;/a&gt; from Svelte Radio&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://changelog.com/jsparty/205&quot;&gt;So much Sveltey goodness (featuring Rich Harris)&lt;/a&gt; from JS Party&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codingcat.dev/podcast/2-4-the-other-side-of-tech-a-documentarian-perspective&quot;&gt;The Other Side of Tech: A Documentarian Perspective (with Stefan Kingham)&lt;/a&gt; from Purrfect.dev&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/grischaerbe/threlte&quot;&gt;threlte&lt;/a&gt; は Svelte 向けの three.js コンポーネントライブラリ&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nodify-at/svelte-formify&quot;&gt;svelte-formify&lt;/a&gt; は、フォームの管理とバリデーションを行うライブラリで、デコレーターを使用してバリデーションを定義します&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leveluptuts/gQuery&quot;&gt;gQuery&lt;/a&gt; は、SvelteKit 向けの GraphQL Fetcher &amp;amp; Cache です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/novum-insights/sveltekit-unlock-firebase&quot;&gt;Unlock-protocol&lt;/a&gt; は、MetaMask、Firebase、paywall のユーザーのログインを支援するインテグレーションです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AgnosticUI/agnosticui&quot;&gt;AgnosticUI&lt;/a&gt; は、クリーンな HTML と CSS で構成されている UI プリミティブのセットです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vitebook/vitebook&quot;&gt;Vitebook&lt;/a&gt; は、高速で軽量な Storybook の代替で、Vite を使用しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://swyxkit.netlify.app/&quot;&gt;SwyxKit&lt;/a&gt; は、SvelteKit + Tailwind + Netlify を使用したオピニオネイテッドなブログ・スターターです。2022年に向け新しくなりました！&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/beynar/svelte-themes&quot;&gt;svelte-themes&lt;/a&gt; は、SvelteKit アプリのテーマを抽象化したものです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-transition&quot;&gt;svelte-transition&lt;/a&gt; は、CSS クラスベースのトランジションを簡単にする Svelte コンポーネントです - TailwindCSS と一緒に使用するのが望ましいです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-inview&quot;&gt;Svelte Inview&lt;/a&gt; は、viewport/親要素 への要素の出入りを監視する Svelte アクションです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/DockYard/svelte-inline-compile&quot;&gt;svelte-inline-compile&lt;/a&gt; は、Jest と &lt;code&gt;@testing-library/svelte&lt;/code&gt; を使って Svelte コンポーネントをテストする際に、より快適な体験を得るための Babel transform です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/feltcoop/svelte-mutable-store&quot;&gt;@feltcoop/svelte-mutable-store&lt;/a&gt; は、&lt;code&gt;immutable&lt;/code&gt; コンパイラオプションでもミュータブルな値を扱える Svelte ストアです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@bojalelabs/headless-svelte-ui&quot;&gt;headless-svelte-ui&lt;/a&gt; は、Svelte アプリを構築する際に使用できるヘッドレスコンポーネント(headless components)集です&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;なにか見落としがありましたか？Svelte でアイデアを実現するのに助けが必要ですか？ &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; または &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; にご参加ください。&lt;/p&gt;
&lt;p&gt;また来月お会いしましょう！&lt;/p&gt;</description><pubDate>Tue, 01 Feb 2022 00:00:00 GMT</pubDate></item><item><title>Svelte の開発を加速する (Accelerating Svelte’s Development)</title><link>https://svelte.dev/blog/accelerating-sveltes-development</link><author>Ben McCann</author><description>&lt;p&gt;&lt;a href=&quot;/&quot;&gt;Svelte&lt;/a&gt; は高速でリアクティブな Web アプリを少ないコード量で構築するためのフロントエンドフレームワークです。初めての方は、&lt;a href=&quot;/tutorial&quot;&gt;チュートリアル&lt;/a&gt; や &lt;a href=&quot;/examples&quot;&gt;examples&lt;/a&gt; をチェックし、感触を掴んでみてください。&lt;/p&gt;
&lt;p&gt;Svelte は &lt;a href=&quot;https://news.ycombinator.com/item?id=13069841&quot;&gt;5年前に立ち上がり&lt;/a&gt;、&lt;a href=&quot;https://www.youtube.com/watch?v=YeY5M29-WcY&quot;&gt;それから大きな発展を遂げました&lt;/a&gt;。2021年には利用者が2倍以上に増え、2つの調査で、&lt;a href=&quot;https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-web-frameworks&quot;&gt;最も愛されているフレームワーク&lt;/a&gt;、&lt;a href=&quot;https://2020.stateofjs.com/en-US/technologies/front-end-frameworks/&quot;&gt;開発者が最も満足しているフレームワーク&lt;/a&gt; にそれぞれ選出されました。Svelte は、The New York Times、Apple、Spotify、Square、楽天、Bloomberg、ロイター、IKEA、Brave、その他数え切れないほどの有名な企業で、ホビープロジェクトから組込みシステムのインタフェースまで、あらゆるものを動かすために使用されています。&lt;/p&gt;
&lt;p&gt;開発者が難しい部分に悩むことなく、機能が充実したアプリケーションを Svelte で開発できるよう、&lt;a href=&quot;https://kit.svelte.jp/&quot;&gt;SvelteKit&lt;/a&gt; というアプリケーションフレームワークを開発しています。SvelteKit は既に100万回以上ダウンロードされており、アーリーアダプターの方々の協力を得て早く &lt;a href=&quot;https://github.com/sveltejs/kit/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.0&quot;&gt;stable 1.0 リリース&lt;/a&gt; に到達できるよう活動しております。&lt;/p&gt;
&lt;h2 id=&quot;(Scaling-the-team)&quot;&gt;&lt;span&gt;チームの拡大 (Scaling the team)&lt;/span&gt;&lt;a href=&quot;#(Scaling-the-team)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte の作者である Rich Harris が &lt;a href=&quot;https://vercel.com/blog/vercel-welcomes-rich-harris-creator-of-svelte&quot;&gt;Svelte にフルタイムで取り組むために Vercel にジョインしました&lt;/a&gt;。Rich の Svelte に対する関わりのレベルがさらに上がり、彼が Svelte を未来へと導く役目となったことに、私たちはとてもわくわくしています。&lt;/p&gt;
&lt;p&gt;Svelte は大規模で献身的なコミュニティの活動によって支えられてきました。Svelte はパンデミックの期間中に多数のコアメンテナーが加わり、この1週間でも3名の方が加わりました。アルファベット順です:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/benmccann&quot;&gt;benmccann&lt;/a&gt; - 2021年の大半において、SvelteKit の主要なメンテナー&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bluwy&quot;&gt;bluwy&lt;/a&gt; - SvelteKit、vite-plugin-svelte、Vite のメジャーなコントリビューター&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dominikg&quot;&gt;dominikg&lt;/a&gt; - vite-plugin-svelte の作者&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dummdidumm&quot;&gt;dummdidumm&lt;/a&gt; - VS Code extension と &lt;code&gt;svelte-check&lt;/code&gt; を含む、language-tools のメンテナー&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ehrencrona&quot;&gt;ehrencrona&lt;/a&gt; - SvelteKit のコントリビューターであり、Svelte を業務で使用している&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/geoffrich&quot;&gt;geoffrich&lt;/a&gt; - Svelte のサイトやドキュメントのアクセシビリティの改善を推進&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/GrygrFlzr&quot;&gt;GrygrFlzr&lt;/a&gt; - SvelteKit と Vite の両方のメンテナーというユニークなステータスを持つ&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Halfnelson&quot;&gt;Halfnelson&lt;/a&gt; - svelte-native の作者&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ignatiusmb&quot;&gt;ignatiusmb&lt;/a&gt; - 常連の SvelteKit コントリビューターで、特に TypeScript サポートに貢献している&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jasonlyu123&quot;&gt;jasonlyu123&lt;/a&gt; - VS Code extension と &lt;code&gt;svelte-check&lt;/code&gt; を含む、language-tools のメンテナー&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kaisermann&quot;&gt;kaisermann&lt;/a&gt; - svelte-preprocess の作者&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/RedHatter&quot;&gt;RedHatter&lt;/a&gt; - Svelte Devtools の作者&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rixo&quot;&gt;rixo&lt;/a&gt; - svelte-hmr の作者&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Svelte では昨年から &lt;a href=&quot;https://opencollective.com/svelte&quot;&gt;OpenCollective&lt;/a&gt; で寄付の受付を開始し、現在までに $60,000 以上の寄付を頂いており、本日 &lt;a href=&quot;https://cohere.ai/&quot;&gt;Cohere&lt;/a&gt; からも $10,000 の寄付を頂きました。この資金によって既存のメンテナーがより多くの時間を Svelte に費やすことができるように、または、パートタイムもしくは契約ベースで Svelte のサポートができるようになることを望んでおり、今後も検討を続けていく予定です。&lt;/p&gt;
&lt;h2 id=&quot;(Partnerships)&quot;&gt;&lt;span&gt;パートナーシップ (Partnerships)&lt;/span&gt;&lt;a href=&quot;#(Partnerships)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;複数のメジャーなクラウドベンダーが、SvelteKit アプリケーションをどこでもシームレスにデプロイできるよう取り組んでいます。Rich の新しい仕事の結果として、SvelteKit は間もなく &lt;a href=&quot;https://vercel.com/features/edge-functions&quot;&gt;Vercel Edge Functions&lt;/a&gt; で実行できるようになります。Netlify は SvelteKit の Netlify adapter に &lt;a href=&quot;https://github.com/sveltejs/kit/pull/2113&quot;&gt;大きなコントリビュート&lt;/a&gt; をしてくれて、また、SvelteKit をより良くサポートするために彼らの zip-it-and-ship-it ツールを &lt;a href=&quot;https://github.com/dependents/node-precinct/pull/88&quot;&gt;アップデート&lt;/a&gt; してくれました。最近の &lt;a href=&quot;https://blog.cloudflare.com/cloudflare-pages-goes-full-stack/&quot;&gt;Cloudflare Pages の発表&lt;/a&gt; では、SvelteKit を初日のパートナーとして取り上げており、Svelte のメンテナーである &lt;a href=&quot;https://bsky.app/profile/pngwn.at&quot;&gt;pngwn&lt;/a&gt; と &lt;a href=&quot;https://bsky.app/profile/lukeed.bsky.social&quot;&gt;lukeed&lt;/a&gt; (後者は2021年に Cloudflare にジョイン) が書いた &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages/adapter-cloudflare&quot;&gt;新しい adapter&lt;/a&gt; が使われています。&lt;a href=&quot;https://begin.com&quot;&gt;Begin&lt;/a&gt; は &lt;a href=&quot;https://github.com/architect/sveltekit-adapter&quot;&gt;SvelteKit の adapter&lt;/a&gt; を &lt;a href=&quot;https://arc.codes&quot;&gt;Architect&lt;/a&gt; アプリ向けに作成しました。そしてコミュニティメンバーは Firebase や Deno といった環境用の &lt;a href=&quot;https://sveltesociety.dev/packages?category=sveltekit-adapters&quot;&gt;adapter にコントリビュート&lt;/a&gt; しており、JavaScript が動作する場所であればどこでも動作する SvelteKit の力を示しています。&lt;/p&gt;
&lt;p&gt;また、SvelteKit ユーザーが発見した SSR の問題を解決するため、私たちは &lt;a href=&quot;https://vitejs.dev&quot;&gt;Vite&lt;/a&gt; チームと密接に連携しています。Vite は SvelteKit 
の開発者体験(developer experience)を実現してくれているビルドツールで、様々なフレームワークの代表者たちを含むコントリビューターのハードワークのおかげで、最近のリリースでは、 SvelteKit 1.0 のリリースブロッカーとして追跡していた問題点のほとんどを解決することができました。&lt;/p&gt;
&lt;h2 id=&quot;(A-growing-community)&quot;&gt;&lt;span&gt;コミュニティの成長 (A growing community)&lt;/span&gt;&lt;a href=&quot;#(A-growing-community)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;SvelteSociety&lt;/a&gt; just hosted the &lt;a href=&quot;https://sveltesummit.com/&quot;&gt;4th Svelte Summit&lt;/a&gt; — &lt;a href=&quot;/blog/whats-new-in-svelte-december-2021#What-happened-at-Svelte-Summit&quot;&gt;read a summary here&lt;/a&gt; — and Kevin Åberg Kultalahti is &lt;a href=&quot;https://twitter.com/kevmodrome/status/1463151477174714373&quot;&gt;going full-time to lead SvelteSociety&lt;/a&gt;. In addition to hosting Svelte Summit, Kevin and SvelteSociety host and manage the &lt;a href=&quot;https://www.svelteradio.com/&quot;&gt;Svelte Radio podcast&lt;/a&gt;, the &lt;a href=&quot;https://www.youtube.com/SvelteSociety&quot;&gt;SvelteSociety YouTube channel&lt;/a&gt;, and the &lt;a href=&quot;https://www.reddit.com/r/sveltejs&quot;&gt;Svelte subreddit&lt;/a&gt;. SvelteSociety has become the home of all things related to the Svelte community, with the sveltejs/community and sveltejs/integrations repos being retired in favor of &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;sveltesociety.dev&lt;/a&gt;, which has been redesigned and rebuilt in SvelteKit. In October &lt;a href=&quot;https://github.com/brittneypostma&quot;&gt;Brittney Postma&lt;/a&gt;, &lt;a href=&quot;https://ghostdev.xyz&quot;&gt;Willow aka GHOST&lt;/a&gt;, &lt;a href=&quot;https://github.com/StephDietz&quot;&gt;Steph Dietz&lt;/a&gt;, and &lt;a href=&quot;https://github.com/coderinheels&quot;&gt;Gen Ashley&lt;/a&gt; founded &lt;a href=&quot;https://sveltesirens.dev/&quot;&gt;Svelte Sirens&lt;/a&gt;, a group for women &amp;amp; non-binary community members and their allies.&lt;/p&gt;
&lt;p&gt;Svelte Discord には毎週数百人の開発者が新たに加入し、Svelte についてチャットしています。お気づきかもしれませんが、最近、サーバーの一部のメンバーの名前が紫色になっています。そのメンバーはアンバサダーで、アンバサダーという役割は、コミュニティの重要メンバーを認知させ、急成長するコミュニティの要求を管理し助けるために作られました。Svelte のアンバサダーの方々はその親切さと貢献がよく知られており、そして Svelte がフレンドリーで歓迎されるコミュニティであるという評判を維持してくれていて、私たちはアンバサダーの方々に深く感謝しています。初期のアンバサダーはアルファベット順で以下の通りです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/babichjacob&quot;&gt;babichjacob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/FractalHQ&quot;&gt;brady fractal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/brittneypostma&quot;&gt;brittney postma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/d3sandoval&quot;&gt;d3sandoval&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/geoffrich&quot;&gt;geoffrich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kevmodrome&quot;&gt;kev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PuruVJ&quot;&gt;puru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stephane-vanraes&quot;&gt;rainlife&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rmunn&quot;&gt;rmunn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stolinski&quot;&gt;stolinski&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sw-yx&quot;&gt;swyx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/theo-steiner&quot;&gt;theo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、&lt;a href=&quot;https://github.com/sveltejs/kit/discussions&quot;&gt;SvelteKit のリポジトリで GitHub discussions&lt;/a&gt; を試しており、フィードバックが良好であれば Svelte organization の他のリポジトリにも導入する可能性があります。&lt;/p&gt;
&lt;h2 id=&quot;(Things-to-watch)&quot;&gt;&lt;span&gt;注目ポイント (Things to watch)&lt;/span&gt;&lt;a href=&quot;#(Things-to-watch)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit は 1.0 に向けて進行中で、先週だけでも、&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2804&quot;&gt;client-only renderingの改善&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3293&quot;&gt;routing hooks&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3252&quot;&gt;子コンポーネントからレイアウトにデータを渡す機能&lt;/a&gt; (例: &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; タグの簡易な管理をサポート)などの主要な機能が追加されました。現在は、ストリーミングやファイルアップロードなどの機能に関する API デザインや、近々リリースされる Vite 2.8 へのコントリビューションなど、優先度の高い項目に取り組んでいます。&lt;/p&gt;
&lt;p&gt;最近は SvelteKit に注力していますが、エコシステム全体も進化し続けています。&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md#3460&quot;&gt;Svelte 3.46.0&lt;/a&gt; はここ最近の中では大きなリリースで、2つの大きな機能が追加されました: &lt;a href=&quot;https://github.com/sveltejs/rfcs/blob/master/text/0007-markup-constants.md&quot;&gt;constants in markup&lt;/a&gt; と &lt;a href=&quot;https://github.com/sveltejs/rfcs/blob/master/text/0008-style-directives.md&quot;&gt;style directives&lt;/a&gt; です。&lt;/p&gt;
&lt;p&gt;Svelte and SvelteKit’s trajectories have been accelerated by the numerous investments above and there will be many more updates to come — subscribe to the &lt;a href=&quot;/blog&quot;&gt;blog&lt;/a&gt; via &lt;a href=&quot;/blog/rss.xml&quot;&gt;RSS&lt;/a&gt; or check monthly to be the first to get them.&lt;/p&gt;</description><pubDate>Thu, 13 Jan 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2022年1月</title><link>https://svelte.dev/blog/whats-new-in-svelte-january-2022</link><author>Dani Sandoval</author><description>&lt;p&gt;Happy new year, Svelte Community! Svelte、SvelteKit、Language Tools、 Showcase にまたがって共有することがたくさんあります。Svelte を使って2021年を素晴らしい年にしてくれた全ての方に感謝します。今年も楽しみにしています 🚀&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in SvelteKit&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SvelteKit の &lt;code&gt;@sveltejs/adapter-static&lt;/code&gt; に &lt;code&gt;precompress&lt;/code&gt; オプションが追加され、アセットとページの brotli 圧縮が簡単にできるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3079&quot;&gt;#3079&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit の Concurrency mode はページを並行してプリレンダリングするようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3120&quot;&gt;#3120&lt;/a&gt;)。&lt;code&gt;1.0.0-next.205&lt;/code&gt; 以降ではデフォルトで有効になります&lt;/li&gt;
&lt;li&gt;CSS が自動的に JS より前にインクルードされるようになり、ページのパフォーマンスが向上します (&lt;a href=&quot;https://github.com/sveltejs/kit/commit/d138efe21692f5925f1e89afc0a33f42d6a1a711&quot;&gt;d13efe&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;新しい設定オプションによって service worker の登録を無効にできるようになり、カスタムで独自の登録を行うことができます (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2988&quot;&gt;#2988&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SSR のルート分割(route-splitting)の導入 - モノリシックなビルドをより小さなピースに分割し、起動とルーティングのパフォーマンスを向上させます (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2931&quot;&gt;#2931&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request.origin/path/query&lt;/code&gt; は &lt;code&gt;request.url&lt;/code&gt; になりました - 設定とページの &lt;code&gt;load&lt;/code&gt; 関数がシンプルになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3126&quot;&gt;#3126&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/kit/pull/3018&quot;&gt;Vite 2.7 へのアップデート&lt;/a&gt;後、SvelteKit ユーザーから &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/rljhfc/sveltekit_massive_compiler_improvement_by/&quot;&gt;大幅なパフォーマンスの向上が報告されており&lt;/a&gt;、SSRでのサードパーティライブラリのロードも大幅に改善されました&lt;/li&gt;
&lt;li&gt;設定ファイルの変更時、SvelteKit サーバーが自動的に再起動するようになりました (&lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte/pull/237&quot;&gt;vite-plugin-svelte#237&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Other-new-bits-from-svelte&quot;&gt;&lt;span&gt;Other new bits from svelte/*&lt;/span&gt;&lt;a href=&quot;#Other-new-bits-from-svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md#3443&quot;&gt;Svelte 3.44.3&lt;/a&gt; is out with a few bug fixes in the binding and loop code&lt;/li&gt;
&lt;li&gt;Svelte Language Tools has introduced support for the then/catch shorthands from Svelte 3.41 and TypeScript&amp;rsquo;s &amp;ldquo;go to&amp;rdquo; functionality (&lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-105.8.0&quot;&gt;105.8.0 and later&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Svelte REPL got a nice upgrade as well - letting you delete saved REPLs. Try it out by logging in at &lt;a href=&quot;/apps&quot;&gt;svelte.dev/apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/navneetsharmaui/discover-twitter-spaces&quot;&gt;Discover Twitter Spaces&lt;/a&gt; は Twitter Spaces を探すのに便利なツールです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/codeAdrian/modern-fluid-typography-editor&quot;&gt;Modern Fluid Typography Editor&lt;/a&gt; は CSS clamp を使用して美しい fluid typography の作成を手助けしてくれます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AviKKi/unnwhiteboard&quot;&gt;Unnwhiteboard&lt;/a&gt; は &amp;ldquo;ホワイトボード&amp;rdquo; 面接を行わない企業(またはチーム)のための job board です &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gitlab.com/arturoguzman/secret-santa-sveltekit&quot;&gt;Secret Santa&lt;/a&gt; は手軽さを重視して開発されたギフトコーディネートアプリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://logsnag.com/&quot;&gt;LogSnag&lt;/a&gt; は、プロジェクトのイベントを通知し、タイムラインを提供することで、重要なことが起こったときにそれを記録することができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tangentnotes.com/Download&quot;&gt;Version 0.2 of Tangent&lt;/a&gt; はSvelteベースのノートアプリで、ベータ版になりました&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jesperorb/intl-explorer&quot;&gt;Intl Explorer&lt;/a&gt; は Intl に対応する全てのフォーマッターの出力を見るためのツールです&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A lot of work this month has gone into migrating the Svelte main website and Svelte REPL to live in the &lt;a href=&quot;https://github.com/sveltejs/sites&quot;&gt;https://github.com/sveltejs/sites&lt;/a&gt; repository - including a brand new homepage for &lt;a href=&quot;/&quot;&gt;svelte.dev&lt;/a&gt;. Thanks to all the contributors who made this possible!&lt;/p&gt;
&lt;p&gt;もし何か作業できる楽しいSvelteKitプロジェクトをお探しなら、&lt;a href=&quot;https://github.com/svelte-society/sveltesociety-2021/issues&quot;&gt;Svelte Society サイトの書き直しに貢献できます&lt;/a&gt; 💅&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-and-Listening&quot;&gt;&lt;span&gt;Learning and Listening&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-and-Listening&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;em&gt;To Read&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/mohamadharith/mutating-query-params-in-sveltekit-without-page-reloads-or-navigations-2i2b&quot;&gt;Mutating Query Params in SvelteKit Without Page Reloads or Navigations&lt;/a&gt; by Mohamad Harith&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.100ms.live/blog/svelte-guide-for-react-developers&quot;&gt;Svelte for Reactaholics : A guide for React developers&lt;/a&gt; by Puru Vijay&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/svelte-lifecycle-examples/&quot;&gt;Svelte&amp;rsquo;s lifecycle methods can be used anywhere&lt;/a&gt; and &lt;a href=&quot;https://geoffrich.net/posts/svelte-$-meanings/&quot;&gt;The many meanings of $ in Svelte&lt;/a&gt; by Geoff Rich&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thenewstack.io/vercel-and-svelte-a-perfect-match-for-web-developers/&quot;&gt;Vercel and Svelte: A Perfect Match for Web Developers&lt;/a&gt; by Darryl K. Taft&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.dayslice.io/user-defined-tailwindcss-color-scheme-with-svelte-stores-ad80ca2cf038&quot;&gt;User-defined TailwindCSS Color Scheme with Svelte Stores&lt;/a&gt; by jeremy zaborowski&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@raymondboswel/ionic-6-svelte-ae904caa82df&quot;&gt;Ionic 6 + Svelte 🚀&lt;/a&gt; by Raymond Boswel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/dummdidumm_/status/1474158105395179525?t=ytj2K2Q52iD5-lNyLnQaAQ&amp;s=19&quot;&gt;What happened in #Svelte language tools this year&lt;/a&gt; by Simon H&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Watch&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=uQntFkK8Z54&quot;&gt;The Future of Svelte (Interview with Rich Harris)&lt;/a&gt; by Lee Robinson, Director of Developer Relations at Vercel&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fo6BKY2xR2w&amp;t=1834s&quot;&gt;Svelte is becoming the go-to framework&lt;/a&gt; for Obsidian plugin developers&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=c0UDVgjPxFw&quot;&gt;Sveltekit WordPress Headless Blog&lt;/a&gt; by WebJeda&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=i2suPKMPUFA&quot;&gt;Getting started with SvelteKit&lt;/a&gt; by Lihau Tan&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Wc1_U6Dy5Tw&quot;&gt;Deploy a full-stack SvelteKit app on Cloudflare Pages&lt;/a&gt; by 1nf&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;To Listen To&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://podcasts.apple.com/ca/podcast/how-to-do-things-in-svelte/id1253186678?i=1000544796072&quot;&gt;Syntax podcast: How To Do Things In Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://changelog.com/jsparty/205&quot;&gt;JS Party #205: So much Sveltey goodness (w/ Rich Harris)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rgossiaux/svelte-headlessui&quot;&gt;svelte-headlessui&lt;/a&gt; は Headless UI コンポーネントライブラリの、アンオフィシャルなSvelte向けの完全移植版です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chainlist.github.io/svelte-forms/&quot;&gt;svelte-forms v2&lt;/a&gt; がリリースされました - 作者は &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/r6354j/svelteforms_v2_has_been_released/&quot;&gt;フィードバックを募集中です&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ekzhang/percival&quot;&gt;Percival&lt;/a&gt; は宣言的なデータクエリと視覚化言語(visualization language)です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/snuffyDev/svelte-flatlist&quot;&gt;Svelte FlatList&lt;/a&gt; はモバイルフレンドリーで、シンプルで、カスタマイズ可能なドラッグメニューです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bryanmylee/svelte-keyed&quot;&gt;svelte-keyed&lt;/a&gt; はオブジェクトと配列向けの writable derived store です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svemix/svemix&quot;&gt;Svemix&lt;/a&gt; は Svelte 向けの Remix です - Svelte コンポーネント/ルート内にサーバースクリプトを配置し、それがエンドポイントに変換されます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ショーケースに追加したいものがありますか？Svelte でアイデアを実現するのに助けが必要ですか？ &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; または &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; にご参加ください！&lt;/p&gt;
&lt;p&gt;また来月お会いしましょう！&lt;/p&gt;</description><pubDate>Sat, 01 Jan 2022 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年12月</title><link>https://svelte.dev/blog/whats-new-in-svelte-december-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;SvelteKit が日に日に stable に近づいてきて、バグフィックス以外のコード変更の観点では取り上げられることがなくなってきました… そのため、今月のニュースレターでは、Svelte Summit Fall 2021 を取り上げます！&lt;/p&gt;
&lt;p&gt;もしこの1か月間のバグフィックスを深く知りたければ、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;Svelte&lt;/a&gt; と &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit&lt;/a&gt; の changelogs をそれぞれチェックしてみてください。&lt;/p&gt;
&lt;h2 id=&quot;What-happened-at-Svelte-Summit&quot;&gt;&lt;span&gt;What happened at Svelte Summit?&lt;/span&gt;&lt;a href=&quot;#What-happened-at-Svelte-Summit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;もし Svelte Summit を見逃したなら、全ての配信を &lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&quot;&gt;YouTube&lt;/a&gt; で視聴できますし、&lt;a href=&quot;https://discord.gg/YmHcdnhu&quot;&gt;Discord の #svelte-summit チャンネル&lt;/a&gt; で要約をチェックできます。&lt;/p&gt;
&lt;p&gt;ハイライトはこちら:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/rich-harris.dev&quot;&gt;Rich Harris&lt;/a&gt; は Svelte の歴史ツアーを案内し、&lt;a href=&quot;https://vercel.com/blog/vercel-welcomes-rich-harris-creator-of-svelte&quot;&gt;Vercel への入社&lt;/a&gt; を発表しました - 今後は Svelte のメンテナンスをフルタイムで行います！(&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=1200s&quot;&gt;20:00&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.steph-dietz.com/&quot;&gt;Steph Dietz&lt;/a&gt; は、なぜSvelteのシンプルな抽象化が、初心者から上級者まで、JavaScriptを学び使うのを(それもボイラープレートなしで)簡単にできるのか説明しました (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=1740s&quot;&gt;29:00&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/KevinAst&quot;&gt;Kevin Bridges&lt;/a&gt; は、Svelte の リアクティビティロジックを &lt;code&gt;ReflectiveCounter&lt;/code&gt; によって可視化し、必要に応じて &amp;ldquo;微調整&amp;rdquo; する方法を見せてくれました。プレゼンテーションの完全な &amp;ldquo;シラバス&amp;rdquo; &lt;a href=&quot;https://wiibridges.com/presentations/ResponsiveSvelte/&quot;&gt;Kevin のサイト&lt;/a&gt; で入手できます (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=2575s&quot;&gt;42:55&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mateomorris&quot;&gt;Mateo Morris&lt;/a&gt; は &lt;a href=&quot;https://primo.af/&quot;&gt;Primo&lt;/a&gt; を立ち上げました。これは静的サイトを構築しビルドするのに役立つ all-in-one の SvelteKit CMS です (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=4354s&quot;&gt;1:12:34&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/about/rauchg&quot;&gt;Guillermo Rauch&lt;/a&gt; は、Vercel の Svelte に対するコミットメント、Rich をチームに迎え入れたことが何を意味するか、今後の展望について説明しました… (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=4914s&quot;&gt;1:21:54&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/geoffrich.net&quot;&gt;Geoff Rich&lt;/a&gt; は、Svelte のモーションとトランジションを、Webの全てのユーザーにとってアクセシブルなものになるように改善する様々な方法を紹介しました。講演のスライドと文字起こしの全文は &lt;a href=&quot;https://geoffrich.net/posts/svelte-summit-2021/&quot;&gt;Geoff のサイト&lt;/a&gt; から入手できます。 (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=5550s&quot;&gt;1:32:30&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://df.id.au/&quot;&gt;Dean Fogarty&lt;/a&gt; は、Svelteのメカニズムを使用し、データを storage に、または storage から変換するカスタムストアの様々なユースケースをデモしました。文字起こしとコードは &lt;a href=&quot;https://github.com/angrytongan/svelte-summit-2021&quot;&gt;Dean の GitHub&lt;/a&gt; から入手できます。 (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=6186s&quot;&gt;1:43:06&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/kellenmace.bsky.social&quot;&gt;Kellen Mace&lt;/a&gt; は、コンテンツ制作者が WordPress を使い続けながら、フロントエンドで Svelte を活用し、素晴らしいユーザーエクスペリエンスを提供する方法についてシェアしました (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=6570ss&quot;&gt;1:49:30&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/bholmes.dev&quot;&gt;Ben Holmes&lt;/a&gt; は、&amp;rdquo;islands&amp;rdquo; アーキテクチャと、11ty + &lt;a href=&quot;https://slinkity.dev/&quot;&gt;Slinkity&lt;/a&gt; によってどんな HTML テンプレートにも islands をもたらすことができる方法について説明しました (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=8235s&quot;&gt;2:17:15&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/tolin.ski&quot;&gt;Scott Tolinski&lt;/a&gt; は、React ベースの LevelUpTutorials を Svelte で書き換えて得た教訓と、&amp;rdquo;開発者の至福を発見&amp;rdquo; したことをシェアしました (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=11795s&quot;&gt;3:16:35&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltesirens.dev&quot;&gt;Svelte Sirens&lt;/a&gt; は、女性とノンバイナリーとその味方のための新しい Svelte コミュニティとして発表されました。最初のイベントは11月29日で、今後のイベントはすべて &lt;a href=&quot;https://sveltesirens.dev/events&quot;&gt;Svelte Sirens の website&lt;/a&gt; で見つけることができます (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=13845s&quot;&gt;3:50:45&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/rich-harris.dev&quot;&gt;Rich Harris&lt;/a&gt; は、SvelteKit を使ったライブラリ作成、開発時のパッケージへのリンクのより良い方法、SvelteKit が最新の JavaScript ライブラリ開発で役立つ方法について話しました (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=14160s&quot;&gt;3:56:00&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/kenthropic.com&quot;&gt;Ken Kunz&lt;/a&gt; は、有限状態機械(及び svelte-fsm ライブラリ) によって、Svelte コンポーネントの状態などをより管理しやすくする方法について説明しました。講演の例は &lt;a href=&quot;https://github.com/kenkunz/svelte-fsm/wiki/Examples&quot;&gt;Ken の GitHub&lt;/a&gt; で入手できます。 (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=14838s&quot;&gt;4:07:18&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/austincrim&quot;&gt;Austin Crim&lt;/a&gt; は、Webでコードを学ぶことを楽器の演奏方法を学ぶことになぞらえています。学習者に早く成功体験を与え、現実世界のアプリを通して基礎を紹介することで、Svelte (及びその下地となる基礎) を学ぶことが簡単になります (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=15710s&quot;&gt;4:21:50&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://toot.cafe/@JesseSkinner&quot;&gt;Jesse Skinner&lt;/a&gt; は、React (さらには jQuery) プロジェクトで Svelte コンポーネントを使用(及び再利用)する方法について説明し、レガシーアプリを未来に導きました (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=16350s&quot;&gt;4:32:30&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jimafisk&quot;&gt;Jim Fisk&lt;/a&gt; と &lt;a href=&quot;https://stephanie-luz.medium.com/&quot;&gt;Stephanie Luz&lt;/a&gt; は、Svelte サイトをより早く構築するための &lt;a href=&quot;https://plenti.co/&quot;&gt;Plenti&lt;/a&gt; とそのテーマ設定ツールを紹介しました (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=17940s&quot;&gt;4:59:00&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ealush&quot;&gt;Evyatar Alush&lt;/a&gt; は、&lt;a href=&quot;https://github.com/ealush/vest&quot;&gt;Vest&lt;/a&gt; というパワフルなバリデーションライブラリを使用することでよりよいフォームを作成(そして維持)することができると教えてくれました (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=18535s&quot;&gt;5:08:55&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Dominik G. は、アイコンライブラリに関するフレッシュな見解をプレゼンしました - それはアプリケーションのバンドルサイズを減らし、Svelteアプリで Iconfy ライブラリ 全てが使用できる、というものです (&lt;a href=&quot;https://www.youtube.com/watch?v=1Df-9EKvZr0&amp;t=19804s&quot;&gt;5:30:04&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このような素晴らしいイベントを開催して頂き、&lt;a href=&quot;https://bsky.app/profile/kevinak.se&quot;&gt;Kevin&lt;/a&gt; と Svelte Society のボランティアの皆様に感謝いたします！エキサイティングなことに、イベント終了後に &lt;a href=&quot;https://twitter.com/kevmodrome/status/1463151477174714373&quot;&gt;Kevin が今後 Svelte Society にフルタイムで取り組む&lt;/a&gt; ことが発表されました！ &lt;a href=&quot;https://www.youtube.com/playlist?list=PL8bMgX1kyZTg2bI9IOMgfBc8lrU3v2itt&quot;&gt;この Svelte Society の YouTube Playlist&lt;/a&gt; で、個々のビデオに分割された全ての講演をチェックすることができます。&lt;/p&gt;
&lt;p&gt;Svelte Summit にフィードバックがあれば、Kev が &lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/qzgo3k/svelte_summit_feedback/&quot;&gt;Svelte subreddit でフィードバックを募集しています&lt;/a&gt; 👀&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Fornaxian/pixeldrain_web&quot;&gt;pixeldrain&lt;/a&gt; は無料で使えるファイル共有プラットフォームです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://lifehash.info/&quot;&gt;LifeHash&lt;/a&gt; は、Blockchain Commons から美しいビジュアルハッシュを生成します&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dufu1991/simple-cloud-music&quot;&gt;simple-cloud-music&lt;/a&gt; は、モダンブラウザ向けの軽量なサードパーティーの NetEase cloud ミュージックプレーヤーです (Chrome でのみ動作するようです)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://palette.rocks/&quot;&gt;palette.rocks&lt;/a&gt; はコントラストチェック機能を備えたカラーパレットジェネレーターです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/probablykasper/kadium&quot;&gt;Kadium&lt;/a&gt; は、YouTubeチャンネルのアップロードを常に把握するためのアプリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://multimonitorcalculator.com/&quot;&gt;Multi-Monitor Calculator&lt;/a&gt; は、マルチモニターのセットアップを計画するためのツールです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yourhome.fb.com/&quot;&gt;Your Home&lt;/a&gt; は、Facebook のプライバシー設定のインタラクティブなオーバービューです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-crush.netlify.app/&quot;&gt;Svelte Crush&lt;/a&gt; は、Candy Crush スタイルの match-3 ゲームです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/h_i_g_s_c_h/status/1463767113563353089?s=20&quot;&gt;100.000 Corona deaths in Germany&lt;/a&gt; は、Spiegel Gesundheit のために作られたビジュアライゼーションです&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;何か取り組める Svelte プロジェクトをお探しですか？ Web における Svelte のプレゼンスを高めることに興味がありますか？&lt;/strong&gt; もし Svelte Society を SvelteKit に置き換えることに貢献したいなら、&lt;a href=&quot;https://github.com/svelte-society/sveltesociety-2021/issues&quot;&gt;open issue のリスト&lt;/a&gt; をチェックしてみてください。&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Videos-Blogs-and-Podcasts&quot;&gt;&lt;span&gt;Videos, Blogs and Podcasts&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Videos-Blogs-and-Podcasts&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=_TymiadmPrc&quot;&gt;How To Make and Publish a Svelte Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.stackblitz.com/posts/sveltekit-supported-in-webcontainers/&quot;&gt;SvelteKit is now fully supported in WebContainers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joshcollinsworth.com/blog/introducing-svelte-comparing-with-react-vue&quot;&gt;Introducing Svelte, and Comparing Svelte with React and Vue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.roboleary.net/2021/11/18/svelte-app-testing-jest.html&quot;&gt;Testing a Svelte app with Jest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sarcevic.dev/blog/toasting-in-svelte&quot;&gt;How to create a toast notification library package with SvelteKit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sustainablewww.org/principles/svelte-training-here-you-can-learn-svelte&quot;&gt;Svelte training: Here you can learn Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.logrocket.com/svelte-actions-introduction/&quot;&gt;Introduction to Svelte Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chiuzon.medium.com/enjoy-making-dapps-using-svelteweb3-b78dfea1d902&quot;&gt;Enjoy making DAPPs using SvelteWeb3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.infoworld.com/article/3639521/svelte-creator-web-development-should-be-more-fun.html&quot;&gt;Svelte creator: Web development should be more fun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://share.transistor.fm/s/d9b04961&quot;&gt;Svelte Radio: Rich Harris is now working full-time on Svelte 🤯&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webrush.io/episodes/episode-158-svelte-and-elderjs-with-nick-reese&quot;&gt;Web Rush: Svelte and Elder.js with Nick Reese&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.upstash.com/svelte-with-serverless-redis&quot;&gt;Building SvelteKit applications with Serverless Redis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Rich-Harris/svelte-cubed&quot;&gt;svelte-cubed&lt;/a&gt; は Svelte 向けの Three.js コンポーネントライブラリです - Rich Harris によって開発され、Svelte Summit Fall 2021 の彼の講演でプレゼンされました&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kenkunz/svelte-fsm&quot;&gt;svelte-fsm&lt;/a&gt; は、小さく、シンプルで、表現力があり、プラグマティックな有限状態機械(Finite State Machine (FSM))ライブラリで、Svelte に最適化されています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/samuelstroschein/bromb&quot;&gt;bromb&lt;/a&gt; は、Web サイトや Web アプリ向けのフィードバックウィジェットで、小さく、インテグレーション/セルフホストが簡単です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Oli8/spaper&quot;&gt;Spaper&lt;/a&gt; は Svelte 向けの PaperCSS コンポーネントのセットです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cibernox/svelte-intl-precompile&quot;&gt;svelte-intl-precompile&lt;/a&gt; は Svelte 向けの i18n ライブラリで、ビルド時に翻訳を解析します&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svitejs/svelte-preprocess-svg&quot;&gt;svelte-preprocess-svg&lt;/a&gt; は Svelte コンポーネントにある inline svg を自動的に最適化し、ファイルサイズを減らしより良いパフォーマンスをもたらします&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/srmullen/svelte-subcomponent-preprocessor&quot;&gt;svelte-subcomponent-preprocessor&lt;/a&gt; は、Svelte ファイルに1つ以上のコンポーネントを書くことができるようにしてくれます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gtm-nayan/svelte-pdfjs&quot;&gt;svelte-pdfjs&lt;/a&gt; は、Svelte の PDF viewer コンポーネントのおおまかな実装です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/maciekgrzybek/svelte-inview&quot;&gt;svelte-inview&lt;/a&gt; は、viewport/親要素 への要素の出入りを監視する Svelte action です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tomatrow/sveltekit-adapter-wordpress-shortcode&quot;&gt;sveltekit-adapter-wordpress-shortcode&lt;/a&gt; は、アプリを wordpress shortcode にする SvelteKit の アダプター(adapter) です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/arlac77/svelte-websocket-store&quot;&gt;svelte-websocket-store&lt;/a&gt; は、websocket をバックエンドにした Svelte ストアです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leveluptuts/auto-form&quot;&gt;Svelte Auto Form&lt;/a&gt; は、柔軟性よりも使いやすさを重視した、高速で楽しいフォームライブラリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@svackages/set-focus&quot;&gt;set-focus&lt;/a&gt; は、&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; や &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; 要素がマウントされるとすぐに focus をセットする Svelte action で、なんらかのケースやテストに便利です&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SvelteKit に関するアイデアをお持ちですか？Svelte リポジトリの新しい &lt;a href=&quot;https://github.com/sveltejs/kit/discussions&quot;&gt;GitHub Discussions&lt;/a&gt; をチェックしてみてください。また、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; や &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; にもご参加いただけます。&lt;/p&gt;
&lt;p&gt;また &lt;del&gt;来月&lt;/del&gt; 来年お会いしましょう！&lt;/p&gt;</description><pubDate>Wed, 01 Dec 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年11月</title><link>https://svelte.dev/blog/whats-new-in-svelte-november-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;SvelteKitの完成度が&lt;a href=&quot;https://github.com/sveltejs/kit/milestone/2&quot;&gt;80%を超え&lt;/a&gt;、GitHubで&lt;a href=&quot;https://github.com/sveltejs/kit&quot;&gt;5000スター&lt;/a&gt;を超え、Sapperよりも多くの利用者がいる現在、SvelteKitを試すには絶好の機会です。コミュニティの多くの人が試しているので、今月はかなり大きなショーケースになっています…。&lt;/p&gt;
&lt;p&gt;また、11月20日には、世界各国のスピーカーが参加する&lt;a href=&quot;https://sveltesummit.com&quot;&gt;Svelte Summit&lt;/a&gt;も開催されますので、お見逃しなく。お住まいの地域で開催されるウォッチパーティーにもご注目ください👀&lt;/p&gt;
&lt;p&gt;続いては新機能です！&lt;/p&gt;
&lt;h2 id=&quot;New-in-Svelte-and-SvelteKit&quot;&gt;&lt;span&gt;New in Svelte and SvelteKit&lt;/span&gt;&lt;a href=&quot;#New-in-Svelte-and-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/&quot;&gt;svelte.dev&lt;/a&gt; now runs on SvelteKit alongside &lt;a href=&quot;https://sveltesociety.dev&quot;&gt;sveltesociety.dev&lt;/a&gt;. svelte.dev is a relatively complicated site with live code editing, authentication, and a markdown-based blog - making it a great way for us to really test out SvelteKit&lt;/li&gt;
&lt;li&gt;A new compiler option, &lt;code&gt;enableSourcemap&lt;/code&gt;, provides more control over the compiler output for JS and CSS sourcemaps (&lt;strong&gt;3.44.0&lt;/strong&gt;). With this new feature, SvelteKit and the Vite Svelte plugin can now properly handle environment variables in &lt;code&gt;.svelte&lt;/code&gt; templates (See &lt;a href=&quot;https://github.com/sveltejs/kit/issues/720&quot;&gt;sveltejs/kit#720&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte/pull/201&quot;&gt;sveltejs/vite-plugin-svelte#201&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Svelte Language Tools now support reading the configuration of the VS Code CSS settings (&lt;a href=&quot;https://github.com/sveltejs/language-tools/issues/1219&quot;&gt;#1219&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vite-plugin-svelte&lt;/code&gt; added a new &lt;code&gt;experimental.prebundleSvelteLibraries&lt;/code&gt; option that makes it much faster to load Svelte libraries with many components like icon libraries and UI frameworks. The option can be set in the root of &lt;code&gt;svelte.config.js&lt;/code&gt;. Please test it out and give us feedback!&lt;/li&gt;
&lt;li&gt;SvelteKit will only route endpoints on the client, unless marked as &lt;code&gt;rel=&amp;quot;external&amp;quot;&lt;/code&gt; - reducing the size of the client JS and making it easier to refactor the router in the future (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2656&quot;&gt;2656&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit no longer supports Node 12 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2604&quot;&gt;2604&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteKit was upgraded from Vite 2.6.0 to Vite 2.6.12 fixing an issue where Vite would corrupt the Svelte runtime (&lt;a href=&quot;https://github.com/vitejs/vite/issues/4306&quot;&gt;https://github.com/vitejs/vite/issues/4306&lt;/a&gt;). It also included two fixes from the SvelteKit team to avoid or make diagnosing Vite issues in SvelteKit templates easier (&lt;a href=&quot;https://github.com/vitejs/vite/pull/5192&quot;&gt;https://github.com/vitejs/vite/pull/5192&lt;/a&gt; and &lt;a href=&quot;https://github.com/vitejs/vite/pull/5193&quot;&gt;https://github.com/vitejs/vite/pull/5193&lt;/a&gt;). Vite 2.7 is currently available in beta with additional fixes for SSR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To see all updates to Svelte and SvelteKit, check out the &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;Svelte&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit changelog&lt;/a&gt;, respectively.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://tangentnotes.com/&quot;&gt;Tangent&lt;/a&gt;は、クリーンでパワフルなMac &amp;amp; Windows用のメモアプリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pudding.cool/&quot;&gt;The Pudding&lt;/a&gt;は、文化の中で議論されているアイデアをビジュアル・エッセイで説明するデジタル出版物です - SvelteKitで再構築されました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://powerswitcher.axpo.com/&quot;&gt;Power Switcher&lt;/a&gt;は、エネルギー源がよりクリーンなものに移行していく中で、スイスの電力供給の発展をインタラクティブに紹介しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sub.live/&quot;&gt;Sublive&lt;/a&gt;は、世界中のミュージシャンを低レイテンシーかつ高品質なオーディオネットワークで繋ぎ、新しい音楽の作り方を提案します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vibify.me/&quot;&gt;Vibify&lt;/a&gt;は、Spotifyの再生履歴を利用して、音楽の中に隠れたプレイリストを見つけることができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marvel.geoffrich.net/&quot;&gt;Browse Marvel Unlimited by Year&lt;/a&gt;はSveltekitサイトで、Marvel Unlimitedで入手可能な発行物を年ごとに探すことができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://files.community/&quot;&gt;Files&lt;/a&gt;は、Windows用の最新のファイルエクスプローラーです。SvelteKitで再構築された新しいサイトを公開しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jackbow/lil-hash&quot;&gt;lil-hash&lt;/a&gt;は、覚えやすく、話しやすい短縮URLを生成するシンプルなURL短縮ツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ThaUnknown/pwa-haven&quot;&gt;PWA Haven&lt;/a&gt;は、OSのネイティブアプリを置き換える、小さく、速く、シンプルなPWAのコレクションです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dottobit.com/&quot;&gt;DottoBit&lt;/a&gt;は、URL共有機能を備えたマルチカラーの16bitドローイングプログラムです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zummon/former&quot;&gt;Former Fast Document for Print&lt;/a&gt;は、美しいデザイン、国際言語対応、自動計算機能を備えた請求書作成ソフトです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/noahsalvi/helvetikon&quot;&gt;Helvetikon&lt;/a&gt;は、スイス・ドイツ語のコミュニティが運営する辞書です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://palitra.app/&quot;&gt;Palitra App&lt;/a&gt;は、検索ベースのカラーパレットジェネレータです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Podcasts-Featuring-Svelte&quot;&gt;&lt;span&gt;Podcasts Featuring Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Podcasts-Featuring-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-summit-is-coming-up-and-svelte-is-growing&quot;&gt;Svelte Radio&lt;/a&gt;では、先日リリースされたSvelte Summitのウェブサイトを支える技術や、その他の楽しいことをたくさん紹介しています！&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://podrocket.logrocket.com/rich-harris&quot;&gt;PodRocket&lt;/a&gt;は、LogRocketのポッドキャストで、Rich HarrisとともにSvelteについて話しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://podrocket.logrocket.com/elderjs&quot;&gt;また、PodRocketではさらに&lt;/a&gt;、Elder.jsについてNick Reeseとともに掘り下げています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://podrocket.logrocket.com/elderjs&quot;&gt;PodRocket also dove deep&lt;/a&gt; Nick Reeseと一緒にElder.jsに導入しました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webrush.io/episodes/episode-153-single-page-application-vs-multi-page-application-with-rich-harris&quot;&gt;Web Rush&lt;/a&gt;とリッチ・ハリスが、SPAとMPAの違い、サーバーレンダリングが果たす役割、クライアントサイドハイドレーションとは何か、SPAやMPAを開発するための最新ツールの状況などについて語ります。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devtools.fm/episode/15&quot;&gt;devtools.fm&lt;/a&gt;では、魅力的なデータビジュアライゼーションの開発とツール構築の将来について、リッチ・ハリスと語り合っています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Educational-Content&quot;&gt;&lt;span&gt;Educational Content&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Educational-Content&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=860d8usGC0o&quot;&gt;Have Single-Page Apps Ruined the Web?&lt;/a&gt; 今年のJamstack Confで、リッチ・ハリスが論争の的となった質問に答えました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=IKhtnhQKjxQ&quot;&gt;Svelte vs SvelteKit - What&amp;rsquo;s The Difference?&lt;/a&gt; LevelUpTutsでは、この2つのプロジェクトの関係を説明するクイックガイドを提供しています。Scott Tolinski氏によるSvelteに関するガイドの残りの部分は、彼の新シリーズである&lt;a href=&quot;https://www.youtube.com/playlist?list=PLLnpHn493BHF-Onm1MQgKC1psvW-rJuYi&quot;&gt;&amp;ldquo;Weekly Svelte&amp;rdquo;&lt;/a&gt;でチェックできます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RarufLoEL08&amp;list=PLm_Qt4aKpfKgzcTiMT2cgWGBDBIPK06DQ&quot;&gt;WebJedaのSvelteKit Hooks&lt;/a&gt;シリーズは、今月も第3回「クッキーセッション認証」をお届けします。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ryanfiller.com/blog/tips/svelte-contex-aware-styles&quot;&gt;Writing Context Aware Styles in a Svelte App&lt;/a&gt;は、親に動的に適応することができる自己完結型のコンポーネントを書くためのガイドです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sitepoint.com/a-beginners-guide-to-sveltekit/&quot;&gt;A Beginner&amp;rsquo;s Guide to SvelteKit&lt;/a&gt;では、SvelteとSvelteKitの両方を初心者向けに説明し、架空のユーザーのプロフィールページを表示するシンプルなウェブアプリを構築しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://massivepixel.io/blog/svelte-vs-react/&quot;&gt;Svelte vs React: Ending the Debate&lt;/a&gt;は、昔からある議論を歴史的に捉えたものです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jeremydayslice.hashnode.dev/svelte-snacks-or-custom-events-for-modal-actions&quot;&gt;Svelte Snacks | Custom Events for Modal Actions&lt;/a&gt;では、Svelteの便利なカスタムイベントシステムのしっかりとした実装を紹介しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/svelte-a11y-limits/&quot;&gt;What Svelte&amp;rsquo;s accessibility warnings won&amp;rsquo;t tell you&lt;/a&gt;では、Svelteのa11y警告がどのように機能するのか、また、アプリケーションをアクセシブルにするために警告をあてにしてはいけない理由を説明しています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/geoffrich/svelte-adapter-azure-swa&quot;&gt;svelte-adapter-azure-sw&lt;/a&gt;は、動的なサーバーレンダリングにAzure関数を使用してAzure Static Web Appを作成するSvelteアプリ用のアダプタです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.inlang.dev/getting-started/svelte-kit&quot;&gt;Inlang&lt;/a&gt;は、SvelteKitに対応したローカリゼーション・国際化ツールキットです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/noelmugnier/svelte-translate-tools&quot;&gt;svelte-translate-tools&lt;/a&gt; ビルド時にSvelteアプリの翻訳ファイルを抽出/生成/コンパイルします。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/naver/egjs-infinitegrid/tree/master/packages/svelte-infinitegrid&quot;&gt;@egjs/svelte-infinitegrid&lt;/a&gt;では、サイズの異なるカード要素で構成された様々なグリッドを実装することができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/srmullen/svelte-reactive-css-preprocess&quot;&gt;svelte-reactive-css-preprocess&lt;/a&gt;は、コンポーネントの状態が変化するたびに、css変数の値を簡単に更新することができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/snuffyDev/sveltegen&quot;&gt;Sveltegen&lt;/a&gt;は、アクション、コンポーネント、ルートをシンプルかつ簡単に作成するためのCLIです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-advanced-multistep-form&quot;&gt;svelte-advanced-multistep-form&lt;/a&gt;は、レンダリングされるコンポーネントにスタイルを渡すフォーム要素をラップするのに役立ち、また、各フォームステップを順序立ててスタイリッシュに表示します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leveluptuts/gQuery&quot;&gt;gQuery&lt;/a&gt;は、SvelteKit用のGraphQL Fetcher &amp;amp; Cacheです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/probablykasper/date-picker-svelte&quot;&gt;date-picker-svelte&lt;/a&gt;は、Svelte用の日付と時間のピッカーです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twelveui.readme.io/reference/what-is-twelveui&quot;&gt;TwelveUI&lt;/a&gt;は、アクセシビリティを内蔵したSvelteのコンポーネントライブラリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/babakfp/svelte-outclick/&quot;&gt;svelte-outclick&lt;/a&gt;は、outclickイベントを提供することで、要素の外側でクリックをリッスンすることができるSvelteコンポーネントです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ymzuiku/svelte-zero-api&quot;&gt;svelte-zero-api&lt;/a&gt;では、SvelteKit APIをクライアント関数のように使用することができます - TypeScriptをサポートしています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/basaran/svelte-recaptcha-v2&quot;&gt;svelte-recaptcha-v2&lt;/a&gt;は、Svelte SPA、SSR、sveltekitの静的サイト用のGoogle reCAPTCHA v2の実装です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ghostdevv/svelte-body&quot;&gt;Svelte Body&lt;/a&gt;は、SvelteKitやRoutifyと連携して、ルートのボディにスタイルを適用することができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/basaran/svelte-debug-console&quot;&gt;svelte-debug-console&lt;/a&gt;は、Svelte SPA、SSR、sveltekitの静的サイトのためのdebug.jsの実装で、デバッグ文をブラウザ上で確認することができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/didier/sveo&quot;&gt;SVEO&lt;/a&gt;は、SvelteKitページのメタデータを宣言するための、依存性のないアプローチです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@svelte-drama/suspense&quot;&gt;@svelte-drama/suspense&lt;/a&gt;は、Reactの&lt;code&gt;&amp;lt;Suspense&amp;gt;&lt;/code&gt;のコアアイデアを実装したSvelteコンポーネントです。また、&lt;a href=&quot;https://www.npmjs.com/package/@svelte-drama/swr&quot;&gt;SWR for Svelte&lt;/a&gt;をチェックすると、リフェッチがさらに簡単になります。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/antony/sveltekit-adapter-browser-extension&quot;&gt;sveltekit-adapter-browser-extension&lt;/a&gt;は、アプリをクロスプラットフォームのブラウザ拡張にするSvelteKit用のアダプタです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コミュニティサイト &lt;a href=&quot;https://sveltesociety.dev/templates&quot;&gt;sveltesociety.dev&lt;/a&gt;では、Svelte エコシステム全体からの templates、adders、adapters をご覧いただけます。&lt;/p&gt;
&lt;p&gt;もっと更新情報をお探しですか？ &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt;または&lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; にご参加ください！&lt;/p&gt;</description><pubDate>Mon, 01 Nov 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年10月</title><link>https://svelte.dev/blog/whats-new-in-svelte-october-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;やぁみんな👋 Svelteブログに「What&amp;rsquo;s new in Svelte」を掲載し始めてから1年が経ちました。いつも読んでくださっている皆さん、そして毎月投稿してくださっている皆さんにこの場を借りて感謝の気持ちをお伝えしたいと思います。メンテナから、DiscordやRedditに投稿してくれる皆さんまで、Svelteコミュニティを素晴らしいものにするための努力を目の当たりにするのは素晴らしいことです。&lt;/p&gt;
&lt;p&gt;皆さん、これからもがんばっていきましょう！それでは、今月のニュースに飛び込んでみましょう…&lt;/p&gt;
&lt;h2 id=&quot;New-around-Svelte&quot;&gt;&lt;span&gt;New around Svelte&lt;/span&gt;&lt;a href=&quot;#New-around-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Svelteのエクスポートマップに新たな機能が追加され、SSRのライフサイクル関数のno-opバージョンが公開されるようになりました (Svelte &lt;strong&gt;3.43.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src&lt;/code&gt;属性を持つカスタムコンポーネントが、&lt;code&gt;svelte-native&lt;/code&gt;のビルドを崩さなくなりました (Svelte &lt;strong&gt;3.42.4&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/typescript-svelte-plugin&quot;&gt;TypeScriptプラグイン&lt;/a&gt;を有効にしていないSvelteプラグインのユーザは、TypeScriptプラグインを有効にするよう促されるようになりました。TypeScriptプラグインはSvelteファイルを取り扱うためのインテリセンスを追加し、TypeScriptとJavaScriptのファイルを強化します。使用されている方は、&lt;a href=&quot;https://github.com/sveltejs/language-tools/issues/580&quot;&gt;フィードバックをお願いします&lt;/a&gt; (Svelte extensions &lt;strong&gt;105.4.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;イベントモディファイヤがインテリセンスに追加され、オートコンプリートされたりホバーで情報が表示されたりするようになりました (Svelte extensions &lt;strong&gt;105.4.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Svelteバージョン3.39以降と&lt;code&gt;svelte-preprocess&lt;/code&gt;バージョン4.9.5以降を使用している場合、TypeScriptユーザは型のインポートと値のインポートを厳密に分ける必要がなくなりました。つまり、&lt;code&gt;import type { MyInterface } from &amp;#39;./somewhere&amp;#39;; import { myValue } from &amp;#39;./somewhere&amp;#39;&lt;/code&gt;の代わりに、&lt;code&gt;import { MyInterface, myValue } from &amp;#39;./somewhere&amp;#39;&lt;/code&gt;と書くことができるようになりました。主にこの機能を実装したコミュニティメンバの&lt;a href=&quot;https://github.com/SomaticIT&quot;&gt;@SomaticIT&lt;/a&gt;氏に厚く感謝します！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;機能やバグフィックスの全リストは、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;SvelteのChangelog&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;SvelteKit-Updates&quot;&gt;&lt;span&gt;SvelteKit Updates&lt;/span&gt;&lt;a href=&quot;#SvelteKit-Updates&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先月も100近いPRがコミットされましたが、まだまだやるべきことはたくさんあり、Svelteメンテナは&lt;a href=&quot;https://github.com/sveltejs/kit/issues/2100&quot;&gt;SvelteKitを1.0にするための支援を求めています&lt;/a&gt;。Antonyは、この問題に関する&lt;a href=&quot;https://github.com/sveltejs/kit/issues/2100#issuecomment-895446285&quot;&gt;最近のコメント&lt;/a&gt;の中で、このように言っていました:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;もし自分がコントリビュートできないほどのドシロートだと思うなら（そんなことはありませんが）、テストを追加するか、追加したい機能のテストを書いてから追加してください！小さく始めて、その方法でコードベースを学びましょう。&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;貢献したい方は、&lt;a href=&quot;https://github.com/sveltejs/kit/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.0+label%3A%22help+wanted%22&quot;&gt;「help wanted」とラベル付けされた1.0へのマイルストーンのIssue&lt;/a&gt;のいずれかに取り組むことをご検討ください。&lt;/p&gt;
&lt;p&gt;今月のSvelteKitの注目すべき改善点は…&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;サービスワーカーが&lt;code&gt;$lib&lt;/code&gt;エイリアスを使用してファイルにアクセスできるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2326&quot;&gt;#2326&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SvelteのライブラリがViteの設定なしですぐに動作するようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2343&quot;&gt;#2343&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;package exportsフィールドの改善 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2345&quot;&gt;#2345&lt;/a&gt;と &lt;a href=&quot;https://github.com/sveltejs/kit/pull/2327&quot;&gt;#2327&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[重要]&lt;code&gt;prerender.pages&lt;/code&gt;設定オプションの名称が&lt;code&gt;prerender.entries&lt;/code&gt;に変更されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2380&quot;&gt;#2380&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;フックからのBodyの型付けを可能にするために、新しいジェネリック引数が追加されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2413&quot;&gt;#2413&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;packageコマンドの実行時にpackage.jsonに&lt;code&gt;svelte&lt;/code&gt;フィールドが追加されるようになりました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2431&quot;&gt;#2431&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[重要]load関数の&lt;code&gt;context&lt;/code&gt;パラメータが&lt;code&gt;stuff&lt;/code&gt;に改名されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2439&quot;&gt;#2439&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-node&lt;/code&gt;を使ってカスタムサーバを構築するときのために、&lt;code&gt;entryPoint&lt;/code&gt;オプションを追加しました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2414&quot;&gt;#2414&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vite-plugin-svelte&lt;/code&gt;は、SvelteコンポーネントのTypeScript、PostCSS、Scssなどの自動プリプロセッサにViteを使用する&lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/config.md#usevitepreprocess&quot;&gt;useVitePreprocess&lt;/a&gt;のサポートを改善しました (&lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte/pull/173&quot;&gt;#173&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SvelteKitのすべての更新を確認するには、&lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKitのChangelog&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.radiofrance.fr/&quot;&gt;radiofrance&lt;/a&gt;は、ウェブサイトをSvelteKitに移行しました&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flayks.com/&quot;&gt;FLAYKS&lt;/a&gt;は、SvelteKit、Sanity、Anime.jsで作られたFélix Péaultのポートフォリオサイトです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hirehive.com/&quot;&gt;hirehive&lt;/a&gt;は、求職者と仕事のトラッキングサイトです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://microsocial.xyz/&quot;&gt;Microsocial&lt;/a&gt;は、実験的なPeer-to-Peerソーシャルプラットフォームです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dylanlyrics.app/&quot;&gt;Dylan Ipsum&lt;/a&gt;は、lorem ipsumをBob Dylanの歌詞に置き換えるランダムテキストジェネレータです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mikeyhogarth/chip8-svelte&quot;&gt;Chip8 Svelte&lt;/a&gt;は、CHIP8 TypeScriptの上に構築されたCHIP-8エミュレータのフロントエンドです&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**Svelteのプロジェクトをお探しですか？ウェブ上でのSvelteの存在感を高めることに興味がありますか？**SvelteKitでのSvelte Societyの書き換えに貢献したい方は、&lt;a href=&quot;https://github.com/svelte-society/sveltesociety-2021/issues&quot;&gt;オープンなIssueのリスト&lt;/a&gt;をチェックしてください。&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Podcasts-Featuring-Svelte&quot;&gt;&lt;span&gt;Podcasts Featuring Svelte&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Podcasts-Featuring-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://podcasts.apple.com/us/podcast/from-react-to-sveltekit/id1253186678?i=1000536276106&quot;&gt;Syntax Podcast: From React to SvelteKit&lt;/a&gt; ReactからSvelteKitへ Level Up TutorialsをReactからSvelteKitに移行した理由、方法、利点、注意すべき点などについて、ScottとWesが語ります！&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.webrush.io/episodes/episode-150-svelte-tools-and-svelte-society&quot;&gt;Web Rush Podcast: Svelte Tools and Svelte Society&lt;/a&gt; Kevin Åberg Kultalahtiが、Svelte Societyとは何か、Svelteに期待していること、製品にとってドキュメントがいかに重要であるか、など &lt;em&gt;など&lt;/em&gt; について語ります&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.arahansen.com/the-compiled-future-of-front-end/&quot;&gt;Svelte: The Compiled Future of Front End&lt;/a&gt;では、コンポーネントベースのフロントエンドの歴史と、コンパイラがどのようにすべてを変えるかについて詳しく説明しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://share.transistor.fm/s/10aa305c&quot;&gt;Svelte Radio: Contributing to Svelte with Martin &amp;lsquo;Grygrflzr&amp;rsquo; Krisnanto Putra&lt;/a&gt; Grygrflzrがメンテナになるまでの道のりや、React、Vite、その他多くのことについての見解を語っています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://share.transistor.fm/s/10aa305c&quot;&gt;Svelte Radio: Routify 3 with Jake and Willow&lt;/a&gt; Svelte RadioクルーがRoutifyのメンテナと一緒に、リリースされたばかりのRoutify 3について語ります&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/geoffrich_/status/1441816829853253640?s=20&quot;&gt;JS Party: 1Password&lt;/a&gt;がページ内提案にSvelteを使用していることに言及している、The Changelog&amp;rsquo;s JS Partyの最新エピソードです&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Educational-Content&quot;&gt;&lt;span&gt;Educational Content&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Educational-Content&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://fantinel.dev/blog-development-sveltekit/&quot;&gt;How I built a blog with Svelte and SvelteKit&lt;/a&gt;は、Svelte、SvelteKit、プログレッシブ・エンハンスメントについて、コード例を交えて紹介しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=J5x3OMXjgMc&quot;&gt;I built a decentralized chat dapp&lt;/a&gt;は、GUNのような一般的なweb3技術を使って、分散型ウェブアプリ（dapp）を構築する方法についてのチュートリアルです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://javascript.plainenglish.io/writing-a-svelte-store-with-typescript-22fa1c901a4&quot;&gt;Writing a Svelte Store with TypeScript&lt;/a&gt;は、TypeScriptを使ってSvelteストアを書くことについて、深く掘り下げています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/svelte-scoped-styles/&quot;&gt;How Svelte scopes component styles&lt;/a&gt;では、クラスを使用やより複雑なCSS指定子を使用したスコープの作り方について説明しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RarufLoEL08&quot;&gt;SvelteKit Hooks&lt;/a&gt;では、Sveltekitでのhooks.jsの使用方法を説明しています。終わったら、&lt;a href=&quot;https://www.youtube.com/watch?v=RmIBG3G0-VY&quot;&gt;パート2&lt;/a&gt;をご覧ください&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.infoworld.com/article/3630395/an-early-look-at-sveltekit.html&quot;&gt;An early look at SvelteKit&lt;/a&gt;は、Infoworld社がSvelteKitの機能とオンボーディングについて解説した記事です&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/buhrmi/sveltekit-netlify-cms&quot;&gt;sveltekit-netlify-cms&lt;/a&gt;は、Netlify CMSで使用するために構成されたSvelteKitスケルトンアプリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jacobbowdoin/sveltefirets&quot;&gt;SvelteFireTS&lt;/a&gt;は、Fireship.ioにインスパイアされた、SvelteKit + TypeScript + Firebaseライブラリです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Anyass3/stores-x&quot;&gt;stores-x&lt;/a&gt;は、vueXのようにSvelteストアを使用することができます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stordahl/sveltekit-snippets&quot;&gt;sveltekit-snippets&lt;/a&gt;は、SvelteKitとVanilla Svelteの共通パターンのスニペットを提供するVSCode拡張です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wobsoriano/svelte-xactor&quot;&gt;svelte-xactor&lt;/a&gt;は、xactorマシンをストアコントラクトを実装したグローバルストアに簡単に変換することができるミドルウェアです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/aldy505/vite-plugin-pages-svelte&quot;&gt;vite-plugin-pages-svelte&lt;/a&gt;は、ファイルシステムベースの自動ルーティングのためのviteプラグインです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/sveltio&quot;&gt;sveltio&lt;/a&gt;は、proxy-stateライブラリであるvaltioのSvelteラッパーです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rmarscher/svelte-transition-classes&quot;&gt;svelte-transition-classes&lt;/a&gt;は、CSSクラスを追加および交換するためのSvelteカスタムトランジションです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paolotiu/svelte-boring-avatars&quot;&gt;Svelte-Boring-Avatars&lt;/a&gt;は、人気の高いReactプロジェクト「&lt;a href=&quot;https://github.com/boringdesigners/boring-avatars&quot;&gt;Boring Avatars&lt;/a&gt;」のSvelte移植版です&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/homescriptone/svelte-datatables&quot;&gt;Svelte DataTables&lt;/a&gt;は、データを簡単に表形式で表示できるJavaScriptライブラリDataTableをSvelteプロジェクトに移植したものです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chanced/focus-svelte&quot;&gt;focus-svelte&lt;/a&gt;は、依存関係をもたないSvelte用のフォーカストラップです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/chanced/filedrop-svelte&quot;&gt;filedrop-svelte&lt;/a&gt;は、Svelte用のファイルドロップゾーンのアクションとコンポーネントです&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コミュニティサイト&lt;a href=&quot;https://sveltesociety.dev/templates&quot;&gt;sveltesociety.dev&lt;/a&gt;には、Svelteエコシステムのテンプレート、アダー、アダプタが多数掲載されていますので、ぜひご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;Before-you-go-answer-the-call-for-speakers&quot;&gt;&lt;span&gt;Before you go, answer the call for speakers!&lt;/span&gt;&lt;a href=&quot;#Before-you-go-answer-the-call-for-speakers&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte Summit Fall 2021（2021年11月20日開催）では、講演者を募集しています。10月30日までにトークプロポーザルを提出してください…どなたでも発表や参加が可能です。&lt;/p&gt;
&lt;h3 id=&quot;Before-you-go-answer-the-call-for-speakers-More-info-on-the-sessionize-site&quot;&gt;&lt;span&gt;More info on the &lt;a href=&quot;https://sessionize.com/svelte-summit-fall-2021/&quot;&gt;sessionize site&lt;/a&gt;&lt;/span&gt;&lt;a href=&quot;#Before-you-go-answer-the-call-for-speakers-More-info-on-the-sessionize-site&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;サミットまで待てませんか？&lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt;や&lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt;にご参加ください！&lt;/p&gt;</description><pubDate>Fri, 01 Oct 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年9月</title><link>https://svelte.dev/blog/whats-new-in-svelte-september-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;今月は、Svelteが&lt;a href=&quot;https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-web-frameworks&quot;&gt;StackOverflowの最も愛されているWebフレームワーク&lt;/a&gt;に選ばれたり、Tan Li Hau氏がSvelteのYouTubeチャンネルについて&lt;a href=&quot;https://share.transistor.fm/s/84c7521b&quot;&gt;Svelte Radio&lt;/a&gt;に出演したり、SvelteKitが1.0リリースに向けてさらに進化したりしました。&lt;/p&gt;
&lt;h2 id=&quot;New-in-Svelte&quot;&gt;&lt;span&gt;New in Svelte&lt;/span&gt;&lt;a href=&quot;#New-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;use:actions&lt;/code&gt;が&lt;code&gt;&amp;lt;svelte:body&amp;gt;&lt;/code&gt;で使用できるようになりました。(&lt;strong&gt;3.42.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HTMLElement&lt;/code&gt;, &lt;code&gt;SVGElement&lt;/code&gt; (&lt;strong&gt;3.42.2&lt;/strong&gt;) および &lt;code&gt;BigInt&lt;/code&gt; (&lt;strong&gt;3.42.3&lt;/strong&gt;) はグローバルに追加されました。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3.42.2&lt;/strong&gt; では以下の点が改善され、Svelteの出力に含まれるコードが少なくなりました。&lt;ul&gt;
&lt;li&gt;クラスおよびスタイル属性で空白が折りたたまれるようになりました。&lt;/li&gt;
&lt;li&gt;ハイドレートを含んだコンポーネントは、コンポーネント内に存在する要素の種類を作成する際にヘルパーのみに依存するように更新されました。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;スケーリングが &lt;code&gt;flip&lt;/code&gt; アニメーションで考慮されるようになりました。 (&lt;strong&gt;3.42.2&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; の中のすべての &lt;code&gt;&amp;lt;option&amp;gt;&lt;/code&gt; が、バインドされた値がそれらのどれにも一致しないときに、選択解除されるようになりました。 (&lt;strong&gt;3.42.2&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;機能やバグフィックスの全リストは、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;Svelte changelog&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;SvelteKit-Updates&quot;&gt;&lt;span&gt;SvelteKit Updates&lt;/span&gt;&lt;a href=&quot;#SvelteKit-Updates&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelteのメンテナは&lt;a href=&quot;https://github.com/sveltejs/kit/issues/2100&quot;&gt;SvelteKitを1.0にする手助けを探しています&lt;/a&gt; 1.0のマイルストーンにあった100以上の問題を解決しました。残りは数十個しかありませんが、そのリストを少しでも短くするために手を貸していただきたいと思っています。
ご協力いただける方は、&lt;a href=&quot;https://github.com/sveltejs/kit/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.0&quot;&gt;1.0 milestone issues&lt;/a&gt;のいずれかの作業をご検討ください。&lt;/p&gt;
&lt;p&gt;この1か月間は、あらゆる問題を解決することに注力し、100件以上のPRを統合しました。いくつかの新機能も追加されました…&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SvelteKit will now detect if a prerendered app is trying to access a query parameter and return an error instead of failing silently (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2104&quot;&gt;#2104&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-node&lt;/code&gt; now lets you &lt;a href=&quot;https://kit.svelte.dev/faq#integrations&quot;&gt;add the Kit middleware to your own server&lt;/a&gt; for use with other middleware. You can also &lt;a href=&quot;https://kit.svelte.dev/faq#how-do-i-use-x-with-sveltekit-how-do-i-use-middleware&quot;&gt;add middleware in dev mode&lt;/a&gt; with more improvements to come in this area&lt;/li&gt;
&lt;li&gt;The new &lt;a href=&quot;/docs/kit/@sveltejs-kit-hooks&quot;&gt;&lt;code&gt;sequence&lt;/code&gt; helper lets you chain together multiple &lt;code&gt;handle&lt;/code&gt; calls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A new &lt;a href=&quot;/docs/kit/hooks#Shared-hooks-handleError&quot;&gt;&lt;code&gt;handleError&lt;/code&gt; hook&lt;/a&gt; gives you the option to send data to an error tracking service, or to customise the formatting before printing the error to the console.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-node&lt;/code&gt; can now listen on socket path (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2048&quot;&gt;#2048&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To see all updates to SvelteKit, check out the &lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit changelog&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PuruVJ/macos-web&quot;&gt;macos-web&lt;/a&gt; by @puruvjdev は、Svelteを使って、一から作り直しました。詳細はこの&lt;a href=&quot;https://twitter.com/puruvjdev/status/1426267327687847939&quot;&gt;Twitter スレッド&lt;/a&gt;をご覧ください。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://search.brave.com/&quot;&gt;Brave Search&lt;/a&gt; は、Svelteを使用しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/varbhat/exatorrent&quot;&gt;exatorrent&lt;/a&gt; は、GoとSvelteで書かれた、セルフホスティング可能で使いやすく、軽量で機能豊富なtorrentクライアントです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jatinhemnani01/json2TsTypes&quot;&gt;json2TsTypes&lt;/a&gt; は、JSONをTypeScriptのTypes/Interfacesに変換するシンプルなツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://histogram.dev/&quot;&gt;Histogram.dev&lt;/a&gt; は、CSVの各機能のヒストグラムを生成します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cybernetic.dev/&quot;&gt;cybernetic.dev&lt;/a&gt; は、Svelteの学習中に行われたデータ中心のUI実験のコレクションです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/lunanotes-youtube-video-n/oehoffnnkgcdacmbkhmlbjedinpampak?hl=en&quot;&gt;LunaNotes&lt;/a&gt; は、YouTube動画のメモを取るのに役立つChrome拡張機能です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://theia.games/#dev&quot;&gt;theia.games&lt;/a&gt;に内蔵された3D環境エディタで、Svelteに組み込まれたメニューでVRの世界を作ることができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/probablykasper/ferrum&quot;&gt;Ferrum&lt;/a&gt; は、Mac、Windows、Linuxで利用可能な音楽ライブラリとプレーヤーです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/byrd-polar/fluid-earth&quot;&gt;Fluid Earth&lt;/a&gt; は、地球の大気や海洋を可視化するためのインタラクティブなWebGLアプリケーションです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;作業するSvelteプロジェクトを探していますか？&lt;/strong&gt; SvelteKitでのSvelte Societyの書き換えに貢献したい方は、&lt;a href=&quot;https://github.com/svelte-society/sveltesociety-2021/issues&quot;&gt;the list of open issues&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Educational-Content&quot;&gt;&lt;span&gt;Educational Content&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Educational-Content&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@cazanator/tauri-with-standard-svelte-or-sveltekit-ad7f103c37e7&quot;&gt;Tauri with Standard Svelte or SvelteKit&lt;/a&gt; は、クロスプラットフォームのハイブリッドデスクトップアプリケーションを開発するための新しい軽量フレームワークであるTauriでSvelteをセットアップする方法を説明しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=4CGzFwHoD0A&amp;list=PLEx5khR4g7PKSASVAXXiAhkyx02_OeruP&quot;&gt;Svelte - Web App Development Reimagined [An Intro to Svelte]&lt;/a&gt; は、goto; conferenceでの素晴らしいイントロトークです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ISmnG2sIOeM&quot;&gt;LevelUpTuts - Even More 5 Things I Like More In Svelte Than React&lt;/a&gt; は、リファレンス(必要ありません) 、メタタグなどのSvelteのアプローチを紹介しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://auth0.com/blog/state-management-in-svelte-applications/&quot;&gt;State Management in Svelte Applications&lt;/a&gt; は、Svelteアプリケーションの状態を管理するために、Svelteの状態管理ストアを使用する方法についてのチュートリアルです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shipbit.de/blog/migrating-from-sapper-to-svelte-kit/&quot;&gt;Migrating from Sapper to SvelteKit&lt;/a&gt; は、ShipBitのSapperからの移行の評価と振り返りです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshnuss/svelte-stripe-js&quot;&gt;svelte-stripe-js&lt;/a&gt; は、あなたのSvelteプロジェクトにStripeを追加するために必要なすべてです。100% SvelteKit互換&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shaozi/svelte-steps&quot;&gt;svelte-steps&lt;/a&gt; は、Svelteで書かれたカスタマイズ可能なステップコンポーネントです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gitlab.com/Samzelot/simple-optics-module&quot;&gt;simple-optics-module&lt;/a&gt; は、幾何学的光学の実験と教育のための、オンラインのオープンソース光学ツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/samuelstroschein/inlang&quot;&gt;inlang&lt;/a&gt; は、SvelteKitアプリ用の国際化(i18n)ツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pocinnovation/sveno&quot;&gt;Sveno&lt;/a&gt; は、ReactコンポーネントをSvelteコンポーネントに変換するコンポーネントトランスファイラーです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/paolotiu/svelte-useactions&quot;&gt;svelte-useactions&lt;/a&gt; は、アクションをコンポーネントに渡すための完全に型付けされたライブラリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/leveluptuts/Svelte-Element-Query&quot;&gt;Svelte-Element-Query&lt;/a&gt; は、322bのエレメントクエリ用のライブラリ/アクションです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/oekazuma/svelte-meta-tags&quot;&gt;svelte-meta-tags&lt;/a&gt; は、SvelteプロジェクトでSEO管理を容易にするプラグインです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alex-knyaz/svelte-domtree&quot;&gt;svelte-domtree&lt;/a&gt; では、DOMを視覚化することができます。Chrome DevToolsのDOMツリーに似ています。&lt;/li&gt;
&lt;li&gt;クロスフレームワークの状態管理ライブラリである&lt;a href=&quot;https://github.com/jbjorge/diffx/tree/master/svelte&quot;&gt;Diffx&lt;/a&gt; は、Svelteのサポートが追加されました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Zettexe/svelte-ionic-starter&quot;&gt;svelte-ionic-starter&lt;/a&gt; は、ライブリロードとiOS/Androidビルドターゲットを備えたSvelte + Ionic + CapacitorJSアプリ用のプロジェクトテンプレートです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stephane-vanraes/demo-sveltekit-sanity/&quot;&gt;demo-sveltekit-sanity&lt;/a&gt; は、オープンソースのReactCMSであるSvelteKitおよびSanityのスターターキットです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コミュニティサイト &lt;a href=&quot;https://sveltesociety.dev/templates&quot;&gt;sveltesociety.dev&lt;/a&gt; では、Svelte エコシステム全体からの templates、adders、adapters をご覧いただけます。&lt;/p&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;もっと更新情報が欲しいですか？ &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; に参加してください！&lt;/p&gt;</description><pubDate>Wed, 01 Sep 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年8月</title><link>https://svelte.dev/blog/whats-new-in-svelte-august-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;Changelog（&lt;a href=&quot;https://changelog.com/jsparty/182&quot;&gt;JS Party Ep. 182&lt;/a&gt;）から Svelte Radio（エピソード &lt;a href=&quot;https://share.transistor.fm/s/adc23e84&quot;&gt;29&lt;/a&gt; と &lt;a href=&quot;https://share.transistor.fm/s/6316622d&quot;&gt;30&lt;/a&gt;）まで、今月は Svelte のことを話さずにはいられなかったようですね。また、Svelte では、shadow DOM のサポートと、新たに export や await 機能が追加されました。&lt;/p&gt;
&lt;h2 id=&quot;New-in-Svelte&quot;&gt;&lt;span&gt;New in Svelte&lt;/span&gt;&lt;a href=&quot;#New-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;7月は、未解決の PR の数を減らすために本当に努力し、Svelte 3.39.0、3.40.0、3.41.0がリリースされたように、Svelte コアリポジトリにとって2019年後半から最も活発な月でした。大量のバグ修正に加えて、以下の新機能が追加されました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;イベント修飾子 &lt;code&gt;|trusted&lt;/code&gt; は、イベントが呼び出される前に、そのイベントが信頼できるかどうかをチェックすることができます（&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/6137&quot;&gt;#6137&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;SvelteKit SSR の改善作業をサポートする新しい &lt;code&gt;svelte/ssr&lt;/code&gt; パッケージです（&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/6416&quot;&gt;#6416&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;TypeScript ファイルの前処理を改善するための新しい &lt;code&gt;errorMode&lt;/code&gt; コンパイラオプション（&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/6194&quot;&gt;#6194&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;コンポーネント作成時に &lt;code&gt;target&lt;/code&gt; として &lt;code&gt;ShadowRoot&lt;/code&gt; を指定できるようになり、Svelte コンポーネントを shadow DOM 内でレンダリングできるようになりました（&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/5869&quot;&gt;#5869&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;export { ... } from&lt;/code&gt;（&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/2214&quot;&gt;#2214&lt;/a&gt;）、&lt;code&gt;export let { ... } =&lt;/code&gt;（&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/5612&quot;&gt;#5612&lt;/a&gt;）と &lt;code&gt;{#await ... then/catch}&lt;/code&gt;（&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/6270&quot;&gt;#6270&lt;/a&gt;）の構文がすべて Svelte コンポーネントでサポートされました。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;機能とバグ修正の全リストは、&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;Svelte の Changelog&lt;/a&gt; をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;SvelteKit-Updates&quot;&gt;&lt;span&gt;SvelteKit Updates&lt;/span&gt;&lt;a href=&quot;#SvelteKit-Updates&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;prerender.force&lt;/code&gt; が &lt;code&gt;prerender.onError&lt;/code&gt; になり、ビルドに失敗するエラーと失敗しないエラーを微調整できるようになりました（&lt;a href=&quot;https://github.com/sveltejs/kit/pull/2007&quot;&gt;#2007&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;esbuild の設定が SvelteKit adapters で使用できるようになりました（&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1914&quot;&gt;#1914&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;一般的な設定エラー（&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1910&quot;&gt;#1910&lt;/a&gt;）やコンパイラエラー（&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1827&quot;&gt;#1827&lt;/a&gt;）のエラーメッセージがより分かりやすくなりました。&lt;/li&gt;
&lt;li&gt;対象となるホストが SvelteKit アプリケーションと同じか、より特定のサブドメインである場合にのみ Cookie がパスされるようになりました（&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1847&quot;&gt;#1847&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;より良い imports のために、パッケージング時に index.js の exports がディレクトリの exports に変更されるようになりました（&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1905&quot;&gt;#1905&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;Vite.js の &lt;code&gt;mode&lt;/code&gt; が &lt;code&gt;$app/env&lt;/code&gt; から公開されるようになりました（&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1789&quot;&gt;#1789&lt;/a&gt;）。&lt;/li&gt;
&lt;li&gt;全般的に types が向上（&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1778&quot;&gt;#1778&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1791&quot;&gt;#1791&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1646&quot;&gt;#1646&lt;/a&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SvelteKit のすべてのアップデートを確認するには、&lt;a href=&quot;https://github.com/sveltejs/kit/blob/master/packages/kit/CHANGELOG.md&quot;&gt;SvelteKit の Changelog&lt;/a&gt; をご覧ください。&lt;/p&gt;
&lt;h2 id=&quot;Features-bug-fixes-from-around-svelte&quot;&gt;&lt;span&gt;Features &amp;amp; bug fixes from around svelte/*&lt;/span&gt;&lt;a href=&quot;#Features-bug-fixes-from-around-svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;言語ツールが &amp;ldquo;Workplace Trust&amp;rdquo; 機能をより適切にサポートするようになりました（VS Code の使用において）。&lt;/li&gt;
&lt;li&gt;svelte2tsx では、JS 出力の修正 によって、ambient タイプの宣言の名前が変更され、将来的に宣言が衝突しないようになりました。ユーザーは ambient タイプの定義を自分で提供できることが期待されています。&lt;/li&gt;
&lt;li&gt;Sapper は v0.29.2 をリリースしました。このバージョンでは、正規表現のルート、ディレクトリ要求時のステータスコード、ユーザーが &lt;code&gt;base&lt;/code&gt; タグを提供していない場合の exports を修正しています（&lt;a href=&quot;https://github.com/sveltejs/sapper/blob/master/CHANGELOG.md&quot;&gt;changelog&lt;/a&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.parsnip.ai/&quot;&gt;Parsnip&lt;/a&gt; は、モバイルファーストのプログレッシブウェブアプリで、家庭料理を学ぶのに役立ちます。詳しくは、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/oearb9/learning_to_cook_at_home_with_parsnip_built/&quot;&gt;Reddit の記事&lt;/a&gt;をご覧ください。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.atlanticcouncil.org/cbdctracker/&quot;&gt;Central Bank Digital Currency (CBDC) tracker&lt;/a&gt; は、世界各国でどのようにデジタル通貨を導入しているかを記録したサイトです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/itswadesh/svelte-commerce&quot;&gt;Svelte Commerce&lt;/a&gt; は、Sveltekit をベースにした、Eコマースのための先進的なフロントエンドプラットフォームです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://neovimcraft.com/&quot;&gt;neovimcraft&lt;/a&gt; は neovim プラグインに特化した SvelteKit 製サイトです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Svelte のプロジェクトをお探しですか？ウェブ上での Svelte の存在感を高めることに興味がありますか？&lt;/strong&gt; SvelteKit での Svelte Society の書き換えに貢献したい方は、&lt;a href=&quot;https://github.com/svelte-society/sveltesociety-2021/issue&quot;&gt;未解決の Issue のリスト&lt;/a&gt;をチェックしてください。&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Educational-Content&quot;&gt;&lt;span&gt;Educational Content&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Educational-Content&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/how-i-built-a-cross-platform-desktop-application-with-svelte-redis-and-rust/&quot;&gt;How I Built a Cross-Platform Desktop Application with Svelte, Redis, and Rust&lt;/a&gt; は、Cloudflare 社の Svelte メンテナおよび Developer Advocate である Luke Edwards 氏のブログ記事です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://strapi.io/blog/how-to-create-a-blog-with-svelte-kit-strapi&quot;&gt;How to Create a Blog with SvelteKit and Strapi&lt;/a&gt; は、Strapi の Aarnav Pai 氏による段階的なチュートリアルです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=sKKgT0SEioI&amp;list=PLm_Qt4aKpfKgonq1zwaCS6kOD-nbOKx7V&quot;&gt;Sveltekit Markdown Blog&lt;/a&gt; は、WebJeda 氏による YouTube のチュートリアルシリーズです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/using-custom-elements-in-svelte/&quot;&gt;Using Custom Elements in Svelte&lt;/a&gt; Geoff Rich 氏による Custom Elements の紹介です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hasura.io/learn/graphql/svelte-apollo/introduction/&quot;&gt;learn / graphql / svelte&lt;/a&gt; は、Hasura の2時間で学べる無料の GraphQL 講座です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magic.link/posts/magic-svelte&quot;&gt;How to add Magic Link to a SvelteKit application&lt;/a&gt; は、もっとも知られているパスワードレスのログインパターンを解説しています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/drannex42/svelte-capacitor/&quot;&gt;Svelte-Capacitor&lt;/a&gt; は、v2.0.0 をリリースしました。Svelte と Capacitor を使用して、ネイティブに近いパフォーマンスで iOS と Android 用のハイブリッドモバイルアプリケーションをより簡単に構築することができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ABarnob/svelte-remixicon&quot;&gt;svelte-remixicon&lt;/a&gt; は、Remix Icon をベースにした Svelte 用のアイコンライブラリで、2000種類以上のアイコンが収録されています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/GeopJr/SveltePress&quot;&gt;SveltePress&lt;/a&gt; は、SvelteKit 上に構築されたドキュメントツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/one-aalam/svelte-starter-kit/tree/auth-supabase&quot;&gt;Svelte Starter Kit&lt;/a&gt; は、Supabase を利用した Auth と User Profiles により、Svelte を迅速に立ち上げるためのボイラプレートです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/novacbn/kahi-ui&quot;&gt;Kahi UI&lt;/a&gt; はダークモードが組み込まれた Svelte 初の UI Kit です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ivanhofer/typesafe-i18n&quot;&gt;typesafe-i18n&lt;/a&gt; は、 TypeScript や JavaScript プロジェクトのための、独断的で、完全に型安全な軽量ローカリゼーションライブラリで、外部依存はありません。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コミュニティサイト &lt;a href=&quot;https://sveltesociety.dev/templates&quot;&gt;sveltesociety.dev&lt;/a&gt; では、Svelte エコシステム全体からの templates、adders、adapters をご覧いただけます。&lt;/p&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;もっと更新情報が欲しいですか？ &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; に参加してください！&lt;/p&gt;</description><pubDate>Sun, 01 Aug 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年7月</title><link>https://svelte.dev/blog/whats-new-in-svelte-july-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;北半球が暑くなる中、 Svelte はパフォーマンス向上やバグ修正、 TypeScript のサポート強化、エコシステム全体から多くの新しいコンポーネントやツールの追加などで涼しさを保ちました。ちょっと覗いてみましょう。 👀&lt;/p&gt;
&lt;h2 id=&quot;New-in-SvelteKit&quot;&gt;&lt;span&gt;New in SvelteKit&lt;/span&gt;&lt;a href=&quot;#New-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;adapter-node&lt;/code&gt; gzip と brotli を使ってアセットを事前に圧縮するようになりました。 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1693&quot;&gt;#1693&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;TypeScript トランスパイルのサポートが &lt;code&gt;svelte-kit package&lt;/code&gt; ツールに追加されました。 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1633&quot;&gt;#1633&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adapter-node&lt;/code&gt; デフォルトのキャッシングを改善しました。 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1416&quot;&gt;#1416&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Rollup の出力オプションを設定可能に。 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1572&quot;&gt;#1572&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HMR での SSL の使い方を修正。 (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1517&quot;&gt;#1517&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Features-bug-fixes-from-around-svelte&quot;&gt;&lt;span&gt;Features &amp;amp; bug fixes from around svelte/*&lt;/span&gt;&lt;a href=&quot;#Features-bug-fixes-from-around-svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md#3383&quot;&gt;Svelte 3.38.3&lt;/a&gt; (released June 22) には、ハイドレーションの最適化、バブリングイベントでの &lt;code&gt;this&lt;/code&gt; の保存など、多くのパフォーマンス改善とバグ修正が含まれています。&lt;/li&gt;
&lt;li&gt;最新の Svelte Language Tools のリリースでは、コンポーネント外部での prop 名変更サポート、 PostCSS の構文文法、 Svelte ファイルから型定義を作成するのに使用できる &lt;code&gt;svelte2tsx&lt;/code&gt; の &lt;code&gt;.d.ts&lt;/code&gt; 出力ターゲットが追加されました。&lt;/li&gt;
&lt;li&gt;また、 Svelte Language Tools では、 TypeScript のサポートを強化するための待望の実験的機能が追加されました。 - コンポーネントのイベントやスロットに明示的に型を付与することや、ジェネリックを使用することなどです。 詳細は &lt;a href=&quot;https://github.com/sveltejs/rfcs/pull/38&quot;&gt;the RFC&lt;/a&gt; をご覧いただき、お使いの方は &lt;a href=&quot;https://github.com/sveltejs/language-tools/issues/442&quot;&gt;this issue&lt;/a&gt; にフィードバックをお願いします。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte-scroller&lt;/code&gt; 2.0.7 では、 quality-of-life をいくつか修正しました。初期の幅に関するバグを修正し、&lt;code&gt;index&lt;/code&gt; をより控えめに更新しました。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Coming-soon-to-Svelte&quot;&gt;&lt;span&gt;Coming soon to Svelte&lt;/span&gt;&lt;a href=&quot;#Coming-soon-to-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;マークアップにおける定数 - (&lt;a href=&quot;https://github.com/sveltejs/rfcs/blob/master/text/0000-markup-constants.md&quot;&gt;RFC&lt;/a&gt;) ローカル定数を定義する新しい &lt;code&gt;{@const ...}&lt;/code&gt; タグを追加しました (&lt;a href=&quot;https://github.com/sveltejs/svelte/pull/6413&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltethemes.dev/&quot;&gt;SvelteThemes&lt;/a&gt; svelte, sveltekit, elderjs, routify などを使用して構築された Svelte テーマとテンプレートの厳選されたリストです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/snuffyDev/Beatbump&quot;&gt;Beatbump&lt;/a&gt; は、Svelte/SvelteKit を用いて作成された、 YouTube Music 代替のフロントエンドツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/webspaceadam/sveltuir&quot;&gt;Sveltuir&lt;/a&gt; はギターのフレットボードを覚えるのに役立つアプリです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Educational-Content&quot;&gt;&lt;span&gt;Educational Content&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Educational-Content&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://share.transistor.fm/s/60880542&quot;&gt;Svelte Radio: A Jolly Good Svelte Summer&lt;/a&gt; は、 Svelte の最新情報や Svelte Radio 1周年を祝うトークです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://navillus.dev/blog/svelte-class-props&quot;&gt;Class properties in Svelte&lt;/a&gt; は、 React から Svelte に乗り換える開発者のために、 &lt;code&gt;class&lt;/code&gt; の力を再確認します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLm_Qt4aKpfKjf77S8UD79Ockhwp_699Ms&quot;&gt;Sveltekit Tutorial for Beginners&lt;/a&gt; は、 WebJeda による SvelteKit を学ぶためのビデオプレイリストです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jochemvogel.medium.com/how-to-cache-dynamic-pages-on-demand-with-a-service-worker-in-sveltekit-4b4a7652583d&quot;&gt;How To Cache Dynamic Pages On Demand With A Service Worker In SvelteKit&lt;/a&gt; は、 SvelteKit でオンデマンドキャッシングに使用されるサービスワーカーの力を説明します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vuemastery.com/blog/vue-vs-svelte-comparing-framework-internals/&quot;&gt;Vue vs Svelte: Comparing Framework Internals&lt;/a&gt; は、 Vue と Svelte の違いを内側から深く掘り下げます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jenyus.web.app/blog/2021-05-30-setting-up-a-development-environment-for-sveltekit-with-docker-and-compose&quot;&gt;Setting up a development environment for SvelteKit with Docker and Docker Compose&lt;/a&gt; は、どんなデバイスでコードを実行しても、再利用可能な開発環境を作るために Docker を使用する方法を説明します。&lt;/li&gt;
&lt;li&gt;Scalable Scripts は今月、 Docker 化された Svelte アプリを &lt;a href=&quot;https://youtu.be/VOs2Od5jYOc&quot;&gt;AWS&lt;/a&gt;, &lt;a href=&quot;https://youtu.be/gdg4ne_uDm8&quot;&gt;Azure&lt;/a&gt;, &lt;a href=&quot;https://youtu.be/_-uBb61Tikw&quot;&gt;Google Cloud&lt;/a&gt; にデプロイする方法を説明した3つのビデオを公開しました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=euowJs9CblA&quot;&gt;Render Katex with Svelte from zero to hero&lt;/a&gt; は、 Svelte プロジェクトに Katex を導入する方法を紹介します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/using-custom-elements-in-svelte/&quot;&gt;Using Custom Elements in Svelte&lt;/a&gt; では、 Svelte サイトで custom elements を使用する際に注意すべき点を紹介しています。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/novacbn/svelte-pipeline&quot;&gt;svelte-pipeline&lt;/a&gt; は、 Svelte Store として、 REPL や Editor などにカスタムの JavaScript コンテキストと Svelte Compiler を提供します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Salemmous/sveltotron&quot;&gt;Sveltotron&lt;/a&gt; はあなたの Svelte アプリを検査するために作られた Electron ベースのアプリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pleasemarkdarkly/svelte-qr-reader-writer&quot;&gt;svelte-qr-reader-writer&lt;/a&gt; は、QRコードからのデータの読み取りと書き込みを支援する Svelte コンポーネントです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-stack-router&quot;&gt;svelte-stack-router&lt;/a&gt; Stacks との連携により、 Svelte アプリをよりネイティブに近づけることを目的としています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-typed-context&quot;&gt;svelte-typed-context&lt;/a&gt; では、 &lt;code&gt;getContext&lt;/code&gt; や &lt;code&gt;setContext&lt;/code&gt; に提供されると、より厳密な型が可能になるインターフェースを提供しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svelte-modals.mattjennings.io/&quot;&gt;svelte-modals&lt;/a&gt; は、シンプルで柔軟性が高く、 zero-dependency のモーダルマネージャです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;コンポーネントを投稿したいですか？ Svelte を Web 上で存在感を高めることに興味がありますか？&lt;/strong&gt; コンポーネントを Svelte Society サイトに提出するには、 &lt;a href=&quot;https://github.com/svelte-society/sveltesociety-2021/blob/main/src/routes/components/components.json&quot;&gt;a PR to this file&lt;/a&gt; を作成してください。 SvelteKit で Svelte Society の書き直しに貢献したい場合は、 &lt;a href=&quot;https://github.com/svelte-society/sveltesociety-2021/issues&quot;&gt;the list of open issues&lt;/a&gt; をチェックしてください。&lt;/p&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;もっと更新情報が欲しいですか？ &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; or &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; に参加してください！&lt;/p&gt;</description><pubDate>Thu, 01 Jul 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年6月</title><link>https://svelte.dev/blog/whats-new-in-svelte-june-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;今月は、SvelteKit とそのドキュメントに多くの貢献がありました。language tools にもいくつか新機能が追加され、特に注目すべきは JavaScript または TypeScript ファイルと Svelte ファイルの深い統合です。それではアップデートに参りましょう…&lt;/p&gt;
&lt;h2 id=&quot;New-in-SvelteKit&quot;&gt;&lt;span&gt;New in SvelteKit&lt;/span&gt;&lt;a href=&quot;#New-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;svelte.config.js&lt;/code&gt; コンフィグファイルが ESM フォーマットでロードされるようになりました (&lt;code&gt;.cjs&lt;/code&gt; ではなく &lt;code&gt;.js&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;AMP ページでレンダリングされた CSS が使われるようになります&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte-check&lt;/code&gt; が TypeScript テンプレートに追加されました (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1556&quot;&gt;sveltejs/kit#1556&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;https キーペアのサポート &lt;a href=&quot;https://github.com/sveltejs/kit/pull/1456&quot;&gt;sveltejs/kit#1456&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;現在は SvelteKit に Vite をバンドルし、アップグレードしたバージョンを使用しています。もし &lt;code&gt;package.json&lt;/code&gt; に Vite がある場合は、それを削除します &lt;/li&gt;
&lt;li&gt;バイナリレスポンスのための Etag &lt;a href=&quot;https://github.com/sveltejs/kit/pull/1382&quot;&gt;sveltejs/kit#1382&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;code&gt;$layout&lt;/code&gt; から &lt;code&gt;__layout&lt;/code&gt;、&lt;code&gt;$error&lt;/code&gt; から &lt;code&gt;__error&lt;/code&gt; にリネームしました&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getContext&lt;/code&gt; を削除し、代わりに &lt;code&gt;request.locals&lt;/code&gt; を使用します &lt;/li&gt;
&lt;li&gt;出力ディレクトリを &lt;code&gt;.svelte&lt;/code&gt; から &lt;code&gt;.svelte-kit&lt;/code&gt; にリネームしました。適宜 &lt;code&gt;.gitignore&lt;/code&gt; を更新してください。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trailingSlash: &amp;#39;never&amp;#39; | &amp;#39;always&amp;#39; | &amp;#39;ignore&amp;#39;&lt;/code&gt; がコンフィグで使用できるようになりました。これにより、&lt;code&gt;index.html&lt;/code&gt; ページの末尾にスラッシュをつけることを前提とした静的ホスティングプロバイダで動作するサイトの構築が簡単になり、より複雑な動作を必要とする人向けのエスケープハッチが提供されることになります。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Notable-bug-fixes-in-SvelteKit&quot;&gt;&lt;span&gt;Notable bug fixes in SvelteKit&lt;/span&gt;&lt;a href=&quot;#Notable-bug-fixes-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;adapter-netlify&lt;/code&gt; が &lt;a href=&quot;https://github.com/sveltejs/kit/pull/1467&quot;&gt;sveltejs/kit#1467&lt;/a&gt; で修正され、&lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages/adapter-netlify&quot;&gt;readme&lt;/a&gt; に新しいドキュメントが作成されました。&lt;/li&gt;
&lt;li&gt;アプリが所有していないURLのナビゲーションをルーターがインターセプトしなくなりました。これにより、同じオリジンでベースパスを共有していない &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; 要素をページに持つアプリのクラッシュが修正されました。&lt;/li&gt;
&lt;li&gt;ハッシュのみの変更がルーターによって処理されるようになり、ある状況でハッシュ変更中にブラウザの&amp;rdquo;戻る&amp;rdquo;ナビゲーションが実行されてしまうことが修正されました。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;New-in-Svelte-Language-Tools&quot;&gt;&lt;span&gt;New in Svelte &amp;amp; Language Tools&lt;/span&gt;&lt;a href=&quot;#New-in-Svelte-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Svelte 3.38.1 と 3.38.2 ではハイドレーションで要素の重複が発生する問題が修正されました。もしこの問題が発生している場合は最新のバージョンにアップデートしてください！&lt;/li&gt;
&lt;li&gt;新しい TypeScriptプラグインは、JavaScriptやTypeScriptファイルとSvelteファイルのより深い統合を提供します。これには変数の診断、参照、名前変更などが含まれます。このプラグインは VS Code extension にパッケージされていますが、現在はデフォルトでオフになっています。&lt;a href=&quot;https://github.com/sveltejs/language-tools/tree/master/packages/svelte-vscode#svelteenable-ts-plugin&quot;&gt;こちらの設定&lt;/a&gt;で有効にすることができます。是非お試しいただき、&lt;a href=&quot;https://github.com/sveltejs/language-tools/issues/580&quot;&gt;フィードバックをお寄せください&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;最新バージョンの &lt;code&gt;svelte-check&lt;/code&gt; は &lt;code&gt;tsconfig.json&lt;/code&gt; や &lt;code&gt;jsconfig.json&lt;/code&gt; のパスを指定できるようになりました。例: &lt;code&gt;svelte-check --tsconfig &amp;quot;./tsconfig.json&amp;quot;&lt;/code&gt;。 これにより、そのコンフィグで参照されているファイルに対してのみ診断が行われます。また、JavaScriptやTypeScriptのファイルに対しても診断が実行されるため、Svelte 以外のファイルに対して (&lt;code&gt;tsc --noEmit&lt;/code&gt; のような) 別のチェックを実行する必要がなくなります (&lt;code&gt;svelte-check&lt;/code&gt; version &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/svelte-check-1.6.0&quot;&gt;&lt;strong&gt;1.6.0&lt;/strong&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;VS Code extension と &lt;code&gt;svelte-check&lt;/code&gt; が新しくメジャーリリースされました。以前は、イニシャライザを持たないプロパティ (&lt;code&gt;export let foo;&lt;/code&gt;) は、ユーザが TypeScript を使用していて、かつ &lt;code&gt;strict&lt;/code&gt; モードを有効にしている場合にのみ必須とされました。これが変更されました。TypeScriptを使用している場合や、JavaScriptでも &lt;code&gt;checkJs&lt;/code&gt; を使用している場合は、これらのプロパティが常に必須としてマークされるようになりました (&lt;code&gt;svelte-check&lt;/code&gt; version &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/svelte-check-2.0.0&quot;&gt;&lt;strong&gt;2.0.0&lt;/strong&gt;&lt;/a&gt;, extension version &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-105.0.0&quot;&gt;&lt;strong&gt;105.0.0&lt;/strong&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pa-nic/vidu&quot;&gt;vidu&lt;/a&gt; はミニマルな Web アナリティクスコレクターとダッシュボードです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://river-runner.samlearner.com/&quot;&gt;River Runner&lt;/a&gt; は川の流れを仮想的に追うことができ、 Mapbox と Svelte で構築されています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rafistrauss.github.io/jsdoc-generator/&quot;&gt;JSDoc Type Generator&lt;/a&gt; は有効なJSONの JSDoc 型定義を生成します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pagereview.io/&quot;&gt;pagereview.io&lt;/a&gt; は Webサイトのフィードバックツールで、レビューするサイトに直接コメントを残すことができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gamesroom.io/&quot;&gt;gamesroom.io&lt;/a&gt; はビデオチャットが組み込まれているオンラインボードゲームプラットフォームです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://greedygoblin-fe11c.web.app/&quot;&gt;Greedy Goblin&lt;/a&gt; はオールドスクールな Runescape プレイヤーのためのレシピアプリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hashbrown.geopjr.dev/&quot;&gt;hashbrown.geopjr.dev&lt;/a&gt; は GNOME-shell にインスパイアされたWebページで、ソースコードについて学んだり、調べたり、Hashbrown GTK アプリをダウンロードすることができます (&lt;a href=&quot;https://github.com/GeopJr/Hashbrown/tree/website&quot;&gt;ソースのリンク&lt;/a&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://novacbn.github.io/svelte-image-crop/&quot;&gt;svelte-image-crop&lt;/a&gt; は、Web APIを利用したシンプルなクリック＆ドラッグ式の画像切り抜きライブラリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/andrew-secret/svelte-datepicker&quot;&gt;svelte-datepicker&lt;/a&gt; は、Svelteで構築された軽量で包括的な date picker です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-regex-router&quot;&gt;svelte-regex-router&lt;/a&gt; は、Svelteアプリケーションでルーティングを簡単に扱うための、シンプルで軽量なライブラリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-micro&quot;&gt;Svelte Micro&lt;/a&gt; は、Svelte向けの軽量かつリアクティブな単一コンポーネントルーターです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-entity-store&quot;&gt;svelte-entity-store&lt;/a&gt; は、エンティティオブジェクトのコレクションを保存するためのシンプルで汎用的なソリューションを提供します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshnuss/svelte-animation-store&quot;&gt;svelte-animation-store&lt;/a&gt; は、Svelteのトゥイーンストアをベースにしたストアで、トゥイーンの一時停止、継続、リセット、リプレイ、リバース、スピード調整などを行うことができます。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;あなたが作成したコンポーネントをコントリビュートしたいですか?&lt;/strong&gt; &lt;a href=&quot;https://sveltesociety.dev/help/submitting?type=package&quot;&gt;あなたが作成したコンポーネントを Svelte Society のサイトから提出&lt;/a&gt;して頂ければ、&lt;a href=&quot;https://sveltesociety.dev/packages&quot;&gt;パッケージ&lt;/a&gt;のリストに追加することができます。&lt;/p&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なにかご意見がありますか？ &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt;、&lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt;にジョインしてください！&lt;/p&gt;</description><pubDate>Tue, 01 Jun 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年5月</title><link>https://svelte.dev/blog/whats-new-in-svelte-may-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;先週、Svelte Summitの大量のコンテンツにとても感激しました！ &lt;a href=&quot;https://www.youtube.com/watch?v=fnr9XWvjJHw&quot;&gt;フルレコーディングをご覧いただけますし&lt;/a&gt;、音声のみの(プ)レビューを&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-summit-party-episode&quot;&gt;Svelte Radio&lt;/a&gt;でお聞きいただけます。それでは今月のニュースに参りましょう…&lt;/p&gt;
&lt;h2 id=&quot;New-features-in-the-Svelte-Compiler&quot;&gt;&lt;span&gt;New features in the Svelte Compiler&lt;/span&gt;&lt;a href=&quot;#New-features-in-the-Svelte-Compiler&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:global()&lt;/code&gt; is now supported as part of compound CSS selectors (&lt;strong&gt;3.38.0&lt;/strong&gt;, &lt;a href=&quot;/playground/54148fd2af484f2c84977c94e523c7c5?version=3.38.0&quot;&gt;Example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS custom properties can now be passed to components for use cases such as theming (&lt;strong&gt;3.38.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/issues/6268&quot;&gt;Docs coming soon&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;New-in-SvelteKit&quot;&gt;&lt;span&gt;New in SvelteKit&lt;/span&gt;&lt;a href=&quot;#New-in-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://kit.svelte.dev/&quot;&gt;kit.svelte.dev&lt;/a&gt; has a fresh new look and the &lt;a href=&quot;https://netlify.demo.svelte.dev/&quot;&gt;SvelteKit Demo Site&lt;/a&gt; got a fresh set of paint. Check it out by running &lt;code&gt;npm init svelte@next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;You can now use &lt;code&gt;@sveltejs/adapter-static&lt;/code&gt; to create a single-page app or SPA by specifying a fallback page (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1181&quot;&gt;PR&lt;/a&gt;, &lt;a href=&quot;https://github.com/sveltejs/kit/tree/master/packages/adapter-static&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Disable Server-side Rendering (SSR) app-wide or on a page-by-page basis (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/713&quot;&gt;PR&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Error messages thrown during pre-rendering are now much more informative and readable (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1062&quot;&gt;PR&lt;/a&gt;, &lt;a href=&quot;/docs/kit/routing#error&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Layouts can now be reset to prevent pages from inheriting the root layout. This is useful if you have a specific layout for a page or i18n variation (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1061&quot;&gt;PR&lt;/a&gt;, &lt;a href=&quot;/docs/kit/advanced-routing#Advanced-layouts-layout&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fetch&lt;/code&gt; in SvelteKit code will now use the environment-provided implementation, whenever possible. If &lt;code&gt;fetch&lt;/code&gt; is unavailable, it will be polyfilled by adapters (&lt;a href=&quot;https://github.com/sveltejs/kit/pull/1066&quot;&gt;PR&lt;/a&gt;, &lt;a href=&quot;/docs/kit/load#Making-fetch-requests&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;New-in-Svelte-Language-Tools&quot;&gt;&lt;span&gt;New in Svelte &amp;amp; Language Tools&lt;/span&gt;&lt;a href=&quot;#New-in-Svelte-Language-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;svelte-preprocess&lt;/code&gt; が tsconfig.json の &amp;ldquo;extends&amp;rdquo; フィールドをサポートしました (4.7.2)&lt;/li&gt;
&lt;li&gt;HTML の &lt;code&gt;style&lt;/code&gt; 属性に hover と auto-complete が追加されました。Foreign namespaces と ESM configs が Svelte language server と extension でサポートされました&lt;/li&gt;
&lt;li&gt;Svelte language tools は slot/event にジェネリックな関係が定義されている場合にそれらのプロパティから型を推測できるようになりました (原文: The Svelte language tools can now infer slot/event types from their props if a generic relationship between them was defined)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gitpod-io/website&quot;&gt;gitpod.io&lt;/a&gt; は最近 SvelteKit でサイトを書き直しました&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://highlighteel.com/&quot;&gt;highlight eel&lt;/a&gt; はあらゆるYoutubeビデオのお気に入りの部分をマークしてクリップし、誰とでも共有できるWebベースのエディターです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thefarstar.apotheus.net/&quot;&gt;The Far Star Mission&lt;/a&gt; は、Apotheus のアルバム「The Far Star」に付属する対話型のオーディオブックです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nclskfm/javascript-quiz&quot;&gt;JavaScript quiz&lt;/a&gt; は解答をローカルに保存できる小さなクイズアプリケーションです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://extensionpay.com/&quot;&gt;ExtensionPay&lt;/a&gt; を使用すると、バックエンドのサーバーコードなしで、ブラウザ拡張機能で安全な支払いを受け取ることができます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mk48.io/&quot;&gt;mk48.io&lt;/a&gt; は SvelteKitで作られた海軍戦艦のゲームです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frog-safety.vercel.app/&quot;&gt;Frog Safety&lt;/a&gt; は African Dwarf Frogs と API freshwater master kit のガイドです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/overscore-media/stardew-valley-character-preview&quot;&gt;Stardew Valley Character Preview&lt;/a&gt; Stardew Valley のセーブファイルからキャラクターの属性をロードし、様々な服、色、アクセサリーで遊ぶことができます&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Demos-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Demos, Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Demos-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kindoflew/svelte-parallax&quot;&gt;svelte-parallax&lt;/a&gt; はSvelte向けのスプリングベースのパララックスコンポーネントです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/svelte-plugins/viewable&quot;&gt;@svelte-plugins/viewable&lt;/a&gt; は要素の視認性をトラッキングするためのシンプルなルールベースのアプローチです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Wolfr/sveltekit-jui&quot;&gt;Sveltekit-JUI&lt;/a&gt; は Svelte および SvelteKit と組み合わせて使用するUIコンポーネントキットです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/mhmd-22/ezgesture#integrating-with-other-frameworks&quot;&gt;EZGesture&lt;/a&gt; は、シンプルなネイティブDOMイベントでジェスチャー機能を簡単に追加することができます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;あなたが作成したコンポーネントをコントリビュートしたいですか?&lt;/strong&gt; &lt;a href=&quot;https://sveltesociety.dev/help/submitting?type=package&quot;&gt;あなたが作成したコンポーネントを Svelte Society のサイトから提出&lt;/a&gt;して頂ければ、&lt;a href=&quot;https://sveltesociety.dev/packages&quot;&gt;パッケージ&lt;/a&gt;のリストに追加することができます。&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Starters&quot;&gt;&lt;span&gt;Starters&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Starters&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ivoberger.com/posts/using-vercel-analytics-with-svelte-kit&quot;&gt;How to use Vercel Analytics with SvelteKit&lt;/a&gt; では、ユーザーのデバイス間で Web Vitals をトラッキングする方法を説明しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Kiho/aspcore-spa-cli/tree/master/samples/SviteSample&quot;&gt;Asp.NETCore + Svelte + Vite&lt;/a&gt; は3つのフレームワークを SpaCliMiddleware (VS2019) で接続します&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Leftium/coffeescript-adder&quot;&gt;Add CoffeeScript to Svelte&lt;/a&gt; は、SvelteKit プロジェクトや Vite を使用している Svelte アプリに CoffeeScript を追加する実験的なコマンドです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshnuss/svelte-supabase&quot;&gt;Adds Supabase to Svelte&lt;/a&gt; は、SvelteKit プロジェクトに Spabase を追加する実験的なコマンドです&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SectorXUSA/svelte-babylon&quot;&gt;svelte-babylon&lt;/a&gt; はリアクティブな Svelte コンポーネントを通して BabylonJS を A-Frame のように使用することができます&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特定のスターターをお探しですか？&lt;/strong&gt; &lt;a href=&quot;https://github.com/svelte-add/svelte-adders&quot;&gt;svelte-adders&lt;/a&gt; や、その他多数のテンプレート例をコミュニティサイト &lt;a href=&quot;https://sveltesociety.dev/templates/&quot;&gt;sveltesociety.dev&lt;/a&gt; からチェックしてみてください。&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/puruvj/amazing-macos-dock-animation-in-svelte-5hfb&quot;&gt;Amazing macOS Dock animation in Svelte&lt;/a&gt; では Svelte と popmotion の相性の良さを示しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/svelte-tower-of-hanoi/&quot;&gt;Solving the Tower of Hanoi with recursive Svelte templates&lt;/a&gt; では、&lt;code&gt;&amp;lt;svelte:self&amp;gt;&lt;/code&gt; 要素を一般的なコンピュータサイエンスの問題に組み込んでいます&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/juranki/diy-sveltekit-cdk-adapter-3enp&quot;&gt;DIY SvelteKit CDK adapter&lt;/a&gt; は SvelteKit と AWS CDK を統合します&lt;/li&gt;
&lt;li&gt;Fireshipの &lt;a href=&quot;https://www.youtube.com/watch?v=rv3Yq-B8qp4&quot;&gt;Svelte in 100 Seconds&lt;/a&gt; は Svelte のコアコンセプトをすばやく簡単に紹介しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=tsePBA2JC7o&amp;list=PLualcIC6WNK1LHIYx2Tg9AQfTQDv4zNPu&quot;&gt;Tech Downtime&lt;/a&gt; は、Svlete の起動と実行、デバッグまで深く掘り下げているプレイリストです&lt;/li&gt;
&lt;li&gt;lihautan の &lt;a href=&quot;https://www.youtube.com/watch?v=rwYgOU0WmVk&amp;list=PLoKaNN3BjQX3mxDEVG3oGJx2ByXnue_gR&amp;index=59&quot;&gt;Svelte 101&lt;/a&gt; と &lt;a href=&quot;https://www.youtube.com/watch?v=p4GmT0trCPE&amp;list=PLoKaNN3BjQX3fG-XOSwsPHtnV8FUY6lgK&amp;index=19&quot;&gt;Svelte Store&lt;/a&gt; の最新ビデオは、slots、store、context と、それをいつどこで使用するかを説明しています&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/c/DavidParkerW/playlists&quot;&gt;DavidParkerW&lt;/a&gt; は、Svelte、Sapper、SvelteKitをいくつかの実世界のシナリオで探求しています。例えば、&lt;a href=&quot;https://www.youtube.com/watch?v=kAPVFgFnxaM&amp;list=PLPqKsyEGhUna6cvm6d4vZNI6gbt_0S4Xx&amp;index=15&quot;&gt;APIからブログポストのリストを表示する&lt;/a&gt; 、などです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なにかご意見がありますか？ &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt;、&lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt;にジョインしてください！&lt;/p&gt;</description><pubDate>Sat, 01 May 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: 2021年4月</title><link>https://svelte.dev/blog/whats-new-in-svelte-april-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;数ヶ月(数年)かけて進めてきた2つのプロジェクトが公開されました。SvelteKitは現在パブリックベータとなり、slotted components はSvelteで使えるようになりました！&lt;/p&gt;
&lt;h2 id=&quot;SvelteKit-(What&#39;s-up-with-SvelteKit-)&quot;&gt;&lt;span&gt;SvelteKitはどう？(What&amp;rsquo;s up with SvelteKit?)&lt;/span&gt;&lt;a href=&quot;#SvelteKit-(What&#39;s-up-with-SvelteKit-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://kit.svelte.jp/&quot;&gt;SvelteKit&lt;/a&gt; - SSR、サーバーレスアプリケーション、SPAなどを構築するためのSvelteの汎用的なフレームワーク - が正式にパブリックベータになりました。バグがあるかも！　詳細は&lt;a href=&quot;/blog/sveltekit-beta&quot;&gt;最新のブログ記事&lt;/a&gt;をご覧ください。1.0がいつリリースされるか知りたいですか？ &lt;a href=&quot;https://github.com/sveltejs/kit/milestone/2&quot;&gt;github&lt;/a&gt;のマイルストーンをチェックしてみてください。&lt;/p&gt;
&lt;p&gt;始め方、Sapperとの違い、新しい機能や移行方法を学びたいですか？　今週の&lt;a href=&quot;https://www.svelteradio.com/episodes/svelte-kit-public-beta&quot;&gt;Svelte Radioのエピソード&lt;/a&gt;で、AntonyとKevとSwyxが深く掘り下げているのでチェックしてみてください。&lt;/p&gt;
&lt;h2 id=&quot;Svelte-Language-(New-in-Svelte-Language-Tools)&quot;&gt;&lt;span&gt;SvelteとLanguageツールの新着情報(New in Svelte &amp;amp; Language Tools)&lt;/span&gt;&lt;a href=&quot;#Svelte-Language-(New-in-Svelte-Language-Tools)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Slotted components (&lt;code&gt;&amp;lt;svelte:fragment slot=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt;を含む) を使用すると、コンポーネントの利用者が特定のスロットにリッチなコンテンツを割り当てることができます (&lt;strong&gt;Svelte 3.35.0, Language Tools &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-104.5.0&quot;&gt;104.5.0&lt;/a&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Linked editing がSvelteファイル内のHTMLで機能するようになりました (&lt;strong&gt;Language Tools, &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-104.6.0&quot;&gt;104.6.0&lt;/a&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;型定義 &lt;code&gt;svelte.d.ts&lt;/code&gt; が正常に解決されるようになり、ライブラリの作成者がSvelteコンポーネントと一緒に型定義を配布できるようになりました (&lt;strong&gt;Language Tools, &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases/tag/extensions-104.7.0&quot;&gt;104.7.0&lt;/a&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;ViteでSvelteを使用するのに &lt;a href=&quot;https://github.com/sveltejs/vite-plugin-svelte&quot;&gt;vite-plugin-svelte&lt;/a&gt; が利用可能になりました。&lt;code&gt;npm init @vitejs/app&lt;/code&gt; はこのプラグインを使用したSvelteオプションが含まれています。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;アプリ &amp;amp; サイト&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nagato.app/&quot;&gt;Nagato&lt;/a&gt; はポピュラーなタイムトラッキングツールやToDoツールを1箇所につなげられるタスク管理ツールです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://type-kana.cass.moe/setup&quot;&gt;type-kana&lt;/a&gt; は日本の文字である ひらがな (hiragana) と カタカナ (katakana) を学ぶのに役に立つクイズアプリです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pittsburgh-steps.samlearner.com/&quot;&gt;Pittsburgh Steps&lt;/a&gt; はペンシルベニア州ピッツバーグにある800以上の公共の屋外階段のインタラクティブなマップです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tobx.github.io/music-mode-wheels/&quot;&gt;Music Mode Wheels&lt;/a&gt; は音楽のモードをインタラクティブなホイールとして表示するWebサイトです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.critical-notes.com/&quot;&gt;Critical Notes&lt;/a&gt; はゲームマスターとプレイヤーがロールプレイングゲームのキャンペーンやアドベンチャーを記録するのに役立ちます。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alanrsoares/svelte-game-of-life&quot;&gt;Svelte Game of Life&lt;/a&gt; はコンウェイのライフゲームの教育向けの実装で、TypeScriptとSvelteで書かれています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/foxql&quot;&gt;foxql&lt;/a&gt; はブラウザ上で動作するピアツーピアの全文検索エンジンです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;デモ、ライブラリ、ツール &amp;amp; コンポーネント&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nodegui/svelte-nodegui&quot;&gt;svelte-nodegui&lt;/a&gt; はパフォーマンスの良いネイティブでクロスプラットフォームなデスクトップアプリケーションをNode.jsとSvelteで構築する方法です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@storybook/addon-svelte-csf&quot;&gt;Svelte Story Format&lt;/a&gt; は、Svelteの構文でStorybookの &amp;ldquo;ストーリー(stories)&amp;rdquo; を書くことができます。詳しくは &lt;a href=&quot;https://storybook.js.org/blog/storybook-for-svelte/&quot;&gt;Storybook blog&lt;/a&gt; をご覧ください。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pavish/select-madu&quot;&gt;SelectMadu&lt;/a&gt; は検索、複数選択、非同期データロードなどをサポートする、セレクトメニューの代替です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-checklist&quot;&gt;Svelte Checklist&lt;/a&gt; はSvelteで構築されたカスタマイズ可能なチェックリストです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@jamcart/suspense&quot;&gt;Suspense for Svelte&lt;/a&gt; はReactの&lt;code&gt;&amp;lt;Suspense&amp;gt;&lt;/code&gt;の中核となるアイデアを実装したSvelteコンポーネントです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://spierala.github.io/mini-rx-store/&quot;&gt;MiniRx&lt;/a&gt; はSvelteとTypeScriptで使える RxJS Redux Store です。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/arabdevelop/svelte-formly&quot;&gt;svelte-formly&lt;/a&gt; はSvelteとSapper向けに動的なフォームを生成します。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@jamcart/7ty&quot;&gt;7ty&lt;/a&gt; はSvelteを使用した静的サイトジェネレーターで、コンポーネントの部分的なハイドレーションをサポートし、Sapperや11tyに似たファイルベースルーティングを使用します。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;あなたが作成したコンポーネントをコントリビュートしたいですか?&lt;/strong&gt; &lt;a href=&quot;https://sveltesociety.dev/help/submitting?type=package&quot;&gt;あなたが作成したコンポーネントを Svelte Society のサイトから提出&lt;/a&gt;して頂ければ、&lt;a href=&quot;https://sveltesociety.dev/packages&quot;&gt;パッケージ&lt;/a&gt;のリストに追加することができます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;スターター(Starters)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/FractalHQ/sveltekit-electron&quot;&gt;sveltekit-electron&lt;/a&gt; はSvelteKitを使ったElectronのスターターキットです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/acidlake/sveltekit-tailwindcss-external-api&quot;&gt;sveltekit-tailwindcss-external-api&lt;/a&gt; はTailwindCSSと外部のAPIを使用するSvelteプロジェクトを構築するために必要なことが全て揃っており、create-svelteで作られました。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/sapper-netlify&quot;&gt;Sapper Netlify&lt;/a&gt; は Netlify functions 上で動作するSapper Projectです。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特定のスターターをお探しですか？&lt;/strong&gt; &lt;a href=&quot;https://github.com/svelte-add/svelte-adders&quot;&gt;svelte-adders&lt;/a&gt; や、その他多数のテンプレート例をコミュニティサイト &lt;a href=&quot;https://sveltesociety.dev/templates&quot;&gt;sveltesociety.dev&lt;/a&gt; からチェックしてみてください。&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;学習リソース&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://prismic.io/blog/svelte-sveltekit-tutorial&quot;&gt;How to Build a Website with Svelte and SvelteKit&lt;/a&gt; は新しいSvelteKitのセットアップを順を追って説明するチュートリアルです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://geoffrich.net/posts/svelte-prefers-reduced-motion-store/&quot;&gt;A Svelte store for prefers-reduced-motion&lt;/a&gt; では、ユーザーがモーションの軽減を要求しているかどうかを示す値を持つカスタムのSvelte storeを作成して、アクセシビリティを向上させる方法について説明しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/Svelte_TypeScript&quot;&gt;TypeScript support in Svelte&lt;/a&gt; はSvelteでTypeScriptを使う方法についてのMDNのガイドです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gradientdescent.de/merging-cells/&quot;&gt;How to merge cells with svelte-window&lt;/a&gt; は、テーブルのセルをマージする人気ツール react-window の移植版である svelte-window の解説をしています。この移行の詳細については &lt;a href=&quot;https://gradientdescent.de/porting-react-window/&quot;&gt;from react-window 1:1 to svelte-window&lt;/a&gt; をご覧ください。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeandlife.com/2021/03/06/easy-to-embed-svelte-components/&quot;&gt;Easy-to-Embed Svelte Components&lt;/a&gt; では、Rollupとscriptタグを使ってSvelteコンポーネントを任意の場所に埋め込む方法を説明しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-sHcqj4YLeQ&quot;&gt;Convert Svelte project from Rollup to Snowpack&lt;/a&gt; は一般的な移行パターンについてビデオで解説しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.leaf.cloud/blog/how-to-internationalize-routing-in-svelte-sapper?utm_medium=story&amp;utm_source=reddit.com&amp;utm_campaign=awareness&amp;utm_content=sapper_routing&quot;&gt;How to internationalize routing in Svelte &amp;amp; Sapper&lt;/a&gt; では、leaf.cloud がどのようにサイトをオランダ語に翻訳したかを説明しています。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-rTnWlbdjoY&quot;&gt;Svelte Store: Reactive context using Svelte Store&lt;/a&gt; は &amp;ldquo;どうやって[a]context の値をリアクティブにするのか&amp;rdquo; という質問に答えているビデオです。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=-Si5o-R7KHY&quot;&gt;Creating Social Sharing Images with Cloudinary and Svelte&lt;/a&gt; はJAMstackのWebサイト向けのOpen GraphのイメージやTwitterカードを動的に開発する方法を説明するCloudinaryのビデオです。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;(See-you-next-month-)&quot;&gt;&lt;span&gt;また来月お会いしましょう！(See you next month!)&lt;/span&gt;&lt;a href=&quot;#(See-you-next-month-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;なにかご意見がありますか？ &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;、&lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt;、&lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt;にジョインしてください！&lt;/p&gt;</description><pubDate>Thu, 01 Apr 2021 00:00:00 GMT</pubDate></item><item><title>SvelteKitがpublic betaに到達しました(SvelteKit is in public beta)</title><link>https://svelte.dev/blog/sveltekit-beta</link><author>Rich Harris</author><description>&lt;aside&gt;&lt;p&gt;前回: &lt;a href=&quot;/blog/whats-the-deal-with-sveltekit&quot;&gt;What&#39;s the deal with SvelteKit?&lt;/a&gt;&lt;/p&gt;&lt;/aside&gt;

&lt;p&gt;お待たせしました。5か月という期間、何百ものコミットを経て、ついにSvelteKitのベータ版をお試し頂けるようになりました。まだ完成はしていません — いくつか既知のバグや、不足している機能がありますが — 私たちは出来栄えにとても満足しており、皆様に試して頂くのが待ちきれません。&lt;/p&gt;
&lt;p&gt;新しいプロジェクトの開始は簡単です:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;# プロジェクト作成&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;mkdir&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;my-app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;my-app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;init&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte@next&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;# 依存関係をインストール&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;# 開発サーバを開始してブラウザタブを開く&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;run&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;dev&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;--&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;--open&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ドキュメントは &lt;a href=&quot;/docs/kit&quot;&gt;svelte.dev/docs/kit&lt;/a&gt; にあります。もし &lt;a href=&quot;https://sapper.svelte.dev&quot;&gt;Sapper&lt;/a&gt; アプリをSvelteKitに移行したい場合は、&lt;a href=&quot;/docs/kit/migrating&quot;&gt;svelte.dev/docs/kit/migrating&lt;/a&gt; に解説がございます。&lt;/p&gt;
&lt;p&gt;ソースコードは &lt;a href=&quot;https://github.com/sveltejs/kit&quot;&gt;github.com/sveltejs/kit&lt;/a&gt; で公開しています。issueとpull requestは整理が完了するまで無効にしておりますが、近い将来、完全に公開する予定です。&lt;/p&gt;
&lt;h2 id=&quot;SvelteKit-(Wait-what-is-SvelteKit-)&quot;&gt;&lt;span&gt;待って、SvelteKitって何？(Wait, what is SvelteKit?)&lt;/span&gt;&lt;a href=&quot;#SvelteKit-(Wait-what-is-SvelteKit-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelteにとっての &lt;a href=&quot;https://nextjs.org/&quot;&gt;Next&lt;/a&gt; のようなものだとお考えください。Svelteでアプリを構築するためのフレームワークであり、サーバーサイドレンダリング、ルーティング、JSやCSSのコード分割、様々なサーバーレスプラットフォームへのアダプターなどが完備されています。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://sapper.svelte.dev&quot;&gt;Sapper&lt;/a&gt; に精通されている方にとっては、SvelteKitはSapperの後継です。&lt;/p&gt;
&lt;h2 id=&quot;Snowpack-Vite-(From-Snowpack-to-Vite)&quot;&gt;&lt;span&gt;SnowpackからViteに(From Snowpack to Vite)&lt;/span&gt;&lt;a href=&quot;#Snowpack-Vite-(From-Snowpack-to-Vite)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.snowpack.dev/&quot;&gt;Snowpack&lt;/a&gt; について熱弁を振るった&lt;a href=&quot;/blog/whats-the-deal-with-sveltekit&quot;&gt;アナウンスビデオ&lt;/a&gt; の後では驚かれるかもしれませんが、SvelteKitは内部で &lt;a href=&quot;https://vitejs.dev&quot;&gt;Vite&lt;/a&gt; を使用しています。SvelteKitがどんな構成をとるべきか考え始めた頃に Snowpack を試したのですが、一目惚れでした。&lt;/p&gt;
&lt;p&gt;Snowpack は開発ツールの完全に新しいカテゴリーを生み出しました。ここ数年の webpack や Rollup のように開発中のアプリを &lt;em&gt;バンドル&lt;/em&gt; するのではなく、Snowpack はブラウザのネイティブな &lt;code&gt;import&lt;/code&gt; を使用して、動作中にSvelteコンポーネントなどを 1:1 で変換する &lt;em&gt;バンドルしない開発サーバー&lt;/em&gt; です。その結果、迅速な起動、シンプルなキャッシング、即時のホットモジュールリロードを実現しています。一度この方法を経験すると、もう今までの方法に戻りたくなくなります。&lt;/p&gt;
&lt;p&gt;Vite は Snowpack と同じカテゴリーに属します。Vite 1 はVue中心 (ViteとVueはどちらも &lt;a href=&quot;https://bsky.app/profile/evanyou.me&quot;&gt;Evan You&lt;/a&gt; が開発しています) でサーバーサイドレンダリングが難しかったためSvelteKitには適していませんでしたが、Vite 2 はフレームワークにとらわれず、SSRを中心に設計されています。また、CSSのコード分割など、以前は自分たちで実装しなければならなかった強力な機能を備えています。2つのテクノロジーを並べて評価したところ、ViteのほうがSvelteKitの要件にマッチしており、私たちが考えているフレームワークを実現できる可能性が高いと結論づけざるを得ませんでした。&lt;/p&gt;
&lt;p&gt;開発の初期段階に緊密に協力してくれたこと、また、今後数年のWeb開発の道筋を示してくれたことの両方について、Snowpackチームに深い感謝の意を表します。とても素晴らしいツールなので、是非試してみてください。&lt;/p&gt;
&lt;h2 id=&quot;(Dogfooding-as-extreme-sport)&quot;&gt;&lt;span&gt;エクストリームスポーツとしてのドッグフーディング(Dogfooding as extreme sport)&lt;/span&gt;&lt;a href=&quot;#(Dogfooding-as-extreme-sport)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SvelteKit はまだベータ版ですが、プロダクションで使われていないわけではありません。&lt;/p&gt;
&lt;p&gt;私の本業は New York Times で、過去12か月のほとんどを &lt;a href=&quot;https://www.nytimes.com/interactive/2020/us/coronavirus-us-cases.html&quot;&gt;coronavirus tracker&lt;/a&gt; の開発に費やしてきました。これは Times のグラフィックの大半を担うワークフローのカスタマイズバージョンを使用していますが、大規模な複数ページのプロジェクト向けには設計されていません。昨年末、アメリカの~3,000もの郡ごとにページを作成することを決めたとき、プロジェクトを完全に再構築する必要があると気付きました。&lt;/p&gt;
&lt;p&gt;SvelteKitは、まだ完成していないにもかかわらず、私たちの難解な要件にマッチする唯一のフレームワークでした(ニュースルームで働き、CMSと格闘したことが有る人なら、私が言っていることがわかると思います)。現在では、&lt;a href=&quot;https://www.nytimes.com/interactive/2021/us/tom-green-texas-covid-cases.html&quot;&gt;county risk pages&lt;/a&gt; にも使用されており、既存のページをSvelteKitアプリに移行しているところです。&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;同僚たちの忍耐力には永遠に感謝します。&lt;/p&gt;&lt;/aside&gt;

&lt;p&gt;何百万人もの人に見てもらうアプリを作るのに未完成のソフトウェアを使用するのはリスクがありますし、一般的にはおすすめできません。しかし、これによってアプリの開発を大幅に速くすることができましたし、フレームワーク自体も以前よりずっと強固になりました。&lt;/p&gt;
&lt;h2 id=&quot;1.0-(The-road-to-1.0)&quot;&gt;&lt;span&gt;1.0に向けたロードマップ(The road to 1.0)&lt;/span&gt;&lt;a href=&quot;#1.0-(The-road-to-1.0)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;1.0マイルストーンの未解決のissueは &lt;a href=&quot;https://github.com/sveltejs/kit/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.0&quot;&gt;issue tracker&lt;/a&gt; で確認できます。その作業に加えて、ドキュメントをアップグレードし、&lt;a href=&quot;/docs/kit/adapters&quot;&gt;adapters&lt;/a&gt; を追加する予定です。&lt;/p&gt;
&lt;p&gt;最も重要なことは、私たちが最高のアプリケーションフレームワークを作るためには、皆さんからのフィードバックが必要であるということです。実際に使ってみて、足りない部分を教えてください。&lt;/p&gt;
&lt;p&gt;&amp;lsquo;here be dragons&amp;rsquo; という警告や、ドキュメントの不足にもかかわらず、SvelteKitを試してくださった皆様に感謝します。バックチャンネルのフィードバックは非常に貴重でした。特に、非公式のドキュメントと不足していたWindowsサポートを追加したフォークをメンテしてくれた &lt;a href=&quot;https://github.com/GrygrFlzr&quot;&gt;GrygrFlzr&lt;/a&gt; と、 &lt;a href=&quot;https://github.com/svitejs/svite&quot;&gt;Svite&lt;/a&gt; でSvelteKitのViteインテグレーションの重要な基礎を築いた &lt;a href=&quot;https://github.com/dominikg&quot;&gt;dominikg&lt;/a&gt; に感謝したいと思います。この度、両名ともチームに迎え入れられました。&lt;/p&gt;</description><pubDate>Tue, 23 Mar 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: March 2021</title><link>https://svelte.dev/blog/whats-new-in-svelte-march-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;Lots to cover this month with releases from across the Svelte ecosystem. Most importantly, Svelte Summit Spring 2021 has an &lt;a href=&quot;https://sessionize.com/svelte-summit-spring-2021&quot;&gt;Open Call for Speakers&lt;/a&gt;. &lt;strong&gt;The deadline is March 14&lt;/strong&gt; so if you have an idea for a talk, submit it now!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive into the news 🐬&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-new-in-sveltejs-svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s new in sveltejs/svelte&lt;/span&gt;&lt;a href=&quot;#What&#39;s-new-in-sveltejs-svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;SSR store handling has been reworked to subscribe and unsubscribe as in DOM mode. SSR stores should work much more consistently now (&lt;strong&gt;3.31.2&lt;/strong&gt;, see &lt;a href=&quot;/playground/custom-stores&quot;&gt;custom stores&lt;/a&gt; and &lt;a href=&quot;https://v4.svelte.dev/docs#run-time-server-side-component-api&quot;&gt;Server-side component API &lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Multiple instances of the same action are now allowed on an element (&lt;strong&gt;3.32.0&lt;/strong&gt;, &lt;a href=&quot;/playground/01a14375951749dab9579cb6860eccde?version=3.32.0&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The new &lt;code&gt;foreign&lt;/code&gt; namespace should make it easier for alternative compile targets (like Svelte Native and SvelteGUI) by disabling certain HTML5-specific behaviour and checks (&lt;strong&gt;3.32.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/5652&quot;&gt;more info&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Support for inline comment sourcemaps in code from preprocessors (&lt;strong&gt;3.32.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Destructured defaults are now allowed to refer to other variables (&lt;strong&gt;3.33.0&lt;/strong&gt;, &lt;a href=&quot;/playground/0ee7227e1b45465b9b47d7a5ae2d1252?version=3.33.0&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Custom elements will now call &lt;code&gt;onMount&lt;/code&gt; functions when connecting and clean up when disconnecting (&lt;strong&gt;3.33.0&lt;/strong&gt;, checkout &lt;a href=&quot;https://github.com/sveltejs/svelte/pull/4522&quot;&gt;this PR&lt;/a&gt; for an interesting conversation on how folks are using Svelte with Web Components)&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;cssHash&lt;/code&gt; option has been added to the compiler options to control the classname used for CSS scoping (&lt;strong&gt;3.34.0&lt;/strong&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#compile-time-svelte-compile&quot;&gt;docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Continued improvement to TypeScript definitions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete list of changes, including bug fixes and links to PRs, check out &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;the CHANGELOG&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;New-from-sveltejs-language-tools&quot;&gt;&lt;span&gt;New from sveltejs/language-tools&lt;/span&gt;&lt;a href=&quot;#New-from-sveltejs-language-tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;For language server clients that don&amp;rsquo;t support &lt;code&gt;didChangeWatchedFiles&lt;/code&gt;, a fallback file watcher will be used instead&lt;/li&gt;
&lt;li&gt;New highlighting rules for store accessors and element directives (like &lt;code&gt;bind:&lt;/code&gt; and &lt;code&gt;class:&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;HTML tags can now be renamed together&lt;/li&gt;
&lt;li&gt;Mustache tags parsing is now more robust and will provide better intellisense in more situations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Haven&amp;rsquo;t tried the language-tools yet? Check out &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode&quot;&gt;Svelte Extension for VSCode&lt;/a&gt; or find a plugin for your favorite IDE!&lt;/p&gt;
&lt;h2 id=&quot;Other-changes-from-sveltejs&quot;&gt;&lt;span&gt;Other changes from sveltejs/*&lt;/span&gt;&lt;a href=&quot;#Other-changes-from-sveltejs&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/eslint-plugin-svelte3&quot;&gt;eslint-plugin-svelte3&lt;/a&gt; now supports TypeScript as of 3.1.0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/prettier-plugin-svelte/&quot;&gt;prettier-plugin-svelte&lt;/a&gt; released a number of minor versions to address whitespace and comment trimming issues.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/svelte-preprocess/&quot;&gt;svelte-preprocess&lt;/a&gt; bug fixes this month include fixes to postcss transformations and support for both v2 and v3 of &lt;code&gt;postcss-load-config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/sapper/&quot;&gt;sapper&lt;/a&gt;&amp;rsquo;s 0.29.1 release fixes some bad imports in type definitions, updates typings to be compatible with express/polka, and restores hashing of all CSS file names.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nytimes.com/interactive/2021/us/new-york-city-new-york-covid-cases.html&quot;&gt;Tracking the Coronavirus&lt;/a&gt; from NYTimes is an example of SvelteKit in production&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Budibase/budibase&quot;&gt;Budibase&lt;/a&gt; is an open-source low-code platform, helping developers and IT professionals build, automate, and ship internal tools 50x faster on their own infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tracktheparcel.com/&quot;&gt;Track the Parcel&lt;/a&gt; is a one-stop tool for tracking parcel status with all major package shippers.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sendmemo.app/features/&quot;&gt;Memo&lt;/a&gt; is a replacement for email that uses Svelte for modern messaging&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/quoid/userscripts&quot;&gt;Userscripts Safari&lt;/a&gt; is an open-source userscript editor for Safari... a native Svelte app for Mac OS!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://svgx.app/&quot;&gt;SVGX&lt;/a&gt; is &amp;ldquo;the desktop SVG asset manager designers and developers wished they had.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://azgaar.github.io/Armoria/&quot;&gt;Armoria&lt;/a&gt; is a procedural heraldry generator and editor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.fictionboard.com&quot;&gt;FictionBoard&lt;/a&gt; is a virtual table top (VTT) platform that just released fillable and responsive character sheets&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://treasure.playaheadgames.com/&quot;&gt;Castles &amp;amp; Crusades Treasure Generator&lt;/a&gt; is a treasure generator for the table top RPG: Castles and Crusades.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jensa.org/NESBitStudio-web/graphics/spritesheets&quot;&gt;NESBit Studio&lt;/a&gt; is a toolkit to help the development of homebrew NES games&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://electroblocks.org/&quot;&gt;ElectroBlocks&lt;/a&gt; is an online Arduino IDE with a built-in simulator (Chrome Only)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://store.steampowered.com/app/552180/GoblinLife/&quot;&gt;Goblin.life&lt;/a&gt; is a 3D world builder whose UI is built with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://farmbox.ae/&quot;&gt;farmbox&lt;/a&gt; is a UAE-based grocery delivery services&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://heroeswearmasks.fun/&quot;&gt;heroeswearmasks.fun&lt;/a&gt; is a client-side machine learning tool that determines whether or not you&amp;rsquo;re wearing a mask.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brdtheo-weatherify.netlify.app/&quot;&gt;weatherify&lt;/a&gt; is a very pretty (and &lt;a href=&quot;https://github.com/brdtheo/weatherify&quot;&gt;open source&lt;/a&gt;) weather app&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dsn-live.netlify.app/#/&quot;&gt;DSN Live&lt;/a&gt; lets you monitor connections between NASA/JPL and interplanetary spacecraft missions in real time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Demos-Libraries-Tools-Components&quot;&gt;&lt;span&gt;Demos, Libraries, Tools &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Demos-Libraries-Tools-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/khang-nd/spc&quot;&gt;spc&lt;/a&gt; is a special characters picker component for the web&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte-injector&quot;&gt;svelte-injector&lt;/a&gt; lets you inject Svelte components in React, Angular, Vue, jQuery, Vanilla JS.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://felte.dev/&quot;&gt;Felte&lt;/a&gt; is a form library for Svelte with simple validation reporting.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/noahsalvi/svelte-use-form#readme&quot;&gt;svelte-use-form&lt;/a&gt; is form library that &amp;ldquo;is easy to use and has 0 boilerplate.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://formula.svelte.codes/&quot;&gt;Formula&lt;/a&gt; provides &amp;ldquo;Zero Configuration Reactive Forms for Svelte.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AlecAivazis/houdini&quot;&gt;Houdini&lt;/a&gt; is &amp;ldquo;the disappearing GraphQL client built for Sapper and Sveltekit.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/leoe33/sveltesplitpane/&quot;&gt;svelte-split-pane&lt;/a&gt; is a draggable split pane component&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/micha-lmxt/svelte-virtualized-auto-sizer&quot;&gt;svelte-virtualized-auto-sizer&lt;/a&gt; is a high-order component that automatically adjusts the width and height of a single child.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/micha-lmxt/svelte-window&quot;&gt;svelte-window&lt;/a&gt; are components for efficiently rendering large, scrollable lists and tabular data.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MacFJA/svelte-persistent-store&quot;&gt;Svelte Persistent store&lt;/a&gt; is a Svelte store that keep its value through pages and reloads&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=NickScialli.svelte-dark&quot;&gt;Svelte Dark&lt;/a&gt; is a VSCode theme inspired by the svelte.dev REPL&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost&quot;&gt;Import Cost&lt;/a&gt; has been updated to support Svelte libraries and help developers keep their bundle size under control.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Himujjal/tree-sitter-svelte&quot;&gt;Tree-sitter-svelte&lt;/a&gt; provides tree-sitter grammar for svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/b73224a0fd4248178e3eab41943d41a9?version=3.31.2&quot;&gt;Svelte Ripple&lt;/a&gt; is a Material Design ripple effect that doesn&amp;rsquo;t depend on &lt;code&gt;@material/ripple&lt;/code&gt; (made by @karakara in the Svelte Discord)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/270e83f43e7a48918d8f2d497760904f?version=3.32.1&quot;&gt;Analog SVG Clock&lt;/a&gt; is a great example of easing functions (made by @tonmcg in the Svelte Discord)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/11f609d0d90746f08da6d3d90bba84fc?version=3.32.0&quot;&gt;Console Log Styler&lt;/a&gt; lets you generate a styled console log using pseudo HTML and CSS (made by @EmNudge in the Svelte Discord)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/martinse/svelte-heroicons&quot;&gt;svelte-heroicons&lt;/a&gt; is a handy wrapper for the Heroicons icon library&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshnuss/supabase-ui-svelte&quot;&gt;supabase-ui-svelte&lt;/a&gt; are UI components for Supabase authentication&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Have your own Svelte Component to share?&lt;/strong&gt; &lt;a href=&quot;https://sveltesociety.dev/help/submitting?type=package&quot;&gt;Submit your own component&lt;/a&gt; to the list of &lt;a href=&quot;https://sveltesociety.dev/packages&quot;&gt;packages&lt;/a&gt; on the Svelte Society site.&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources-Starters&quot;&gt;&lt;span&gt;Learning Resources &amp;amp; Starters&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources-Starters&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sk-incognito.vercel.app/learn/what-is-sveltekit&quot;&gt;The &lt;strong&gt;unofficial&lt;/strong&gt; SvelteKit docs&lt;/a&gt; were built using SvelteKit and are &lt;a href=&quot;https://github.com/GrygrFlzr/kit-docs&quot;&gt;open for contributions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLoKaNN3BjQX3fG-XOSwsPHtnV8FUY6lgK&quot;&gt;📦 Svelte Store&lt;/a&gt; course by lihautan covers the basics of Svelte Stores and best practices.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=cbxxbBofjAw&amp;feature=youtu.be&quot;&gt;Svelte Events&lt;/a&gt; by WebJeda explains how directives like &lt;code&gt;on:&lt;/code&gt; can be used to listen to DOM events.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.webtips.dev/how-to-set-up-protected-routes-in-your-svelte-application&quot;&gt;How to Set Up Protected Routes in Your Svelte Application&lt;/a&gt; describes how to authenticate your users to access your routes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/fauna/using-fauna-s-streaming-feature-to-build-a-chat-with-svelte-1gkd&quot;&gt;Using Fauna&amp;rsquo;s streaming feature to build a chat with Svelte&lt;/a&gt; demonstrates how to setup and configure Fauna to build a real-time chat interface with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.takeshape.io/articles/using-takeshape-with-sapper/&quot;&gt;Using TakeShape with Sapper&lt;/a&gt; demonstrates how to connect the TakeShape CMS with Sapper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rodabt/yastpack&quot;&gt;YastPack&lt;/a&gt; is Yet Another Snowpack-Svelte-TailwindCss-Routify Template Pack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ralphbliu.medium.com/s2t2-snowpack-svelte-tailwindcss-typescript-8928caa5af6c&quot;&gt;S2T2&lt;/a&gt; is a Snowpack + Svelte + TailwindCSS + TypeScript template&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tonyketcham/sapper-tailwind2-template&quot;&gt;tonyketcham/sapper-tailwind2-template&lt;/a&gt; is a Sapper Template w/ Tailwind 2.0, TypeScript, ESLint, and Prettier&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Got something to add? Join us on &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; and &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt;!&lt;/p&gt;</description><pubDate>Mon, 01 Mar 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: February 2021</title><link>https://svelte.dev/blog/whats-new-in-svelte-february-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;With the shortest month of the year coming up, Svelte maintainers and community members alike have been busy this last month – from big changes in &lt;code&gt;svelte-loader&lt;/code&gt;, &lt;code&gt;prettier-plugin-svelte&lt;/code&gt;, &lt;code&gt;rollup-plugin-svelte&lt;/code&gt;, and &lt;code&gt;language-tools&lt;/code&gt; to steady progress in Sapper and &lt;code&gt;svelte-preprocess&lt;/code&gt;. Meanwhile, lots of folks have been busy integrating Svelte with other popular frameworks.&lt;/p&gt;
&lt;h2 id=&quot;New-compiler-features&quot;&gt;&lt;span&gt;New compiler features&lt;/span&gt;&lt;a href=&quot;#New-compiler-features&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Aria roles from the &lt;a href=&quot;https://www.w3.org/TR/graphics-aria-1.0/#role_definitions&quot;&gt;WAI-ARIA Graphics Module&lt;/a&gt; are now recognized as valid aria roles in Svelte components (&lt;strong&gt;3.31.1&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Compiler warnings for the common React attributes, &lt;code&gt;className&lt;/code&gt; and &lt;code&gt;htmlFor&lt;/code&gt;, now make it easier to port React components to Svelte (&lt;strong&gt;3.31.1&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Have a suggestion for a compiler feature or want to help implement new features/bug fixes? Check out the &lt;a href=&quot;https://github.com/sveltejs/svelte/issues?q=is%3Aopen+is%3Aissue+label%3A%22triage%3A+good+first+issue%22&quot;&gt;&amp;ldquo;triage: good first issue&amp;rdquo; tag for Svelte&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;New-bits-in-language-tools&quot;&gt;&lt;span&gt;New bits in language-tools&lt;/span&gt;&lt;a href=&quot;#New-bits-in-language-tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;User disabled auto import suggestions no longer show in VS Code (&lt;strong&gt;103.0.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Renaming a variable is now safer with smart additions of a prefix/suffix to renamed variables (&lt;strong&gt;104.0.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Semantic (token) highlighting for TypeScript users lets theme makers apply semantic styling in their themes, if they support it (&lt;strong&gt;104.0.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Extract Component&amp;rdquo; has been added to the context menu - allowing you to extract components out of files without having to open the command window to type &amp;ldquo;Svelte: Extract Component&amp;rdquo; (&lt;strong&gt;104.0.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;The VS Code extension now listens to JavaScript/TypeScript file changes - you no longer need to save the files for the changes to be noticed (&lt;strong&gt;104.1.0&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the complete list of changes, check out the language-tools &lt;a href=&quot;https://github.com/sveltejs/language-tools/releases&quot;&gt;Releases page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A great way to try the language tools is to download the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode&quot;&gt;Svelte Extension for VSCode&lt;/a&gt;. This extension provides syntax highlighting and rich intellisense for Svelte components in VS Code, using the svelte language server. Check your editor&amp;rsquo;s extension sources to see if there&amp;rsquo;s a Svelte plugin for your IDE or build your own (see &lt;a href=&quot;https://github.com/coc-extensions/coc-svelte&quot;&gt;coc-svelte&lt;/a&gt; for example)!&lt;/p&gt;
&lt;h2 id=&quot;Big-improvements-across-the-Svelte-ecosystem&quot;&gt;&lt;span&gt;Big improvements across the Svelte ecosystem&lt;/span&gt;&lt;a href=&quot;#Big-improvements-across-the-Svelte-ecosystem&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/svelte-loader&quot;&gt;svelte-loader&lt;/a&gt; released a major version, 3.0.0 - featuring Webpack 5 and Node 14 support, better hot reloading, and new &lt;code&gt;compilerOptions&lt;/code&gt; to match &lt;code&gt;rollup-plugin-svelte&lt;/code&gt;. Breaking changes include dropping Svelte 2 and Node 8 support. &lt;a href=&quot;https://github.com/sveltejs/svelte-loader/blob/master/CHANGELOG.md&quot;&gt;More info in the changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/rollup-plugin-svelte&quot;&gt;rollup-plugin-svelte&lt;/a&gt; is now at version 7.x - with support for relative filenames, better handling of sourcemaps, and consistent &lt;code&gt;compilerOptions&lt;/code&gt;. Be sure to &lt;a href=&quot;https://github.com/sveltejs/rollup-plugin-svelte/blob/master/CHANGELOG.md&quot;&gt;checkout the changelog&lt;/a&gt; for breaking changes when upgrading&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/svelte-preprocess&quot;&gt;svelte-preprocess&lt;/a&gt; iterated through some 4.6.x releases this month to improve postcss and scss handling and fix sourcemap transformation for typescript users. &lt;a href=&quot;https://github.com/sveltejs/svelte-preprocess/blob/main/CHANGELOG.md&quot;&gt;More info in the changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/sapper&quot;&gt;Sapper&lt;/a&gt; got some improvements in scroll tracking and handling encoding query parameters. Dynamic imports also now work as expected in browsers that don&amp;rsquo;t support ES modules. These changes from 0.29.0 and a step-by-step migration guide can be found &lt;a href=&quot;https://github.com/sveltejs/sapper/blob/master/CHANGELOG.md&quot;&gt;in the changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sveltejs/prettier-plugin-svelte&quot;&gt;prettier-plugin-svelte&lt;/a&gt; version 2 was released. It received an overhaul and comes with a rewrite of the HTML formatting. The output is now much more in line with how standard Prettier formats HTML. Better defaults for &lt;code&gt;svelteBracketNewLine&lt;/code&gt; and &lt;code&gt;options-scripts-markup-styles&lt;/code&gt; should now match how the majority of users like to order the code blocks. Additionally, Prettier&amp;rsquo;s &lt;code&gt;htmlWhitespaceSensitivity&lt;/code&gt; setting is now supported. &lt;a href=&quot;https://github.com/sveltejs/prettier-plugin-svelte/blob/master/CHANGELOG.md&quot;&gt;More info in the changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;New changes to the Svelte Society website include &lt;a href=&quot;https://sveltesociety.dev/cheatsheet&quot;&gt;a new cheat sheet&lt;/a&gt; for easy access to useful code patterns and some smaller visual fixes across the site. &lt;strong&gt;Want to help make the Svelte Society website ready for prime time&lt;/strong&gt;? &lt;a href=&quot;https://github.com/svelte-society/sveltesociety.dev&quot;&gt;Checkout the GitHub repo&lt;/a&gt; to get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://impfdashboard.de/&quot;&gt;The official German vaccination dashboard&lt;/a&gt; tracks the current COVID vaccine rollout and features some well-done dataviz.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elfuturoesapasionante.vodafone.es/especiales/educacion-conectada/&quot;&gt;La neuva era de la educatión conectada&lt;/a&gt; is a Vodaphone site that highlights the ways that technology and COVID-19 has changed the education landscape&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Melonai/shorest&quot;&gt;sho.rest&lt;/a&gt; is a self-hostable url shortener&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://night.fm/&quot;&gt;night.fm&lt;/a&gt; is a cyberpunk-themed radio station&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Demos-Libraries-Components&quot;&gt;&lt;span&gt;Demos, Libraries &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Demos-Libraries-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/svelte-reactive-debugger/&quot;&gt;Svelte Reactive Debugger&lt;/a&gt; is a way to monitor Svelte reactive statements in Firefox devtools&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sw-yx/svelte-actions&quot;&gt;svelte-actions&lt;/a&gt; is a set of prototype Svelte actions for inclusion into official actions in future. &lt;a href=&quot;https://github.com/sveltejs/rfcs/pull/24&quot;&gt;See RFC&lt;/a&gt; and &lt;a href=&quot;https://github.com/sw-yx/svelte-actions/issues/7&quot;&gt;Discuss High Level Policy&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/3a1b7fae13b242fe9cd4a4f7aa092fa4?version=3.31.2&quot;&gt;This css grid gallery&lt;/a&gt; made by @joja (in the Svelte Discord) features grid transitions based on a user&amp;rsquo;s mouse position&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/spectrome/patchcab&quot;&gt;Patchcab&lt;/a&gt; is a modular Eurorack style synthesizer made with Web Audio.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MelihAltintas/svelte-knob&quot;&gt;svelte-knob&lt;/a&gt; is a knob control to help with speedometer-style visualization&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/micha-lmxt/descent-ripple&quot;&gt;descent-ripple&lt;/a&gt; is a highly customizable javascript ripple animation for buttons&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/florianlouvet/make-it-snow/blob/main/makeItSnowAction.js&quot;&gt;makeItSnow&lt;/a&gt; is a Svelte action made by @MrPoule (in the Svelte Discord) that can be used to add ❄️snow❄️ to any component (&lt;a href=&quot;/playground/de5223beb45540a5a11c9bd7b318304f?version=3.31.2&quot;&gt;Demo&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/meigo/svelte-video-player&quot;&gt;svelte-video-player&lt;/a&gt; is a customizable &lt;code&gt;VideoPlayer&lt;/code&gt; component&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Crisfole/svelte-readonly&quot;&gt;svelte-readonly&lt;/a&gt; is a very small store that exposes only a readable interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-New-Integrations-Starters&quot;&gt;&lt;span&gt;New Integrations &amp;amp; Starters&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-New-Integrations-Starters&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AlexxNB/svelte-derver-starter&quot;&gt;svelte-derver-starter&lt;/a&gt; is a starter for creating full-stack applications with the client based on Svelte and the server powered by Derver.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shalomscott/eleventy-plugin-embed-svelte&quot;&gt;eleventy-plugin-embed-svelte&lt;/a&gt; makes it easy to embed Svelte components into an 11ty site.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kyrelldixon/svelte-tailwind-extension-boilerplate&quot;&gt;svelte-tailwind-extension-boilerplate&lt;/a&gt; is a good foundation for a Chrome extension using either JavaScript or TypeScript, Svelte for the frontend, Tailwind CSS for styling, Jest for testing, and Rollup as the build system.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/rajasegar/snowpack-ui&quot;&gt;snowpack-ui&lt;/a&gt; lets you run &amp;amp; manage Snowpack projects from the browser instead of the terminal&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/torstendittmann/svelte-for-appwrite-4fkg&quot;&gt;Svelte for Appwrite&lt;/a&gt; explains how to integrate with Appwrite, a self-hosted Firebase alternative &lt;a href=&quot;https://github.com/appwrite/sdk-for-svelte&quot;&gt;GitHub Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/peopledrivemecrazy/here-maps-svelte&quot;&gt;here-maps-svelte&lt;/a&gt; makes it easy to include HERE maps in a Svelte app&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tonyketcham/p5-svelte&quot;&gt;p5-svelte&lt;/a&gt; is an absolutely dead simple way of tossing the creative coding/sketching tool, p5, into a project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/voorjaar/svelte-windicss-preprocess&quot;&gt;svelte-windicss-preprocess&lt;/a&gt; is a Svelte preprocessor to compile tailwindcss at build time based on windicss compiler&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MitzaCoder/svelte-boilerplate&quot;&gt;MitzaCoder/svelte-boilerplate&lt;/a&gt; features configurations for TypeScript, TailwindCSS, IE11 compatibility (with Babel) and lazy loaded modules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Want to share your Svelte Component with the world?&lt;/strong&gt; &lt;a href=&quot;https://sveltesociety.dev/help/submitting?type=package&quot;&gt;Submit your own component&lt;/a&gt; to the list of &lt;a href=&quot;https://sveltesociety.dev/packages&quot;&gt;packages&lt;/a&gt; on the Svelte Society site.&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ciaMT_MswzE&amp;list=PLoKaNN3BjQX3Gl14MBygFf8buPIw9pAeK&quot;&gt;lihautan&amp;rsquo;s Svelte Actions Playlist&lt;/a&gt; teaches how actions work and how they can help solve common problems when developing Svelte applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/shriji/one-click-portfolio-personal-blog-generator-from-dev-to-api-3apb&quot;&gt;One-click Portfolio/Personal blog generator from dev.to API &lt;/a&gt; walks through creating a Sapper site that also fetches your articles from DEV.to using the API&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=a5DX5pQ9p5M&quot;&gt;How to Code a VSCode Extension&lt;/a&gt; features Svelte as a way to render a custom UI within VSCode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=wyNC7R_VVyQ&amp;list=PLbWvcwWtuDm12y3Hye6oKDwI2gAS0ccHW&quot;&gt;This YouTube series on Plenti&lt;/a&gt; walks through the new static site generator in detail&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Want to add your work to the Showcase? Want to contribute to Svelte? Check out the &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; and &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; to get involved!&lt;/p&gt;</description><pubDate>Mon, 01 Feb 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: January 2021</title><link>https://svelte.dev/blog/whats-new-in-svelte-january-2021</link><author>Dani Sandoval</author><description>&lt;p&gt;Happy new year from Svelte! In the last month we made progress on Sapper&amp;rsquo;s upcoming release, fine-tuned our &lt;code&gt;SvelteComponent&lt;/code&gt; typings, and have seen some amazing apps, sites, and libraries coming out in the showcase.&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-changed-in-Svelte&quot;&gt;&lt;span&gt;What&amp;rsquo;s changed in Svelte?&lt;/span&gt;&lt;a href=&quot;#What&#39;s-changed-in-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A new minor release replaces the &lt;code&gt;SvelteComponent&lt;/code&gt; class with a &lt;code&gt;SvelteComponentTyped&lt;/code&gt; class. This renaming should help with backwards compatibility. We&amp;rsquo;ve updated &lt;a href=&quot;/blog/whats-new-in-svelte-december-2020&quot;&gt;last month&amp;rsquo;s blog post&lt;/a&gt; to avoid any confusion with the name change.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re using &lt;code&gt;SvelteComponent&lt;/code&gt; or the new &lt;code&gt;SvelteComponentTyped&lt;/code&gt; in your project or library, let us know what you&amp;rsquo;re using it for and we&amp;rsquo;ll add it to the showcase!&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-going-on-in-Sapper&quot;&gt;&lt;span&gt;What&amp;rsquo;s going on in Sapper?&lt;/span&gt;&lt;a href=&quot;#What&#39;s-going-on-in-Sapper&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;More quality of life features are landing in the upcoming release every day. &lt;code&gt;0.29.0&lt;/code&gt; will include new TypeScript definitions, fixes to scroll tracking and prefetching behavior, and improvements to the runtime router to support encoded query parameters.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re upgrading from 0.28.x, check out &lt;a href=&quot;https://sapper.svelte.dev/migrating/#0_28_to_0_29&quot;&gt;the migration guide&lt;/a&gt; for steps on updating to Sapper 0.29.&lt;/p&gt;
&lt;h2 id=&quot;Is-SvelteKit-ready-yet&quot;&gt;&lt;span&gt;Is SvelteKit ready yet?&lt;/span&gt;&lt;a href=&quot;#Is-SvelteKit-ready-yet&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To avoid too much churn during development, SvelteKit is still being worked on in a private repo. There will be an announcement on the Discord, blog and Twitter when it&amp;rsquo;s ready for a larger group of users and contributors.&lt;/p&gt;
&lt;p&gt;In the meantime, you can explore the current build by running &lt;code&gt;npm init svelte@next&lt;/code&gt; from your command line.&lt;/p&gt;
&lt;p&gt;As cautioned in &lt;em&gt;&lt;a href=&quot;/blog/whats-the-deal-with-sveltekit&quot;&gt;What&amp;rsquo;s the deal with SvelteKit?&lt;/a&gt;&lt;/em&gt;, there are no docs or support available yet... So use at your own risk / for your own enjoyment!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://manitu.me/&quot;&gt;manitu.me&lt;/a&gt; is a background sound / pomodoro timer for focus and relaxation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://answersocrates.com/&quot;&gt;Answer Socrates&lt;/a&gt; helps you find trending questions on the internet so that you can write the most relevant blog post, tweet, or billboard&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://multris.s1h.org/&quot;&gt;multris&lt;/a&gt; is a multiplayer Tetris game. You can read about its development &lt;a href=&quot;https://blog.s1h.org/svelte-multiplayer-game/&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ganochenkodg/weather-ab&quot;&gt;weather-ab&lt;/a&gt; compares the archive of weather in different cities of the world. Indispensable for people thinking about migration&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gamenibs.com/&quot;&gt;Game Nibs&lt;/a&gt; is a platform for gamers to find and share concise bite-sized bits of gaming advice, tips, tricks, screenshots, builds, and much more&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cupcakearmy/ora&quot;&gt;Ora&lt;/a&gt; is an open source website tracking and limiting tool for Chrome and Firefox&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/techsyndicate/vscode-dms&quot;&gt;vscode-dms&lt;/a&gt; is a group direct messaging chat app for VSCode&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zero.oleksandrdemian.tech/&quot;&gt;Zero.2&lt;/a&gt; is a math-based challenge game where you try to get to zero as quickly as possible&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://octavecompass.com/2741&quot;&gt;Octave Compass&lt;/a&gt; is a chord table and scale explorer for many popular musical scales&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/elialbert/infinitewalkingbass2&quot;&gt;Infinite Walking Bass Generator 2&lt;/a&gt; is an online music player that generates a unique walking bass line&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.listenaddict.com/&quot;&gt;ListenAddict&lt;/a&gt; is a site that notifies you whenever a person has a new talk/interview on podcast&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Demos-Libraries-Components&quot;&gt;&lt;span&gt;Demos, Libraries &amp;amp; Components&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Demos-Libraries-Components&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Skayo/svelte-tiny-virtual-list&quot;&gt;svelte-tiny-virtual-list&lt;/a&gt; speeds up long lists by only rendering visible items&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TanStack/svelte-query&quot;&gt;svelte-query&lt;/a&gt; is a collection of helpful hooks for managing, caching and syncing asynchronous and remote data&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bryanmylee/svelte-previous&quot;&gt;svelte-previous&lt;/a&gt; is a svelte store to remember previous values - helpful for transitions or a quick undo stack&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://varun.ca/confetti/&quot;&gt;Let&amp;rsquo;s Build a Confetti Cannon&lt;/a&gt; explains how to build a particle system and integrate a Canvas based animation into a larger application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ayndqy/svelte-micro&quot;&gt;svelte-micro&lt;/a&gt; is a one-component router&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hjalmar/svelte-standalone-router&quot;&gt;svelte-standalone-router&lt;/a&gt; is a standalone router with an API based on &lt;a href=&quot;https://github.com/hjalmar/standalone-router&quot;&gt;standalone-router&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/beyonk-adventures/svelte-datepicker&quot;&gt;svelte-datepicker&lt;/a&gt; is a datepicker component with variations for time selection, date ranges and responsive themes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MelihAltintas/svelte-slimscroll&quot;&gt;svelte-slimscroll&lt;/a&gt; is a action for Svelte.js, which can transforms any div into a scrollable area with a nice scrollbar.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/58dfe87756ee4db897c281b52fdef7b7?version=3.31.0&quot;&gt;Svelte Zoomable&lt;/a&gt; is a custom transition with a nice zoom effect&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Have a component you&amp;rsquo;d like to share?&lt;/strong&gt; &lt;a href=&quot;https://sveltesociety.dev/help/submitting?type=package&quot;&gt;Submit your own component&lt;/a&gt; to the list of &lt;a href=&quot;https://sveltesociety.dev/packages&quot;&gt;packages&lt;/a&gt; on the Svelte Society site.&lt;/p&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.koenvangilst.nl/tutorial-svelte-scroll-video/&quot;&gt;Using Svelte to create a scroll video effect&lt;/a&gt; showcases how the &lt;code&gt;bind&lt;/code&gt; command can be used to create a cool scroll video effect with very little code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nhrYBoVI8pQ&quot;&gt;How to make a flappybird game in svelte and typescript&lt;/a&gt; is a video tutorial including docs and code for reference&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QK_QuRL7nSo&amp;feature=youtu.be&quot;&gt;Accessible Svelte Transition&lt;/a&gt; walks through &lt;code&gt;prefers-reduced-motion&lt;/code&gt; to make svelte transitions more accessible&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codechips.me/svelte-module-scripts-explained/&quot;&gt;Svelte&amp;rsquo;s module scripts explained&lt;/a&gt; is a great introduction to the module context, a common Sapper pattern&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TheComputerM/awesome-svelte#readme&quot;&gt;Awesome Svelte&lt;/a&gt; is a curated list of Svelte resources&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/cainux/net-core-and-svelte-f8o&quot;&gt;.NET Core and Svelte&lt;/a&gt; explains how to get Svelte up and running with .NET Core&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SLpx1Y8e1ek&amp;list=PLff5I1miao9ZEUhpqkrOx7k8RGAZt-nm9&quot;&gt;A la découverte de Svelte JS&lt;/a&gt; is a svelte tutorial series in French!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://soshace.com/svelte-for-react-developers/&quot;&gt;Svelte for React Developers&lt;/a&gt; explains Svelte&amp;rsquo;s core concepts to folks who are used to React&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=dvPfmcGtmrI&amp;feature=emb_title&quot;&gt;Building a Svelte Static Website with Smooth Page Transitions&lt;/a&gt; shows how to build a static website with Svelte and add smooth page transitions using Three.js and GSAP.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bjornlu.com/blog/using-apollo-client-in-sapper/&quot;&gt;Using Apollo Client in Sapper&lt;/a&gt; explains the &amp;ldquo;simplest&amp;rdquo; solutions to integrate the Apollo query client into Sapper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=i1xjLd6z7BU&quot;&gt;Reactive web apps with Crystal + Svelte&lt;/a&gt; explores how to build full-stack, server-rendered Svelte apps with a &lt;a href=&quot;https://crystal-lang.org&quot;&gt;Crystal&lt;/a&gt; backend&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Related-Projects&quot;&gt;&lt;span&gt;Related Projects&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Related-Projects&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.snowpack.dev/posts/2020-12-03-snowpack-3-release-candidate&quot;&gt;Snowpack&amp;rsquo;s v3 release candidate&lt;/a&gt; is out now in preparation for a January 6 release date. Check out the &lt;a href=&quot;https://www.snowpack.dev/tutorials/svelte&quot;&gt;Getting Started with Svelte&lt;/a&gt; for more info on how to use Snowpack.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://uppy.io/blog/2020/12/1.24/&quot;&gt;Uppy&lt;/a&gt;, the open source file uploader, announced Svelte support in its new version 1.24&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Want to add your work to the Showcase? Want to contribute to Svelte? Check out the &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; and &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; to get involved!&lt;/p&gt;</description><pubDate>Fri, 01 Jan 2021 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: December 2020</title><link>https://svelte.dev/blog/whats-new-in-svelte-december-2020</link><author>Dani Sandoval</author><description>&lt;p&gt;It&amp;rsquo;s the last &amp;ldquo;What&amp;rsquo;s new in Svelte&amp;rdquo; of the year and there&amp;rsquo;s lots to celebrate! This month&amp;rsquo;s coverage includes updates from &lt;code&gt;rollup-plugin-svelte&lt;/code&gt;, &lt;code&gt;Sapper&lt;/code&gt; and &lt;code&gt;SvelteKit&lt;/code&gt; and a bunch of showcases from the Svelte community!&lt;/p&gt;
&lt;h2 id=&quot;New-features-impactful-bug-fixes&quot;&gt;&lt;span&gt;New features &amp;amp; impactful bug fixes&lt;/span&gt;&lt;a href=&quot;#New-features-impactful-bug-fixes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;$$props&lt;/code&gt;, &lt;code&gt;$$restProps&lt;/code&gt;, and &lt;code&gt;$$slots&lt;/code&gt; are all now supported in custom web components (&lt;strong&gt;3.29.5&lt;/strong&gt;, &lt;a href=&quot;/playground/ad8e6f39cd20403dacd1be84d71e498d?version=3.29.5&quot;&gt;Example&lt;/a&gt;) and &lt;code&gt;slot&lt;/code&gt; components now support spread props: &lt;code&gt;&amp;lt;slot {...foo} /&amp;gt;&lt;/code&gt; (&lt;strong&gt;3.30.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;A new &lt;code&gt;hasContext&lt;/code&gt; lifecycle function makes it easy to check whether a &lt;code&gt;key&lt;/code&gt; has been set in the context of a parent component (&lt;strong&gt;3.30.0&lt;/strong&gt; &amp;amp; &lt;strong&gt;3.30.1&lt;/strong&gt;, &lt;a href=&quot;https://v4.svelte.dev/docs#run-time-svelte-hascontext&quot;&gt;Docs&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;There is now a new &lt;code&gt;SvelteComponentTyped&lt;/code&gt; class which makes it easier to add strongly typed components that extend base Svelte components. Component library and framework authors rejoice! An example: &lt;code&gt;export class YourComponent extends SvelteComponentTyped&amp;lt;{aProp: boolean}, {click: MouseEvent}, {default: {aSlot: string}}&amp;gt; {}&lt;/code&gt; (&lt;strong&gt;3.31.0&lt;/strong&gt;, &lt;a href=&quot;https://github.com/sveltejs/rfcs/pull/37&quot;&gt;RFC&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Transitions within &lt;code&gt;{:else}&lt;/code&gt; blocks should now complete successfully (&lt;strong&gt;3.29.5&lt;/strong&gt;, &lt;a href=&quot;/playground/49cef205e5da459594ef2eafcbd41593?version=3.29.5&quot;&gt;Example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Svelte now includes an export map, which explicitly states which files can be imported from its npm package (&lt;strong&gt;3.29.5&lt;/strong&gt; with some fixes in &lt;strong&gt;3.29.6&lt;/strong&gt;, &lt;strong&gt;3.29.7&lt;/strong&gt; and &lt;strong&gt;3.30.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rollup-plugin-svelte&lt;/code&gt; had a new &lt;a href=&quot;https://github.com/sveltejs/rollup-plugin-svelte/blob/master/CHANGELOG.md&quot;&gt;7.0.0 release&lt;/a&gt;. The biggest change is that the &lt;code&gt;css&lt;/code&gt; option was removed. Users who were using that option should add another plugin like &lt;code&gt;rollup-plugin-css-only&lt;/code&gt; as demonstrated &lt;a href=&quot;https://github.com/sveltejs/template/blob/5b1135c286f7a649daa99825a077586655051649/rollup.config.js#L48&quot;&gt;in the template&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;What&#39;s-going-on-in-Sapper&quot;&gt;&lt;span&gt;What&amp;rsquo;s going on in Sapper?&lt;/span&gt;&lt;a href=&quot;#What&#39;s-going-on-in-Sapper&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Lots of new TypeScript definition improvements to make editing Sapper apps even easier! CSS for dynamic imports also should now work in &lt;code&gt;client.js&lt;/code&gt; files. (Unreleased)&lt;/p&gt;
&lt;h2 id=&quot;What&#39;s-the-deal-with-SvelteKit&quot;&gt;&lt;span&gt;What&amp;rsquo;s the deal with SvelteKit?&lt;/span&gt;&lt;a href=&quot;#What&#39;s-the-deal-with-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We&amp;rsquo;re glad you asked! If you didn&amp;rsquo;t catch Rich&amp;rsquo;s blog post from early last month, &lt;a href=&quot;/blog/whats-the-deal-with-sveltekit&quot;&gt;you can find it here&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;For all the features and bugfixes see the CHANGELOGs for &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;Svelte&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/sapper/blob/master/CHANGELOG.md&quot;&gt;Sapper&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&quot;Community-Showcase-Apps-Sites&quot;&gt;&lt;span&gt;Apps &amp;amp; Sites&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Apps-Sites&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://narration.studio/&quot;&gt;narration.studio&lt;/a&gt; (Chrome Only) is an automatic in-browser audio recording &amp;amp; editing platform for voice over narration.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vippet.netlify.app/&quot;&gt;Vippet&lt;/a&gt; is a video recording and editing tool for the browser.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pattern.monster/&quot;&gt;Pattern Monster&lt;/a&gt; is a simple online pattern generator to create repeatable SVG patterns.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://planetbaseddiets.panda.org/&quot;&gt;Plant-based diets&lt;/a&gt; is a website from the World Wildlife Foundation (WWF) built with Svelte.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.johnells.se/&quot;&gt;johnells.se&lt;/a&gt; is a Swedish fashion e-commerce site, built with &lt;a href=&quot;https://crownframework.com/&quot;&gt;Crown&lt;/a&gt; - a Svelte-powered framework.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sentence-length.netlify.app/&quot;&gt;sentence-length&lt;/a&gt; is a learning and analysis tool to show how some authors play with different lengths, while others stick with one.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stephane-vanraes/svelte-presenter&quot;&gt;svelte-presenter&lt;/a&gt; lets you quickly make good looking presentations using Svelte and mdsvex.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Demos&quot;&gt;&lt;span&gt;Demos&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Demos&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/sveltejs/comments/jkh5up/svelte_ssr_but_its_java_spring_boot_and_its_native/&quot;&gt;u/loopcake got SSR working in Java Spring Boot&lt;/a&gt; for all the Java shops out there looking to render Svelte server-side.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tncrazvan/svelte-liquid-swipe&quot;&gt;svelte-liquid-swipe&lt;/a&gt; shows off a fancy interaction pattern using svg paths.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/7f68e148caf04b2787bb6f296208f870?version=3.29.7&quot;&gt;Crossfade Link Animation&lt;/a&gt; demonstrates how to animate between navigation links using a crossfade (made by Blu, from the Discord community)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/b5ad281ae8024b629b545c70c9e8764d?version=3.29.7&quot;&gt;Clip-Path Transitions&lt;/a&gt; showcases how to use clip paths and custom transitions to create magical in-and-out transitions (made by Faber, from the Discord community)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Learning-Resources&quot;&gt;&lt;span&gt;Learning Resources&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Learning-Resources&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/channel/UCbmC3HP3FaAFdcZkui8YoMQ/featured&quot;&gt;lihautan&lt;/a&gt; has been making easy-to-follow videos to share his in-depth knowledge of Svelte.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nicholasreese.com/lessons-from-building-a-static-site-generator/&quot;&gt;Lessons From Building a Static Site Generator&lt;/a&gt; shares the backstory and thinking behind Elder.js - and the design decision made along the way.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.udemy.com/course/svelte-tutorial-and-projects-course/&quot;&gt;Svelte Tutorial and Projects Course &lt;/a&gt; is a udemy course by John Smilga where students learn Svelte.js by building interesting projects.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://amalshaji.wtf/building-pastebin-on-ipfs-with-fastapi-svelte-and-ipfs&quot;&gt;Building Pastebin on IPFS - with FastAPI, Svelte, and IPFS&lt;/a&gt; explains how to make a distributed pastebin-like application.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Community-Showcase-Components-Libraries-Tools&quot;&gt;&lt;span&gt;Components, Libraries &amp;amp; Tools&lt;/span&gt;&lt;a href=&quot;#Community-Showcase-Components-Libraries-Tools&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://russellgoldenberg.github.io/svelte-crossword/&quot;&gt;svelte-crossword&lt;/a&gt; is a customizable crossword puzzle component for Svelte.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cupcakearmy/svelte-cloudinary&quot;&gt;svelte-cloudinary&lt;/a&gt; makes it easy to integrate Cloudinary with Svelte (including TypeScript and SSR support)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://extensions.panic.com/extensions/sb.lao/sb.lao.svelte-nova/&quot;&gt;Svelte Nova&lt;/a&gt; extends the new Nova editor to support Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/shiryel/saos&quot;&gt;saos&lt;/a&gt; is a small svelte component to animate your elements on scroll.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/lacikawiz/svelte-nStore&quot;&gt;Svelte-nStore&lt;/a&gt; is a general purpose store replacement that fulfills the Svelte store contract and adds getter and calculation features.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MelihAltintas/svelte-slimscroll&quot;&gt;svelte-slimscroll&lt;/a&gt; is a Svelte Action that transforms any div into a scrollable area with a nice scrollbar.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/henriquehbr/svelte-typewriter&quot;&gt;svelte-typewriter&lt;/a&gt; is a simple and reusable typewriter effect for your Svelte applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/zyxd/svelte-store-router&quot;&gt;svelte-store-router&lt;/a&gt; is a store-based router for Svelte that suggests that routing is just another global state and History API changes are just an optional side-effects of this state.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://routify.dev/blog/routify-2-released&quot;&gt;Routify&lt;/a&gt; just released version 2 of its Svelte router.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@crownframework/svelte-error-boundary&quot;&gt;svelte-error-boundary&lt;/a&gt; provides a simple error boundary component for Svelte that can be can be used with both DOM and SSR targets.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/svelte2dts&quot;&gt;svelte2dts&lt;/a&gt; generates d.ts files from svelte files, creating truly shareable and well typed components.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Got an idea for something to add to the Showcase? Want to get involved more with Svelte? We&amp;rsquo;re always looking for maintainers, contributors and fanatics... Check out the &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; and &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; to get involved!&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all for the year, folks! See you in January 😎&lt;/p&gt;</description><pubDate>Tue, 01 Dec 2020 00:00:00 GMT</pubDate></item><item><title>SvelteKitとは (What’s the deal with SvelteKit?)</title><link>https://svelte.dev/blog/whats-the-deal-with-sveltekit</link><author>Rich Harris</author><description>&lt;aside&gt;&lt;p&gt;もし Svelte Summit に参加&lt;em&gt;していない&lt;/em&gt;場合は、こちらの &lt;a href=&quot;https://www.youtube.com/c/SvelteSociety/videos&quot;&gt;Svelte Society YouTube page&lt;/a&gt; からご覧いただけます。&lt;/p&gt;&lt;/aside&gt;

&lt;p&gt;先月の &lt;a href=&quot;https://sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt; に参加していたなら、私の講演「Futuristic Web Development」をご覧になったかもしれません。この講演で、Svelte に関する FAQ の中で最も頻繁に寄せられる「Sapper がバージョン1.0に到達するのはいつですか？」という質問にようやく答えました。&lt;/p&gt;
&lt;p&gt;答え: 到達しません。&lt;/p&gt;
&lt;p&gt;これはちょっとした皮肉で、この講演で説明したように、実際には Sapper の書き換えとリブランドが行われています。しかし、コミュニティからは新しい質問が多く寄せられるようになり、Sapper の後継である SvelteKit にはどんなことが期待できるのかもう少し明確にする時が来ました。&lt;/p&gt;
&lt;div class=&quot;max&quot;&gt;
&lt;figure style=&quot;max-width: 960px; margin: 0 auto&quot;&gt;
&lt;div style=&quot;height: 0; padding: 0 0 57.1% 0; position: relative; margin: 0 auto;&quot;&gt;
	&lt;iframe style=&quot;position: absolute; width: 100%; height: 100%; left: 0; top: 0; margin: 0;&quot; src=&quot;https://www.youtube-nocookie.com/embed/qSfdtmcZ4d0&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;figcaption&gt;&#39;Futuristic Web Development&#39; from &lt;a href=&quot;https://sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;h2 id=&quot;What&#39;s-Sapper&quot;&gt;&lt;span&gt;What&amp;rsquo;s Sapper?&lt;/span&gt;&lt;a href=&quot;#What&#39;s-Sapper&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://sapper.svelte.dev&quot;&gt;Sapper&lt;/a&gt; は &lt;em&gt;アプリケーションフレームワーク&lt;/em&gt; (または &amp;lsquo;メタフレームワーク&amp;rsquo;) で、Svelte (&lt;em&gt;コンポーネント&lt;/em&gt; フレームワーク) の上に構築されています。その目的は、サーバーサイドレンダリング (SSR) やコード分割など、最新のベストプラクティスをすべて備えた Svelte アプリの構築を簡単にすること、そして開発が生産的かつ楽しくなるようなプロジェクト構造を提供することです。&lt;em&gt;ファイルシステムベースのルーティング&lt;/em&gt; (&lt;a href=&quot;https://nextjs.org/&quot;&gt;Next&lt;/a&gt; によって普及し、他の多くのフレームワークでも採用されていますが、いくつか機能を強化しています) を使用しており、プロジェクトのファイル構造がアプリ自体の構造を反映しています。&lt;/p&gt;
&lt;p&gt;Svelte のホームページやドキュメントでは &lt;a href=&quot;https://github.com/Rich-Harris/degit&quot;&gt;degit&lt;/a&gt; と &lt;a href=&quot;https://github.com/sveltejs/template&quot;&gt;sveltejs/template&lt;/a&gt; リポジトリを使ってアプリの構築を始めることが推奨されていますが、Sapper は長い間、アプリ構築をするための私達のお勧めの方法でした。このブログ記事も(執筆時点では) Sapper によってレンダリングされています。&lt;/p&gt;
&lt;h2 id=&quot;Why-are-we-migrating-to-something-new&quot;&gt;&lt;span&gt;Why are we migrating to something new?&lt;/span&gt;&lt;a href=&quot;#Why-are-we-migrating-to-something-new&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まず最初に、&lt;a href=&quot;https://github.com/sveltejs/template&quot;&gt;sveltejs/template&lt;/a&gt; と &lt;a href=&quot;https://github.com/sveltejs/sapper-template&quot;&gt;sveltejs/sapper-template&lt;/a&gt; の区別は混乱を招きます、特に Svelte を初めて利用する人には。Svelte でアプリを構築し始めるのに、推奨する方法が1つであれば、大きなメリットがもたらされるでしょう。オンボーディングをシンプルにし、メンテナンスとサポートの負担を減らし、潜在的には予測しやすいプロジェクト構造によって解き放たれる新しい可能性を探り始めることができます。(最後の部分は、その可能性を完全に理解するには時間がかかるため、意図的に曖昧にしています)&lt;/p&gt;
&lt;p&gt;それはさておき、私たちはしばらくの間 Sapper を書き直すという考えに惹かれていました。長年に渡りコードベースが少し荒れてきたというのもありますが (&lt;a href=&quot;/blog/sapper-towards-the-ideal-web-app-framework&quot;&gt;Sapper は2017年にスタート&lt;/a&gt;)、大きな理由は、ここ最近 Web に多くの変化があったからで、基本的な前提をいくつか再考する時期が来ています。&lt;/p&gt;
&lt;h2 id=&quot;How-is-this-new-thing-different&quot;&gt;&lt;span&gt;How is this new thing different?&lt;/span&gt;&lt;a href=&quot;#How-is-this-new-thing-different&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;基本的な前提の1つは、アプリをビルドするのに &lt;a href=&quot;https://webpack.js.org/&quot;&gt;webpack&lt;/a&gt; や &lt;a href=&quot;http://rollupjs.org/&quot;&gt;Rollup&lt;/a&gt; のようなモジュールバンドラーを使う必要があるということです。これらのツールはアプリケーションの依存関係グラフをトレースし、解析し、コードを変換 (例えば、Svelte コンポーネントを JS モジュールに変換するなど) して、どこでも実行できるコードのバンドルを作成します。私は Rollup の最初の作者として、これが驚くほど複雑な問題で厄介なエッジケースがあると証言できます。&lt;/p&gt;
&lt;p&gt;確かにここ数年はバンドラーが必要でした。ブラウザーが &lt;code&gt;import&lt;/code&gt; キーワードをネイティブにサポートしていなかったからです。しかし今日ではそれほど当てはまりません。現在では、 &lt;em&gt;バンドルしない&lt;/em&gt; 開発ワークフローが台頭しており、これは根本的にシンプルです。アプリをバンドルする代わりに、開発サーバーが (必要に応じて JavaScript に変換された) モジュールを &lt;em&gt;オンデマンド&lt;/em&gt; でサーブします。つまり、アプリが大きくなったとしても基本的にはすぐに起動できることを意味します。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.snowpack.dev/&quot;&gt;Snowpack&lt;/a&gt; はこのムーブメントの先駆者であり、SvelteKit の原動力です。驚くほど高速で、素晴らしい開発体験(ホットモジュールリロード、エラーオーバーレイなど)を備えており、私達は SSR などの機能で Snowpack チームと緊密に連携しています。ホットモジュールリロードは特に、Sapper と Rollup (最も効率的なアウトプットを優先し、ファーストクラスのHMRサポートを持たないアーキテクチャ) を使用することに慣れている方にとっては新たな発見があります。&lt;/p&gt;
&lt;p&gt;バンドラーを完全に捨てるわけではありません。アプリをプロダクション向けに最適化することは依然として不可欠で、SvelteKit は Rollup を使用してアプリを可能な限り速く小さいものにします (これには、静的な &lt;code&gt;.css&lt;/code&gt; ファイルへの style の抽出なども含まれます) 。&lt;/p&gt;
&lt;p&gt;他の基本的な前提としては、サーバーレンダリングされたアプリには、サーバーが必要である、というものがあります。Sapper には事実上2つのモードがあります。Nodeサーバー上で実行されるスタンドアローンアプリを作る &lt;code&gt;sapper build&lt;/code&gt; と、アプリを GitHub Pages のようなサービスでのホスティングに適した静的ファイルのコレクションに仕上げる &lt;code&gt;sapper export&lt;/code&gt; です。&lt;/p&gt;
&lt;p&gt;静的ファイルはどこにでも置くことができますが、Node サーバーの実行 (とモニタリング/スケーリングなど) はそれほど簡単ではありません。今日では、サーバーレスプラットフォームへの移行を目にします。サーバーレスプラットフォームでは、アプリの作者はコードが実行されているサーバーやそれに伴う複雑さについて考える必要がありません。&lt;a href=&quot;https://github.com/thgh/vercel-sapper&quot;&gt;vercel-sapper&lt;/a&gt; などのおかげで Sapper アプリをサーバーレスプラットフォームで実行することができますが、確かに慣用的であるとは言えません。&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Node アプリと完全にプリレンダリングされた (つまりエクスポートされた) サイトの両方を作ることは可能です&lt;/a&gt;&lt;/p&gt;&lt;/aside&gt;

&lt;p&gt;SvelteKit はサーバーレスパラダイムを完全に取り入れており、メジャーなサーバーレスプロバイダを全てサポートする予定です。公式には対応していないプラットフォームをターゲットにするための &amp;lsquo;adapter&amp;rsquo; API も用意されます。さらに、部分的なプリレンダリングも可能になるでしょう。つまり、静的なページはビルド時に生成することができ、動的なページはオンデマンドでレンダリングするということです。 &lt;/p&gt;
&lt;h2 id=&quot;When-can-I-start-using-it&quot;&gt;&lt;span&gt;When can I start using it?&lt;/span&gt;&lt;a href=&quot;#When-can-I-start-using-it&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;勇気がある方は、今すぐ始められます。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;init&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte@next&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これによって新しいプロジェクトが作成され、&lt;code&gt;@sveltejs/kit&lt;/code&gt; CLI がインストールされてアプリの開発とビルドのためのツールが提供されます。&lt;/p&gt;
&lt;p&gt;ですが推奨はしません！ドキュメントはありませんし、どんな形式のサポートも提供できないでしょう。また、頻繁に壊れる可能性もあります。&lt;/p&gt;
&lt;p&gt;私達はまだ探索モードなので、プライベートなモノレポで作業を進めています。私たちの計画では、いくつかの Issue を解決したら、パブリックベータを準備し、ここで発表します。その時点ではリポジトリをプライベートなままにしておく予定ですが、皆様からのフィードバックを集める場を設ける予定です。その後で、1.0 リリースに向けて作業を進め、リポジトリを公開する予定です。&lt;/p&gt;
&lt;p&gt;私は約束を破るのが好きではないので、時期について確固たる約束はできません。しかし、数ヶ月ではなく数週間の話だと&lt;em&gt;考えて&lt;/em&gt;います。&lt;/p&gt;
&lt;h2 id=&quot;What-if-I-don&#39;t-want-to-use-SvelteKit&quot;&gt;&lt;span&gt;What if I don&amp;rsquo;t want to use SvelteKit?&lt;/span&gt;&lt;a href=&quot;#What-if-I-don&#39;t-want-to-use-SvelteKit&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用する必要はありません。Svelte をスタンドアローンパッケージとして、または &lt;a href=&quot;https://github.com/sveltejs/rollup-plugin-svelte&quot;&gt;rollup-plugin-svelte&lt;/a&gt; のようなバンドラーインテグレーションを介して使用することは常に可能です。どんなに難解なワークフローであってもそれにフィットするよう柔軟に対応できることや、&lt;a href=&quot;https://github.com/Elderjs/elderjs&quot;&gt;Elder.js&lt;/a&gt;、&lt;a href=&quot;https://routify.dev/&quot;&gt;Routify&lt;/a&gt;、&lt;a href=&quot;https://plenti.co/&quot;&gt;Plenti&lt;/a&gt;、&lt;a href=&quot;https://crownframework.com/&quot;&gt;Crown&lt;/a&gt;、&lt;a href=&quot;https://www.junglejs.org/&quot;&gt;JungleJS&lt;/a&gt; などのサードパーティのアプリケーションフレームワークを使えることが重要だと考えています。&lt;/p&gt;
&lt;h2 id=&quot;TypeScript&quot;&gt;&lt;span&gt;TypeScript?&lt;/span&gt;&lt;a href=&quot;#TypeScript&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;心配しないで、TypeScript をフルにサポートせずにローンチするつもりはありません。&lt;/p&gt;
&lt;h2 id=&quot;How-can-I-migrate-my-existing-Sapper-apps&quot;&gt;&lt;span&gt;How can I migrate my existing Sapper apps?&lt;/span&gt;&lt;a href=&quot;#How-can-I-migrate-my-existing-Sapper-apps&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ほとんどの場合、Sapper のコードベースを移行するのは比較的簡単なはずです。&lt;/p&gt;
&lt;p&gt;いくつかの避けられない変更があり (サーバーレスプラットフォームで実行できるようにするということは、カスタムの &lt;code&gt;server.js&lt;/code&gt; ファイルと &lt;code&gt;(req, res) =&amp;gt; {...}&lt;/code&gt; 関数をよりポータブルなもので置き換える必要があるということを意味します) 、この機会にいくつかの設計上の欠点を修正していますが、全体的には SvelteKit アプリは Sapper ユーザーにとって非常に馴染みのあるものになっています。&lt;/p&gt;
&lt;p&gt;詳細な移行ガイドは 1.0 と一緒に提供されるでしょう。&lt;/p&gt;
&lt;h2 id=&quot;How-can-I-contribute&quot;&gt;&lt;span&gt;How can I contribute?&lt;/span&gt;&lt;a href=&quot;#How-can-I-contribute&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;パブリックベータのローンチやリポジトリの公開の時期に関する発表をお見逃しなく。(また、ブログ記事に書く予定ですが、私たちは &lt;a href=&quot;https://opencollective.com/svelte&quot;&gt;OpenCollective&lt;/a&gt; を開始しており、もしこのプロジェクトがあなたにとって価値がある場合に財政的な貢献ができることをお伝えしておかなければなりません。すでに寄付してくださった方々にはとても、とても感謝しています)&lt;/p&gt;
&lt;h2 id=&quot;Where-can-I-learn-more&quot;&gt;&lt;span&gt;Where can I learn more?&lt;/span&gt;&lt;a href=&quot;#Where-can-I-learn-more&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;BlueSky で &lt;a href=&quot;https://bsky.app/profile/svelte.dev&quot;&gt;svelte.dev&lt;/a&gt; と &lt;a href=&quot;https://bsky.app/profile/sveltesociety.dev&quot;&gt;sveltesociety.dev&lt;/a&gt; をフォローしてください。また、&lt;a href=&quot;/chat&quot;&gt;svelte.dev/chat&lt;/a&gt; にお越しください。また、&lt;a href=&quot;https://www.svelteradio.com/&quot;&gt;Svelte Radio&lt;/a&gt; を購読してください。次回のエピソードでKevinと共同ホストがこのプロジェクトについて私に質問する予定です (今から来週の収録までの間に、質問があれば&lt;a href=&quot;https://twitter.com/Rich_Harris/status/1323376048571121665&quot;&gt;このTwitterのスレッドに返信してください&lt;/a&gt;)。&lt;/p&gt;</description><pubDate>Thu, 05 Nov 2020 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: November 2020</title><link>https://svelte.dev/blog/whats-new-in-svelte-november-2020</link><author>Dani Sandoval</author><description>&lt;p&gt;Welcome back to the &amp;ldquo;What&amp;rsquo;s new in Svelte&amp;rdquo; series! This month, we&amp;rsquo;re covering new features &amp;amp; bug fixes, last month&amp;rsquo;s Svelte Summit and some stand-out sites and libraries...&lt;/p&gt;
&lt;h2 id=&quot;New-features-impactful-bug-fixes&quot;&gt;&lt;span&gt;New features &amp;amp; impactful bug fixes&lt;/span&gt;&lt;a href=&quot;#New-features-impactful-bug-fixes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Destructuring Promises now works as expected by using the &lt;code&gt;{#await}&lt;/code&gt; syntax
(&lt;strong&gt;3.29.3&lt;/strong&gt;, &lt;a href=&quot;/playground/3fd4e2cecfa14d629961478f1dac2445?version=3.29.3&quot;&gt;Example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Slot forwarding (released in 3.29.0) should no longer hang during compilation (&lt;strong&gt;3.29.3&lt;/strong&gt;, &lt;a href=&quot;/playground/29959e70103f4868a6525c0734934936?version=3.29.3&quot;&gt;Example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Better typings for the &lt;code&gt;get&lt;/code&gt; function in &lt;code&gt;svelte/store&lt;/code&gt; and on lifecycle hooks (&lt;strong&gt;3.29.1&lt;/strong&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;New-features-impactful-bug-fixes-What&#39;s-going-on-in-Sapper&quot;&gt;&lt;span&gt;What&amp;rsquo;s going on in Sapper?&lt;/span&gt;&lt;a href=&quot;#New-features-impactful-bug-fixes-What&#39;s-going-on-in-Sapper&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Sapper got some new types in its &lt;code&gt;preload&lt;/code&gt; function, which will make typing easier if you are using TypeScript. See the &lt;a href=&quot;https://sapper.svelte.dev/docs#Typing_the_function&quot;&gt;Sapper docs&lt;/a&gt; on how to use them. There also were fixes to &lt;code&gt;preload&lt;/code&gt; links in exported sites. Route layouts got a few fixes too - including ensuring CSS is applied to nested route layouts. You can also better organize your files now that extensions with multiple dots are supported. (&lt;strong&gt;0.28.10&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;For all the features and bugfixes see the CHANGELOGs for &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;Svelte&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/sapper/blob/master/CHANGELOG.md&quot;&gt;Sapper&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;Svelte-Summit-was-Svelte-tacular&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt; was Svelte-tacular!&lt;/span&gt;&lt;a href=&quot;#Svelte-Summit-was-Svelte-tacular&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Rich Harris demoed the possible future of Svelte development in a talk titled &amp;ldquo;Futuristic Web Development&amp;rdquo;. The not-yet-public project is called SvelteKit (name may change) and will bring a first-class developer experience and more flexibility for build outputs. If you want to get the full sneak-peek, &lt;a href=&quot;https://www.youtube.com/watch?v=qSfdtmcZ4d0&quot;&gt;check out the video&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;17 speakers made the best of the conference&amp;rsquo;s virtual format... From floating heads to seamless demos, Svelte developers from every skill level will find something of interest in this year&amp;rsquo;s &lt;a href=&quot;https://www.youtube.com/playlist?list=PL8bMgX1kyZThM1sbYCoWdTcpiYysJsSeu&quot;&gt;YouTube playlist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Community-Showcase&quot;&gt;&lt;span&gt;Community Showcase&lt;/span&gt;&lt;a href=&quot;#Community-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltelab.app/&quot;&gt;Svelte Lab&lt;/a&gt; showcases a variety of components, visualizations and interactions that can be achieved in Svelte. You can click into any component to see its source or edit it, using the site&amp;rsquo;s built-in REPL&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hjalmar/svelte-electron-boilerplate&quot;&gt;svelte-electron-boilerplate&lt;/a&gt; is a fast way to get up and running with a Svelte app built in the desktop javascript framework, Electron&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshnuss/react-hooks-in-svelte&quot;&gt;React Hooks in Svelte&lt;/a&gt; showcases examples of common React Hooks ported to Svelte.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gurlic.com/&quot;&gt;gurlic&lt;/a&gt; is a social network and internet experiment that is super snappy thanks to Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://interference2020.org/&quot;&gt;Interference 2020&lt;/a&gt; visualizes reported foreign interference in the 2020 U.S. elections. You can learn more about how it was built in &lt;a href=&quot;&quot;&gt;YYY&amp;rsquo;s talk at Svelte Summit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/relm-us/jitsi-svelte&quot;&gt;jitsi-svelte&lt;/a&gt; lets you easily create your own custom Jitsi client by providing out-of-the-box components built with Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ellx.io/&quot;&gt;Ellx&lt;/a&gt; is part spreadsheet, part notebook and part IDE. It&amp;rsquo;s super smooth thanks to Svelte 😎&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nzherald.co.nz/nz/election-2020-latest-results-party-vote-electorate-vote-and-full-data/5CFVO4ENKNQDE3SICRRNPU5GZM/&quot;&gt;This New Zealand news site&lt;/a&gt; breaks down the results of the 2020 Parliamentary elections using Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Budibase/budibase&quot;&gt;Budibase&lt;/a&gt; is a no-code app builder, powered by Svelte&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/relm-us/svelt-yjs&quot;&gt;Svelt-yjs&lt;/a&gt; combines the collaborative, local-first technology of Yjs with the power of Svelte to enable multiple users across the internet to stay in sync.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/benflap/tabler-icons-svelte&quot;&gt;tabler-icons-svelte&lt;/a&gt; is a Svelte wrapper for over 850 free MIT-licensed high-quality SVG icons for you to use in your web projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Got an idea for something to add to the Showcase? Want to get involved more with Svelte? We&amp;rsquo;re always looking for maintainers, contributors and fanatics... Check out the &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; and &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt; to get involved!&lt;/p&gt;</description><pubDate>Sun, 01 Nov 2020 00:00:00 GMT</pubDate></item><item><title>What’s new in Svelte: October 2020</title><link>https://svelte.dev/blog/whats-new-in-svelte-october-2020</link><author>Dani Sandoval</author><description>&lt;p&gt;Welcome to the first edition of our &amp;ldquo;What&amp;rsquo;s new in Svelte&amp;rdquo; series! We&amp;rsquo;ll try to make this a monthly blog post in which you&amp;rsquo;ll find out about new features, bug fixes, and a showcase of Svelte projects from around the community.&lt;/p&gt;
&lt;h2 id=&quot;New-features&quot;&gt;&lt;span&gt;New features&lt;/span&gt;&lt;a href=&quot;#New-features&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;use:obj.method&lt;/code&gt; allows functions defined within objects to be used within actions (&lt;a href=&quot;/playground/c305722adb4a4545b27b198ea8ff9bde?version=3.27.0&quot;&gt;Example&lt;/a&gt;, &lt;strong&gt;3.26.0&lt;/strong&gt;, warning removed in &lt;strong&gt;3.27.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_&lt;/code&gt; is now supported as a &amp;ldquo;numerical separator&amp;rdquo;, similar to a &lt;code&gt;.&lt;/code&gt; or &lt;code&gt;,&lt;/code&gt; (&lt;a href=&quot;/playground/844c39e91d1248649fe54af839fab570?version=3.26.0&quot;&gt;Example&lt;/a&gt;, &lt;strong&gt;3.26.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;import.meta&lt;/code&gt; now works in template expressions (&lt;a href=&quot;/playground/9630de41957a4c80a4fce264360a6bc7?version=3.26.0&quot;&gt;Example&lt;/a&gt;, &lt;strong&gt;3.26.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;CSS Selectors with &lt;code&gt;~&lt;/code&gt; and &lt;code&gt;+&lt;/code&gt; combinators are now supported (&lt;a href=&quot;/playground/91ad9257d2d1430185a504a18cc60172?version=3.29.0&quot;&gt;Example&lt;/a&gt;, &lt;strong&gt;3.27.0&lt;/strong&gt;, with a compiler fix in &lt;strong&gt;3.29.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;{#key}&lt;/code&gt; block is now available to key arbitrary content on an expression. Whenever the expression changes, the contents inside the &lt;code&gt;{#key}&lt;/code&gt; block will be destroyed and recreated. For an in-depth explanation and to find out how it&amp;rsquo;s implemented, check out the &lt;a href=&quot;https://lihautan.com/contributing-to-svelte-implement-key-block/&quot;&gt;new blog post&lt;/a&gt; of Svelte Team member Tan Li Hau. (&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/1469&quot;&gt;More info&lt;/a&gt;, &lt;strong&gt;3.29.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Slots can now be forwarded through child components! This used to only be possible by adding extra wrapper &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;s (&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/2079&quot;&gt;More info&lt;/a&gt;, &lt;strong&gt;3.29.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;When using TypeScript, you can now type the &lt;code&gt;createEventDispatcher&lt;/code&gt; method:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;ts&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{ createEventDispatcher }&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;svelte&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;dispatch&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;createEventDispatcher&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		 &lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;* you can also add docs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		 &lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;checked&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;boolean&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Will translate to `CustomEvent&amp;#x3C;boolean&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;hello&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will make sure that you can invoke dispatch only with the specified event names and its types. The Svelte for VS Code extension was also updated to deal with this new feature. It will provide strong typings for these events as well as autocompletion and hover information.&lt;/p&gt;
&lt;h3 id=&quot;New-features-New-from-Sapper&quot;&gt;&lt;span&gt;New from Sapper!&lt;/span&gt;&lt;a href=&quot;#New-features-New-from-Sapper&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Sapper 0.28.9 just came out. The highlights from it include much better support for CSP nonces, asset preload support for exported pages, and error details are now available in the &lt;code&gt;$page&lt;/code&gt; store on error pages.&lt;/p&gt;
&lt;p&gt;In addition, Sapper&amp;rsquo;s CSS handling has been rewritten over the course of recent releases in order to fix existing CSS handling bugs, refactor the CSS handling to occur entirely within a Rollup plugin, and remove the need internally to register CSS in the routing system. Congrats and thank you to the folks working on Sapper for all their solid work!&lt;/p&gt;
&lt;h2 id=&quot;Impactful-bug-fixes&quot;&gt;&lt;span&gt;Impactful bug fixes&lt;/span&gt;&lt;a href=&quot;#Impactful-bug-fixes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;CSS compilation will no longer remove rules for the &lt;code&gt;open&lt;/code&gt; attribute on &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; elements (&lt;a href=&quot;/playground/ab4c0c177d1f4fab92f46eb8539cea9a?version=3.26.0&quot;&gt;Example&lt;/a&gt;, &lt;strong&gt;3.26.0&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prettier-plugin-svelte&lt;/code&gt; will do a better job now at dealing with whitespaces, especially around inline elements. It will also preserve formatting inside &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; tags and will no longer format languages which are not supported by Prettier, like SASS, Pug or Stylus.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Coming-up&quot;&gt;&lt;span&gt;Coming up&lt;/span&gt;&lt;a href=&quot;#Coming-up&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sveltesummit.com/&quot;&gt;Svelte Summit&lt;/a&gt;, Svelte&amp;rsquo;s second global online conference, is taking place on October 18! Sign up for free to get reminders and talk updates!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For all the features and bugfixes see the CHANGELOG for &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md&quot;&gt;Svelte&lt;/a&gt; and &lt;a href=&quot;https://github.com/sveltejs/sapper/blob/master/CHANGELOG.md&quot;&gt;Sapper&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;Svelte-Showcase&quot;&gt;&lt;span&gt;Svelte Showcase&lt;/span&gt;&lt;a href=&quot;#Svelte-Showcase&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/playground/3a33725c3adb4f57b46b597f9dade0c1?version=3.25.0&quot;&gt;This CustomMenu example&lt;/a&gt; demos how to replace the OS right-click menu&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/cc1eaa7c66964fedb5e70e3ecbbaa0e1?version=3.25.1&quot;&gt;GitHub Tetris&lt;/a&gt; lets you play a Tetris-like game in a git commit history&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://whoaremyrepresentatives.us/&quot;&gt;Who are my representatives?&lt;/a&gt; is a website built with Svelte to help US residents get more info on their congressional representatives&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bluwy/pick-palette&quot;&gt;Pick Palette&lt;/a&gt; is a color palette manager made with Svelte!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Svelte-Showcase-In-depth-learning:&quot;&gt;&lt;span&gt;In-depth learning:&lt;/span&gt;&lt;a href=&quot;#Svelte-Showcase-In-depth-learning:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/dp/B08D6T6BKS/ref=cm_sw_r_tw_dp_x_OQMtFb3GPQCB2&quot;&gt;Svelte 3 Up and Running&lt;/a&gt; is a new book about building production-ready static web apps with Svelte 3&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PL4cUxeGkcC9gdr4Qhx83gBBcID-KMe-PQ&quot;&gt;Sapper Tutorial (Crash Course)&lt;/a&gt; walks through the ins-and-outs of Sapper, the Svelte-powered application framework&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://france.sveltesociety.dev/&quot;&gt;Svelte Society Day France&lt;/a&gt; happened September 27th featuring a wide variety of topics all in French! You can find the full recording &lt;a href=&quot;https://www.youtube.com/watch?v=aS1TQ155JK4&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Svelte-Showcase-Plug-and-play-components:&quot;&gt;&lt;span&gt;Plug-and-play components:&lt;/span&gt;&lt;a href=&quot;#Svelte-Showcase-Plug-and-play-components:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vaheqelyan/svelte-zoom&quot;&gt;svelte-zoom&lt;/a&gt; brings &amp;ldquo;nearly native&amp;rdquo; pan-and-zoom to images on desktop and mobile&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/TheComputerM/svelte-materialify&quot;&gt;svelte-materialify&lt;/a&gt; is a Material component library for Svelte with over 50 components&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/macfja/svelte-undoable&quot;&gt;svelte-undoable&lt;/a&gt; makes it easy to introduce undo and redo functionality using &lt;code&gt;bind:&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/playground/7b23ad9d2693424482cd411b0378b55b?version=3.24.1&quot;&gt;This Tilt component&lt;/a&gt; implements a common UX pattern where the hovered element tilts to follow the mouse&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Svelte-Showcase-Lots-of-examples-of-how-use-JS-tech-came-out-this-month:&quot;&gt;&lt;span&gt;Lots of examples of how use JS tech came out this month:&lt;/span&gt;&lt;a href=&quot;#Svelte-Showcase-Lots-of-examples-of-how-use-JS-tech-came-out-this-month:&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codechips.me/sapper-with-postcss-and-tailwind/&quot;&gt;Sapper with PostCSS and Tailwind&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/phptuts/Svelte-PrismJS&quot;&gt;PrismJS (Code block syntax highlighting)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pqina/svelte-filepond&quot;&gt;Filepond (Drag-and-drop file upload)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Tommertom/svelte-ionic-app&quot;&gt;Ionic (UI Components)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Demonicious/svelte-pell/&quot;&gt;Pell (WYSIWYG Editor)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/anoram/leaflet-svelte&quot;&gt;Leaflet (Mapping)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Reminder&lt;/strong&gt;: There&amp;rsquo;s a &lt;a href=&quot;https://github.com/sveltejs/integrations&quot;&gt;Svelte integrations repo&lt;/a&gt; that demonstrates ways to incorporate Svelte into your stack (and vice versa). If you&amp;rsquo;ve got questions on how to use a particular piece of tech with Svelte, you may find your answer there... and if you&amp;rsquo;ve gotten something to work with Svelte, consider contributing!&lt;/p&gt;
&lt;p&gt;For more amazing Svelte projects, check out the &lt;a href=&quot;https://sveltesociety.dev/&quot;&gt;Svelte Society&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/r/sveltejs/&quot;&gt;Reddit&lt;/a&gt; and &lt;a href=&quot;https://discord.com/invite/yy75DKs&quot;&gt;Discord&lt;/a&gt;… and be sure to post your own!&lt;/p&gt;
&lt;h2 id=&quot;See-you-next-month&quot;&gt;&lt;span&gt;See you next month!&lt;/span&gt;&lt;a href=&quot;#See-you-next-month&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;By the way, Svelte now has an &lt;a href=&quot;https://opencollective.com/svelte&quot;&gt;OpenCollective&lt;/a&gt;! All contributions and all expenses are published in our transparent public ledger. Learn who is donating, how much, where that money is going, submit expenses, get reimbursed and more!&lt;/p&gt;</description><pubDate>Thu, 01 Oct 2020 00:00:00 GMT</pubDate></item><item><title>Svelte &lt;3 TypeScript</title><link>https://svelte.dev/blog/svelte-and-typescript</link><author>Orta Therox</author><description>&lt;p&gt;以前から最も多く要望をもらっていた機能がついに実現しました、Svelte は正式に TypeScript をサポートします。&lt;/p&gt;
&lt;p&gt;これにより、より良い開発体験が得られると考えています。 -- また、より大きな Svelte コードベースにも美しくスケールします -- TypeScript と JavaScript のどちらを使用していても。&lt;/p&gt;
&lt;figure&gt;
	&lt;img alt=&quot;Screenshot of TypeScript in Svelte&quot; src=&quot;/media/svelte-ts.png&quot;&gt;
	&lt;figcaption&gt;Image of TypeScript + Svelte in VS Code (theme is &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=karyfoundation.theme-karyfoundation-themes&quot;&gt;Kary Pro&lt;/a&gt;.)&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;(Try-it-now)&quot;&gt;&lt;span&gt;今すぐ試してみてください(Try it now)&lt;/span&gt;&lt;a href=&quot;#(Try-it-now)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;You can start a new Svelte TypeScript project using Svelte&amp;rsquo;s official scaffolding CLI by running &lt;code&gt;npm create svelte@latest&lt;/code&gt; and following the prompts. This sets up a new SvelteKit project for you.&lt;/p&gt;
&lt;p&gt;Alternatively you can run &lt;code&gt;npm create vite@latest myapp -- --template svelte-ts&lt;/code&gt; to scaffold a Vite project using Svelte and TypeScript.&lt;/p&gt;
&lt;p&gt;VS Code ユーザーの方は、(新しい) &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode&quot;&gt;公式の拡張機能&lt;/a&gt; を使用していることを確認してください。これは James Birtles による人気の高い拡張機能に取って代わるものです。
この記事の後半では、既存の Svelte プロジェクトで TypeScript を使用するための個々のステップについて詳しく説明します。&lt;/p&gt;
&lt;h2 id=&quot;Svelte-TypeScript-(What-does-it-mean-to-support-TypeScript-in-Svelte-)&quot;&gt;&lt;span&gt;Svelte の TypeScript サポートとは何を意味しますか？(What does it mean to support TypeScript in Svelte?)&lt;/span&gt;&lt;a href=&quot;#Svelte-TypeScript-(What-does-it-mean-to-support-TypeScript-in-Svelte-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte で TypeScript に対応することはかなり前から可能でしたが、多くの異なるツールを組み合わせ、それぞれを個別に動作するようにしなければなりませんでした。今日では、これらのツールのほぼすべてが Svelte の組織の下にあり、パイプライン全体に責任を持ち、共通の目標を持った人たちによってメンテナンスされています。&lt;/p&gt;
&lt;p&gt;COVID がパンデミックと宣言される前の週、私は類似の開発エコシステムによる最高の Svelte 用のツールとアイデアの&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/4518&quot;&gt;統合を提案&lt;/a&gt;し、ファーストクラスの TypeScript サポートを得るための一連のステップを提供しました。それ以来、多くの人たちが協力してくれて、そこにたどり着くためのコードを書いてくれました。&lt;/p&gt;
&lt;p&gt;Svelte が TypeScript をサポートするようになったということは、いくつかの異なる意味を持っています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; ブロックの中で TypeScript を使うことができます -- &lt;code&gt;lang=&amp;quot;ts&amp;quot;&lt;/code&gt; 属性を追加するだけです。&lt;/li&gt;
&lt;li&gt;TypeScript を持つコンポーネントは &lt;code&gt;svelte-check&lt;/code&gt; コマンドでタイプチェックを行うことができます。&lt;/li&gt;
&lt;li&gt;コンポーネントを書いているときに、マークアップ内の式でも自動補完のヒントや型チェックを得ることができます。&lt;/li&gt;
&lt;li&gt;TypeScript ファイルは Svelte コンポーネント API を理解しています -- &lt;code&gt;.ts&lt;/code&gt; モジュールに &lt;code&gt;.svelte&lt;/code&gt; ファイルをインポートしても、赤い四角い線はもうありません。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;Svelte-TypeScript-(What-does-it-mean-to-support-TypeScript-in-Svelte-)-(How-does-it-work-)&quot;&gt;&lt;span&gt;どのような仕組みになっていますか？(How does it work?)&lt;/span&gt;&lt;a href=&quot;#Svelte-TypeScript-(What-does-it-mean-to-support-TypeScript-in-Svelte-)-(How-does-it-work-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;TypeScript のサポートの 2 つの主要な部分を理解するために、TypeScript が開発ツールを提供するために使用している技術と比較してみましょう。それはコマンドラインで実行し &lt;code&gt;*.ts&lt;/code&gt; を &lt;code&gt;*.js&lt;/code&gt; に変換する &lt;code&gt;tsc&lt;/code&gt; コンパイラと、テキストエディタからのリクエストに応答するノードAPI である &lt;code&gt;TSServer&lt;/code&gt; です。&lt;code&gt;TSServer&lt;/code&gt; は、コーディング中のエディタに JavaScript と TypeScript のリアルタイムイントロスペクションを提供するもので、その中にコンパイラのコードのほとんどが含まれています。&lt;/p&gt;
&lt;p&gt;一方 Svelte には、Svelte コンパイラと、&lt;a href=&quot;https://microsoft.github.io//language-server-protocol/overviews/lsp/overview/&quot;&gt;Language Server Protocol standard&lt;/a&gt; を介してテキストエディタの呼び出しに応答する &lt;a href=&quot;https://github.com/sveltejs/language-tools/tree/master/packages/language-server#svelte-language-server&quot;&gt;&lt;code&gt;svelte-language-server&lt;/code&gt;&lt;/a&gt; があります。ファーストクラスの TypeScript サポートというのは、これらの &lt;em&gt;両方&lt;/em&gt; のシステムが TypeScript コードをうまく扱えることを意味しています。&lt;/p&gt;
&lt;p&gt;TypeScript のための Svelte コンパイラのサポートは、&lt;a href=&quot;https://github.com/kaisermann&quot;&gt;Christian Kaisermann&lt;/a&gt; の &lt;a href=&quot;https://github.com/sveltejs/svelte-preprocess#svelte-preprocess&quot;&gt;&lt;code&gt;svelte-preprocess&lt;/code&gt;&lt;/a&gt; が担当しており、現在では公式の Svelte プロジェクトとなっています。&lt;/p&gt;
&lt;p&gt;エディタについては、&lt;a href=&quot;https://github.com/octref&quot;&gt;Pine&amp;rsquo;s&lt;/a&gt; による &lt;a href=&quot;https://vuejs.org&quot;&gt;Vue&lt;/a&gt; エコシステムの &lt;a href=&quot;https://github.com/vuejs/vetur&quot;&gt;Vetur&lt;/a&gt; からインスピレーションを得ました。Vetur は &lt;a href=&quot;https://github.com/vuejs/vetur/blob/master/server&quot;&gt;LSP&lt;/a&gt;、VS Code 拡張機能、&lt;a href=&quot;https://github.com/vuejs/vetur/blob/master/vti&quot;&gt;CLI&lt;/a&gt; を提供します。Svelteも現在、&lt;a href=&quot;https://github.com/sveltejs/language-tools/blob/master/packages/language-server&quot;&gt;LSP&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/language-tools/blob/master/packages/svelte-vscode&quot;&gt;VS Code 拡張機能&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/language-tools/blob/master/packages/svelte-check&quot;&gt;CLI&lt;/a&gt; を提供しています。&lt;/p&gt;
&lt;h3 id=&quot;Svelte-TypeScript-(What-does-it-mean-to-support-TypeScript-in-Svelte-)-.svelte-(-.svelte-Introspection)&quot;&gt;&lt;span&gt;*.svelte イントロスペクション(*.svelte Introspection)&lt;/span&gt;&lt;a href=&quot;#Svelte-TypeScript-(What-does-it-mean-to-support-TypeScript-in-Svelte-)-.svelte-(-.svelte-Introspection)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;公式の Svelte VS Code 拡張機能では、&lt;a href=&quot;https://github.com/UnwrittenFun&quot;&gt;James Birtles&lt;/a&gt; 氏が&lt;a href=&quot;https://github.com/UnwrittenFun/svelte-vscode&quot;&gt;&lt;code&gt;UnwrittenFun/svelte-vscode&lt;/code&gt;&lt;/a&gt; と &lt;a href=&quot;https://github.com/UnwrittenFun/svelte-language-server/&quot;&gt;&lt;code&gt;UnwrittenFun/svelte-language-server&lt;/code&gt;&lt;/a&gt; で作成した基盤を基に構築しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/dummdidumm&quot;&gt;Simon Holthausen&lt;/a&gt; と &lt;a href=&quot;https://github.com/jasonlyu123&quot;&gt;Lyu, Wei-Da&lt;/a&gt; は、JavaScript と TypeScript のイントロスペクションを改善する素晴らしい仕事をしてくれました。またコードベース内のコンポーネントの props を理解する力を強化する &lt;a href=&quot;https://github.com/halfnelson&quot;&gt;@halfnelson&lt;/a&gt; の &lt;a href=&quot;https://github.com/sveltejs/language-tools/tree/master/packages/svelte2tsx#svelte2tsx&quot;&gt;svelte2tsx&lt;/a&gt; を統合しました。&lt;/p&gt;
&lt;h2 id=&quot;TypeScript-(Adding-TypeScript-to-an-existing-project)&quot;&gt;&lt;span&gt;既存のプロジェクトにTypeScriptを追加する(Adding TypeScript to an existing project)&lt;/span&gt;&lt;a href=&quot;#TypeScript-(Adding-TypeScript-to-an-existing-project)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;はじめる前に、依存関係を追加します。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;install&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;--save-dev&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;@tsconfig/svelte&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;typescript&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte-preprocess&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte-check&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&quot;TypeScript-(Adding-TypeScript-to-an-existing-project)-1.-Typescript-(Compiling-TypeScript)&quot;&gt;&lt;span&gt;1. Typescriptのコンパイル(Compiling TypeScript)&lt;/span&gt;&lt;a href=&quot;#TypeScript-(Adding-TypeScript-to-an-existing-project)-1.-Typescript-(Compiling-TypeScript)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;まず最初に、&lt;code&gt;&amp;lt;script lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;/code&gt; ブロックの内容を TypeScript コンパイラに渡す &lt;a href=&quot;https://github.com/sveltejs/svelte-preprocess#svelte-preprocess&quot;&gt;&lt;code&gt;svelte-preprocess&lt;/code&gt;&lt;/a&gt; を設定する必要があります。&lt;/p&gt;
&lt;p&gt;Rollupプロジェクトでは、次のようになります -- Rollupが &lt;code&gt;.ts&lt;/code&gt; ファイルを扱えるように &lt;code&gt;@rollup/plugin-typescript&lt;/code&gt; をインストールする必要があることに注意してください。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;autoPreprocess&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({ aliases&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;markupTagName&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;sourceMap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;rest&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;AutoPreprocessOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;AutoPreprocessGroup&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@deprecated&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;Use the named export instead: &lt;code&gt;import { sveltePreprocess } from &amp;#39;svelte-preprocess&amp;#39;&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;autoPreprocess&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;svelte-preprocess&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;highlight add&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;typescript&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;typescript&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;@rollup/plugin-typescript&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// ...,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;plugins&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any[]&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;plugins&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;[&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;svelte&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;preprocess&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;PreprocessorGroup&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;preprocess&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;autoPreprocess&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({ aliases&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;markupTagName&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;sourceMap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;rest }?&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;AutoPreprocessOptions&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;AutoPreprocessGroup&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@deprecated&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;Use the named export instead: &lt;code&gt;import { sveltePreprocess } from &amp;#39;svelte-preprocess&amp;#39;&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;autoPreprocess&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span class=&quot;highlight add&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;typescript&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;typescript&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;sourceMap&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;boolean&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;sourceMap&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;production&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/sveltejs/svelte-preprocess#usage&quot;&gt;他の環境のための説明はこちら&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;TypeScriptを設定するには、プロジェクトのルートに &lt;code&gt;tsconfig.json&lt;/code&gt; を作成する必要があります。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;json&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	&quot;extends&quot;: &quot;@tsconfig/svelte/tsconfig.json&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	&quot;include&quot;: [&quot;src/**/*&quot;, &quot;src/node_modules&quot;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	&quot;exclude&quot;: [&quot;node_modules/*&quot;, &quot;__sapper__/*&quot;, &quot;public/*&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;include&lt;/code&gt; / &lt;code&gt;exclude&lt;/code&gt; はあなたのプロジェクトによって異なります。-- これらは、ほとんどの Svelte プロジェクトで動作するデフォルト値です。&lt;/p&gt;
&lt;h3 id=&quot;TypeScript-(Adding-TypeScript-to-an-existing-project)-2.-(Editor-Support)&quot;&gt;&lt;span&gt;2. エディタサポート(Editor Support)&lt;/span&gt;&lt;a href=&quot;#TypeScript-(Adding-TypeScript-to-an-existing-project)-2.-(Editor-Support)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://langserver.org/#implementations-client&quot;&gt;LSPを使用&lt;/a&gt; しているエディタであれば、どのようなエディタでも対応可能です。&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode&quot;&gt;VS Code&lt;/a&gt; 拡張機能は、私たちが最も優先してきたものです。しかし、&lt;a href=&quot;https://github.com/sveltejs/language-tools/pull/160&quot;&gt;Atom上&lt;/a&gt;では作業が進行中で、&lt;a href=&quot;https://github.com/coc-extensions/coc-svelte&quot;&gt;coc-svelte&lt;/a&gt; 経由の Vim は最新の LSPでアップデートされています。&lt;/p&gt;
&lt;p&gt;これらのエディタ拡張機能は、JavaScript だけを使っていてもコーディング体験を向上させてくれます。エディタはエラーを提供してくれませんが、推論やリファクタリングツールを提供してくれます。JavaScript を使って &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; タグの先頭に &lt;a href=&quot;https://www.staging-typescript.org/docs/handbook/intro-to-js-ts.html&quot;&gt;&lt;code&gt;// @ts-check&lt;/code&gt; を追加&lt;/a&gt;すると、インフラの変更なしでより良いエラーメッセージを得ることができます。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; を TypeScript を使うように切り替えるには、&lt;code&gt;&amp;lt;script lang=&amp;quot;ts&amp;quot;&amp;gt;&lt;/code&gt; を使ってください。願わくば、赤い四角い線の海を見ることがないことを願っています。&lt;/p&gt;
&lt;h3 id=&quot;TypeScript-(Adding-TypeScript-to-an-existing-project)-3.-CI-(CI-Checks)&quot;&gt;&lt;span&gt;3. CIでのチェック(CI Checks)&lt;/span&gt;&lt;a href=&quot;#TypeScript-(Adding-TypeScript-to-an-existing-project)-3.-CI-(CI-Checks)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;赤い四角いマークがあるのは素晴らしいことですが、まあ、ちょっとしたことです。しかし、長期的には、コードにエラーがないことを確認できるようにしたいものです。プロジェクトにエラーがないことを確認するには、CLI ツールの &lt;a href=&quot;https://www.npmjs.com/package/svelte-check&quot;&gt;&lt;code&gt;svelte-check&lt;/code&gt;&lt;/a&gt; を使うことができます。これはエディタのように動作し、すべての &lt;code&gt;.svelte&lt;/code&gt; ファイルに対してエラーを確認します。&lt;/p&gt;
&lt;p&gt;依存関係をプロジェクトに追加し、CI に追加することができます。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;❯&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;npx&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte-check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Loading&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte-check&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;workspace:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;/Users/ortatherox/dev/svelte/example-app&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Getting&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Svelte&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;diagnostics...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;====================================&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;/Users/ortatherox/dev/svelte/example-app/src/App.svelte:3:2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;123&#39;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;assignable&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;to&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;string&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(ts)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;====================================&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;svelte-check&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;found&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;error&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;error&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Command&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;failed&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;with&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;exit&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;code&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;1.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;Sapper-TypeScript-(What-about-TypeScript-in-Sapper-projects-)&quot;&gt;&lt;span&gt;SapperプロジェクトのTypeScriptについてはどうなってますか？(What about TypeScript in Sapper projects?)&lt;/span&gt;&lt;a href=&quot;#Sapper-TypeScript-(What-about-TypeScript-in-Sapper-projects-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;TypeScriptのサポートは 0.28 で Sapper に追加されましたので、古いバージョンをお使いの場合は &lt;a href=&quot;https://sapper.svelte.dev/migrating#0_27_to_0_28&quot;&gt;アップグレード&lt;/a&gt;をお勧めします。&lt;/p&gt;
&lt;h2 id=&quot;(How-can-I-contribute-)&quot;&gt;&lt;span&gt;どうすれば貢献できますか？(How can I contribute?)&lt;/span&gt;&lt;a href=&quot;#(How-can-I-contribute-)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ご質問ありがとうございます。作業は &lt;a href=&quot;https://github.com/sveltejs/language-tools&quot;&gt;sveltejs/language-tools&lt;/a&gt; リポジトリと Svelte Discord の &lt;a href=&quot;https://discord.gg/enV6v8K&quot;&gt;#language-tools&lt;/a&gt; チャンネルで行われています。問題を報告したり、修正を提出したり、新しいエディタのための拡張機能の開発を手伝ったりしたい場合は、こちらで作業を行っていますので、そこでお会いしましょう！&lt;/p&gt;</description><pubDate>Fri, 17 Jul 2020 00:00:00 GMT</pubDate></item><item><title>Svelte 3: リアクティビティ再考</title><link>https://svelte.dev/blog/svelte-3-rethinking-reactivity</link><author>Rich Harris</author><description>&lt;p&gt;あとほんの数ヶ月後には、Svelte 3 の安定版リリースを発表することができ、大変嬉しく思っています。これは、Svelteコミュニティの多くの人々による数百時間の作業を表す巨大なリリースです。これには、あらゆる段階で設計の形成に貢献したベータテスターからの貴重なフィードバックが含まれます。 &lt;/p&gt;
&lt;p&gt;私たちはあなたがそれを気に入ってくれると思います。&lt;/p&gt;
&lt;h2 id=&quot;What-is-Svelte&quot;&gt;&lt;span&gt;Svelte とは何か？&lt;/span&gt;&lt;a href=&quot;#What-is-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelteはコンポーネントフレームワーク — React や Vue のような — ですが、重要な違いがあります。従来のフレームワークでは、宣言的な state 駆動型のコードを書くことができますが、ペナルティがあります。ブラウザは宣言的な構造を DOM 操作に変換するために余分な作業をしなければならず、&lt;a href=&quot;/blog/virtual-dom-is-pure-overhead&quot;&gt;仮想 DOM の差分更新&lt;/a&gt;技術のようなものはフレーム予算を食い荒らし、ガベージコレクタに課税します。&lt;/p&gt;
&lt;p&gt;その代わり、Svelteは &lt;em&gt;ビルド時&lt;/em&gt; に実行され、あなたのコンポーネントを DOM の更新を行う非常に効率的な &lt;em&gt;命令的&lt;/em&gt; コードに変換します。その結果、優れたパフォーマンス特性を持つ野心的なアプリケーションを書くことができます。&lt;/p&gt;
&lt;p&gt;Svelte の最初のバージョンは&lt;a href=&quot;/blog/frameworks-without-the-framework&quot;&gt;仮説を検証する&lt;/a&gt;ことがすべてでした -- これは、専用のコンパイラが優れたユーザーエクスペリエンスを提供する強固なコードを生成することができることを示しています。2つ目は、物事を少し片付けた小さなアップグレードでした。&lt;/p&gt;
&lt;p&gt;バージョン3は大幅なオーバーホールです。この5、6か月間、私たちの焦点は、優れた &lt;em&gt;開発者体験&lt;/em&gt; を提供することにありました。今では、他の場所で見かけるものよりも&lt;a href=&quot;/blog/write-less-code&quot;&gt;大幅に少ないボイラープレート&lt;/a&gt;でコンポーネントを書くことができるようになりました。真新しい&lt;a href=&quot;/tutorial&quot;&gt;チュートリアル&lt;/a&gt;を試してみて、私たちが何を言っているのか確認してください — 他のフレームワークに慣れている人なら、きっと驚くと思います。&lt;/p&gt;
&lt;p&gt;それを可能にするためには、まず、現代のUIフレームワークの中心となるコンセプト、リアクティビティを再考する必要がありました。&lt;/p&gt;
&lt;div class=&quot;max&quot;&gt;
&lt;figure style=&quot;max-width: 960px; margin: 0 auto&quot;&gt;
&lt;div style=&quot;height: 0; padding: 0 0 57.1% 0; position: relative; margin: 0 auto;&quot;&gt;
	&lt;iframe style=&quot;position: absolute; width: 100%; height: 100%; left: 0; top: 0; margin: 0;&quot; src=&quot;https://www.youtube-nocookie.com/embed/AdNJ3fydeao&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;figcaption&gt;&#39;Rethinking Reactivity&#39; from &lt;a href=&quot;https://www.israel.yglfconf.com/&quot;&gt;You Gotta Love Frontend Code Camp&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;

&lt;h2 id=&quot;Moving-reactivity-into-the-language&quot;&gt;&lt;span&gt;リアクティビティを言語にする&lt;/span&gt;&lt;a href=&quot;#Moving-reactivity-into-the-language&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;昔の Svelte では、&lt;code&gt;this.set&lt;/code&gt; メソッドを呼び出すことで state が変わったことをコンピュータに伝えることができました。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これはコンポーネントが &lt;em&gt;react(反応)&lt;/em&gt; する原因になります。そういえば、&lt;code&gt;this.set&lt;/code&gt; は古典的な (hooks 以前の) React で使われている &lt;code&gt;this.setState&lt;/code&gt; メソッドとほぼ同じです。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;setState&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;いくつかの重要な技術的な違いがありますが（上の動画で説明したように、React はリアクティブではありません）、概念的には同じものです。&lt;/p&gt;
&lt;aside&gt;
	&lt;p&gt;In fact, Svelte 3 is basically &lt;a href=&quot;https://twitter.com/threepointone/status/1057179801109311488&quot;&gt;Sunil&#39;s fault&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;それは &lt;a href=&quot;https://reactjs.org/docs/hooks-intro.html&quot;&gt;フック&lt;/a&gt; の登場ですべてが変わりました。多くのフレームワークがフックの独自の実装を実験し始めましたが、私たちはすぐにそれは私たちが望んでいる方向ではないと結論付けました。フックには魅力的な特性がありますが、不自然なコードを含んでいたり、ガベージコレクタのために不必要な作業が発生したりします。&lt;a href=&quot;https://mobile.twitter.com/sveltejs/status/1088500539640418304&quot;&gt;組込みデバイス&lt;/a&gt;やアニメーションを多用するインタラクティブな環境で使用されているフレームワークでは、それは良いことではありません。&lt;/p&gt;
&lt;p&gt;そこで、私たちは一歩下がって、どのようなAPIが私たちにとって機能するのかを自問自答しました…そして、最高のAPIは全くAPIがないことに気付きました。私たちはただ &lt;em&gt;言語を使う&lt;/em&gt; ことができます。いくつかの &lt;code&gt;count&lt;/code&gt; 値の更新 -- そしてそれに依存するすべてのもの -- は、このように簡単であるべきです。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;コンパイラなので、裏で代入にタグ付けすることでそれが可能になります。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;$$invalidate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重要なことは、プロキシやアクセサを使用する際のオーバーヘッドや複雑さを伴わずに、これらのことをすべて行うことができるということです。ただの変数です。&lt;/p&gt;
&lt;h2 id=&quot;New-look&quot;&gt;&lt;span&gt;新しい Svelte&lt;/span&gt;&lt;a href=&quot;#New-look&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;改修されているのはコンポーネントだけではありません。&lt;a href=&quot;https://svelte.technology&quot;&gt;svelte.technology&lt;/a&gt; から &lt;a href=&quot;https://svelte.dev&quot;&gt;svelte.dev&lt;/a&gt;(訳注:&lt;a href=&quot;https://svelte.jp&quot;&gt;日本語版&lt;/a&gt;) に移行した新しいロゴとウェブサイトを作成した &lt;a href=&quot;https://vedam.de/&quot;&gt;AchimVedam&lt;/a&gt; の素晴らしいデザイン作業のおかげで、Svelte 自体はまったく新しいルックアンドフィールになっています。 &lt;/p&gt;
&lt;p&gt;また、私たちはキャッチフレーズを「魔法のように消える UI フレームワーク」から「サイバネティックに強化されたウェブアプリ」に変更しました。Svelte には様々な側面があります。-- 卓越した性能、小さなバンドル、アクセシビリティ、組み込みのスタイルカプセル化、宣言的な遷移、使いやすさ、コンパイラであることなど -- その中のどれか1つに焦点を当てることは、他のものに不公平感を与えるような気がします。「Cybernetically enhanced」は、私たちのツールは私たち自身の知能の拡張として機能するべきだという Svelte の包括的な哲学を思い起こさせるようにデザインされています -- 願わくばレトロでウィリアム・ギブソン風のひねりを加えて。&lt;/p&gt;
&lt;h2 id=&quot;Upgrading-from-version-2&quot;&gt;&lt;span&gt;バージョン2からのアップグレード&lt;/span&gt;&lt;a href=&quot;#Upgrading-from-version-2&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;もしあなたが既存の Svelte 2 ユーザーであれば、手動でのアップグレードが必要になると思います。近日中に移行ガイドと &lt;a href=&quot;https://github.com/sveltejs/svelte-upgrade&quot;&gt;svelte-upgrade&lt;/a&gt; の更新版をリリースする予定です。これは作業を自動化するためにできる限りのことをしてくれます。しかし、 &lt;em&gt;これ&lt;/em&gt; は大きな変化であり、すべてが自動的に処理できるわけではありません。&lt;/p&gt;
&lt;p&gt;私たちはこれを軽視していません、Svelte 3 を体験してもらえれば、なぜ過去と決別する必要があると感じたのか理解してもらえると思います。&lt;/p&gt;
&lt;h2 id=&quot;Still-to-come&quot;&gt;&lt;span&gt;これから&lt;/span&gt;&lt;a href=&quot;#Still-to-come&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD
このリリースは大変なものでしたが、まだ完成には至っていません。 よりスマートでコンパクトなコードと長い機能のウィッシュリストを生成するためのアイデアがたくさんあります。Next.js スタイルのアプリフレームワークである &lt;a href=&quot;https://sapper.svelte.dev&quot;&gt;Sapper&lt;/a&gt; は、Svelte 3 を使用するためのアップデートの真っ最中です。&lt;a href=&quot;https://svelte-native.technology/&quot;&gt;Svelte Native&lt;/a&gt; のコミュニティプロジェクトは、Svelte で Android や iOS アプリを書くことができるようになり、順調に進んでいますが、コアからのより完全なサポートが必要です。他のフレームワークが持っているようなエディタ拡張機能、シンタックスハイライター、コンポーネントキット、devtools などの豊富な機能はまだありません。私たちは &lt;em&gt;本当に&lt;/em&gt; ファーストクラスの TypeScript サポートを追加したいと思っています。&lt;/p&gt;
&lt;h1 id=&quot;Svelte-3-Web-1-Discord-GitHub&quot;&gt;&lt;span&gt;しかし、それらを待つ間でも Svelte 3 は Web アプリを構築するための最良の方法だと考えています。1時間ほどかけて&lt;a href=&quot;/tutorial&quot;&gt;チュートリアル&lt;/a&gt;を読んでみてください。いずれにしても、&lt;a href=&quot;https://svelte.dev/chat&quot;&gt;Discord チャットルーム&lt;/a&gt;や &lt;a href=&quot;https://github.com/sveltejs/svelte&quot;&gt;GitHub&lt;/a&gt; でお待ちしています。-- 誰でも歓迎します、特にあなたは。&lt;/span&gt;&lt;a href=&quot;#Svelte-3-Web-1-Discord-GitHub&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;But in the meantime we think Svelte 3 is the best way to build web apps yet. Take an hour to go through the &lt;a href=&quot;/tutorial&quot;&gt;tutorial&lt;/a&gt; and we hope to convince you of the same. Either way, we&amp;rsquo;d love to see you in our &lt;a href=&quot;/chat&quot;&gt;Discord chatroom&lt;/a&gt; and on &lt;a href=&quot;https://github.com/sveltejs/svelte&quot;&gt;GitHub&lt;/a&gt; — everyone is welcome, especially you.&lt;/p&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;sveltejs/main&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;</description><pubDate>Mon, 22 Apr 2019 00:00:00 GMT</pubDate></item><item><title>コード量を減らす(Write less code)</title><link>https://svelte.dev/blog/write-less-code</link><author>Rich Harris</author><description>&lt;p&gt;全てのコードにはバグが存在する可能性があります(All code is buggy)。したがって、書かなければいけないコードが多ければ多いほど、アプリケーションがバグだらけになるのは理にかなっています。&lt;/p&gt;
&lt;p&gt;多くのコードを書くには多くの時間がかかるので、他のこと(例えば最適化や、良い機能を開発すること、またはPCの前に座らずに外出することなど)に充てられる時間は少なくなります。&lt;/p&gt;
&lt;p&gt;実際、&lt;a href=&quot;https://blog.codinghorror.com/diseconomies-of-scale-and-lines-of-code/&quot;&gt;プロジェクトの開発時間&lt;/a&gt; と &lt;a href=&quot;https://www.mayerdan.com/ruby/2012/11/11/bugs-per-line-of-code-ratio&quot;&gt;バグ件数&lt;/a&gt; はコードベースのサイズに対して直線的ではなく &lt;em&gt;二次関数的&lt;/em&gt; に増加することが広く知られています。これは私たちの直感と一致しています : 10行のプルリクエストは、100行のプルリクエストだと有り得ないレベルで精査されるでしょう。また、モジュールが1つの画面に収まりきらないほど大きくなると、それを理解するために必要な認知的努力が著しく増大します。リファクタリングし、コメントを追加することでこの問題に対応しようとしますが、ほとんどの場合コードがもっと増加してしまいます。悪循環です。&lt;/p&gt;
&lt;p&gt;しかし、私たちはパフォーマンスの数値やバンドルサイズ、その他計測できるものはなんでも気にかける一方で、書いているコードの量に注意を払うことはほとんどありません。&lt;/p&gt;
&lt;h2 id=&quot;(Readability-is-important)&quot;&gt;&lt;span&gt;重要なのは読みやすさ(Readability is important)&lt;/span&gt;&lt;a href=&quot;#(Readability-is-important)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;巧妙なトリックを使って読みやすさを犠牲にしてでもできるだけコードをコンパクトにするべきだ、と主張しているわけではありません。また、コードの &lt;em&gt;行数&lt;/em&gt; を減らすことこそが価値のある目標であると主張しているわけでもありません、このような主張は、例えば次のような読みやすいコードを…&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;===&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Console&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;The &lt;code&gt;console&lt;/code&gt; module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.&lt;/p&gt;
&lt;p&gt;The module exports two specific components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Console&lt;/code&gt; class with methods such as &lt;code&gt;console.log()&lt;/code&gt;, &lt;code&gt;console.error()&lt;/code&gt; and &lt;code&gt;console.warn()&lt;/code&gt; that can be used to write to any Node.js stream.&lt;/li&gt;
&lt;li&gt;A global &lt;code&gt;console&lt;/code&gt; instance configured to write to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstdout&quot;&gt;&lt;code&gt;process.stdout&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstderr&quot;&gt;&lt;code&gt;process.stderr&lt;/code&gt;&lt;/a&gt;. The global &lt;code&gt;console&lt;/code&gt; can be used without importing the &lt;code&gt;node:console&lt;/code&gt; module.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;/em&gt;: The global console object&amp;rsquo;s methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#a-note-on-process-io&quot;&gt;&lt;code&gt;note on process I/O&lt;/code&gt;&lt;/a&gt; for
more information.&lt;/p&gt;
&lt;p&gt;Example using the global &lt;code&gt;console&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints error message and stack trace to stderr:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//   Error: Whoops, something bad happened&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]:5:15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Script.runInThisContext (node:vm:132:18)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Object.runInThisContext (node:vm:309:38)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/process/execution:77:19&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]-wrapper:6:22&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at evalScript (node:internal/process/execution:76:60)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/main/eval_string:23:3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to stderr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example using the &lt;code&gt;Console&lt;/code&gt; class:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(out&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;err);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: [Error: Whoops, something bad happened], to err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to err&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@see&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/v20.11.1/lib/console.js&quot;&gt;source&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;optionalParams: any[]):&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;overload)&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Prints to &lt;code&gt;stdout&lt;/code&gt; with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to &lt;a href=&quot;http://man7.org/linux/man-pages/man3/printf.3.html&quot;&gt;&lt;code&gt;printf(3)&lt;/code&gt;&lt;/a&gt;
(the arguments are all passed to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count: %d&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count:&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@since&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;v0.1.100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;is even`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;…次のように解析がより難しいものに変えるよう促してしまいます:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;&amp;#x3C;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;2&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;===&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Console&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;The &lt;code&gt;console&lt;/code&gt; module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.&lt;/p&gt;
&lt;p&gt;The module exports two specific components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Console&lt;/code&gt; class with methods such as &lt;code&gt;console.log()&lt;/code&gt;, &lt;code&gt;console.error()&lt;/code&gt; and &lt;code&gt;console.warn()&lt;/code&gt; that can be used to write to any Node.js stream.&lt;/li&gt;
&lt;li&gt;A global &lt;code&gt;console&lt;/code&gt; instance configured to write to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstdout&quot;&gt;&lt;code&gt;process.stdout&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstderr&quot;&gt;&lt;code&gt;process.stderr&lt;/code&gt;&lt;/a&gt;. The global &lt;code&gt;console&lt;/code&gt; can be used without importing the &lt;code&gt;node:console&lt;/code&gt; module.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;/em&gt;: The global console object&amp;rsquo;s methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#a-note-on-process-io&quot;&gt;&lt;code&gt;note on process I/O&lt;/code&gt;&lt;/a&gt; for
more information.&lt;/p&gt;
&lt;p&gt;Example using the global &lt;code&gt;console&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints error message and stack trace to stderr:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//   Error: Whoops, something bad happened&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]:5:15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Script.runInThisContext (node:vm:132:18)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Object.runInThisContext (node:vm:309:38)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/process/execution:77:19&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]-wrapper:6:22&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at evalScript (node:internal/process/execution:76:60)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/main/eval_string:23:3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to stderr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example using the &lt;code&gt;Console&lt;/code&gt; class:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(out&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;err);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: [Error: Whoops, something bad happened], to err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to err&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@see&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/v20.11.1/lib/console.js&quot;&gt;source&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;optionalParams: any[]):&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;overload)&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Prints to &lt;code&gt;stdout&lt;/code&gt; with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to &lt;a href=&quot;http://man7.org/linux/man-pages/man3/printf.3.html&quot;&gt;&lt;code&gt;printf(3)&lt;/code&gt;&lt;/a&gt;
(the arguments are all passed to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count: %d&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count:&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@since&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;v0.1.100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;is even`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;代わりに、自然とコードが少なくなるような言語とパターンを好むべきだと主張します。&lt;/p&gt;
&lt;h2 id=&quot;Yes-I&#39;m-talking-about-Svelte&quot;&gt;&lt;span&gt;はい、Svelteについて話しています&lt;/span&gt;&lt;a href=&quot;#Yes-I&#39;m-talking-about-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;書かなければいけないコードの量を減らすことは、Svelteの明確な目標です。説明のために、React、Vue、Svelteでそれぞれ実装されたシンプルなコンポーネントを見てみましょう。まずはSvelteのバージョンです:&lt;/p&gt;
&lt;div class=&quot;max&quot;&gt;
	&lt;iframe
		title=&quot;Simple component example&quot;
		src=&quot;/repl/blog-write-less-code/embed?version=3&quot;
		scrolling=&quot;no&quot;
	&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;これをReactで構築するには？　おそらく次のようになるでしょう:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;React&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;React&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;useState&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;useState&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;react&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;setA&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;setA&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;useState&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;useState&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;setB&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;setB&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;useState&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;useState&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(local function)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;handleChangeA&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;handleChangeA&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;setA&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;setA&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(local function)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;handleChangeB&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;handleChangeB&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;setB&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;setB&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;number&quot;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;value&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;onChange&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(local function)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;handleChangeA&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;handleChangeA&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;} /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;number&quot;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;value&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;onChange&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;onChange&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(local function)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;handleChangeB&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;handleChangeB&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;} /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;				&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;} + {&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;} = {&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;a&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vueで同等のことをやると次のようになります:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;number&quot;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;v-model&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;input&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;number&quot;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;v-model&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;{{a}} + {{b}} = {{a + b}}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;template&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;				&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;				&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;aside&gt;
	&lt;p&gt;コードをクリップボードにコピーし、ターミナルで `pbpaste | wc -c` を実行してカウントします&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;つまり、Svelteだと145文字でできることが、Reactだと442文字、Vueだと263文字かかります。Reactバージョンは文字通り3倍大きいです！&lt;/p&gt;
&lt;p&gt;ここまで差がつくのは中々珍しいケースです - 私の経験では、ReactコンポーネントはSvelteの同等のコンポーネントより大体約40%ほど大きいです。では、アイデアを簡潔に表現することを可能にするSvelteの設計の特徴を見ていきましょう。&lt;/p&gt;
&lt;h3 id=&quot;Yes-I&#39;m-talking-about-Svelte-(Top-level-elements)&quot;&gt;&lt;span&gt;トップレベル要素(Top-level elements)&lt;/span&gt;&lt;a href=&quot;#Yes-I&#39;m-talking-about-Svelte-(Top-level-elements)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Svelteでは、1つのコンポーネントに好きなだけトップレベル要素を含めることができます。ReactやVueは、1つのコンポーネントには単一のトップレベル要素しか含めることができません - Reactの場合、コンポーネント関数から2つのトップレベル要素を返そうとすると構文的に誤ったコードになります。(&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; の代わりに &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;を使用できますが、基本的な考え方は同じで、インデントが余分に発生します)&lt;/p&gt;
&lt;p&gt;Vueの場合、&lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt;要素でラップしなければなりません、これは冗長です。&lt;/p&gt;
&lt;h3 id=&quot;Yes-I&#39;m-talking-about-Svelte-(Bindings)&quot;&gt;&lt;span&gt;バインディング(Bindings)&lt;/span&gt;&lt;a href=&quot;#Yes-I&#39;m-talking-about-Svelte-(Bindings)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Reactでは、自分で入力イベントに対応しなければなりません。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;handleChangeA&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;handleChangeA&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;setA&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;event&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これは退屈で画面上に余分なスペースを取るだけでなく、余分なバグを生みかねません。概念的には、入力の値は &lt;code&gt;a&lt;/code&gt; の値と結びついており、その逆も同様ですが、この関係が綺麗に表現されていません - その代わり、緊密に結合しているものの物理的には分離しているコードのチャンク(イベントハンドラと &lt;code&gt;value={a}&lt;/code&gt; prop) になります。それだけでなく、&lt;code&gt;+&lt;/code&gt; 演算子で文字列の値が強制(coerce)されることも忘れないようにしないといけません( &lt;em&gt;訳注 : JavaScriptでは暗黙的に型が変換されるケースがあります。詳しくは &lt;a href=&quot;https://developer.mozilla.org/ja/docs/Glossary/Type_coercion&quot;&gt;Type coercion (型強制) - MDN Web Docs&lt;/a&gt; をご参照ください&lt;/em&gt; )。さもないと、&lt;code&gt;2 + 2&lt;/code&gt; が &lt;code&gt;4&lt;/code&gt; ではなく &lt;code&gt;22&lt;/code&gt; になってしまいます。&lt;/p&gt;
&lt;p&gt;Svelteと同様、Vueにはバインディングを表現する方法があります - &lt;code&gt;v-model&lt;/code&gt;属性です。ただし、数値入力であっても &lt;code&gt;v-model.number&lt;/code&gt; を使うように気をつけなければなりません。&lt;/p&gt;
&lt;h3 id=&quot;Yes-I&#39;m-talking-about-Svelte-State&quot;&gt;&lt;span&gt;State&lt;/span&gt;&lt;a href=&quot;#Yes-I&#39;m-talking-about-Svelte-State&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Svelteでは、ローカルコンポーネントのstateを代入演算子で更新します。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;increment&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;number&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reactでは、&lt;code&gt;useState&lt;/code&gt;フックを使用します。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;setCount&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;setCount&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;increment&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;increment&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;setCount&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;setCount&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;count&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これは &lt;em&gt;かなりノイジー(much noisier)&lt;/em&gt; です。全く同じ概念を表現していますが文字が60%も多いです。コードを読む際に、その意図を理解するためにより多くの労力をかける必要があります。&lt;/p&gt;
&lt;p&gt;一方Vueでは、デフォルトのエクスポートに &lt;code&gt;data&lt;/code&gt;関数があり、ローカルのstateに対応するプロパティを持つオブジェクトリテラルを返します。ヘルパー関数や子コンポーネントなどは単純にインポートしてテンプレートで使用することはできません、デフォルトのエクスポートの正しい部分にアタッチして&amp;rsquo;登録&amp;rsquo;する必要があります。&lt;/p&gt;
&lt;h2 id=&quot;(Death-to-boilerplate)&quot;&gt;&lt;span&gt;ボイラープレートに終焉を(Death to boilerplate)&lt;/span&gt;&lt;a href=&quot;#(Death-to-boilerplate)&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;これらは、最小限の手間でユーザーインタフェースを構築するのにSvelteが役立つことの、ほんの一部に過ぎません。他には、例えば&lt;a href=&quot;/tutorial/reactive-declarations&quot;&gt;reactive declarations&lt;/a&gt; はReactの&lt;code&gt;useMemo&lt;/code&gt;、&lt;code&gt;useCallback&lt;/code&gt;、&lt;code&gt;useEffect&lt;/code&gt;にあたる動作をボイラープレート(あるいは、stateが変化するたびにインライン関数と配列を作成するのに伴うガベージコレクションのオーバーヘッド)なしで本質的に行います。&lt;/p&gt;
&lt;p&gt;どうやって？別の制約セットを選択します。&lt;a href=&quot;/blog/frameworks-without-the-framework&quot;&gt;Svelteはコンパイラ&lt;/a&gt;なので、JavaScriptの特性に縛られません : 言語のセマンティクスに合わせるのではなく、コンポーネントのオーサリングエクスペリエンスを設計できます。逆説的に言えば、結果としてよりイディオムなコードが可能になります - 例えば、プロキシやフックを経由するのではなく、自然に変数を使用することができます - しかも、よりパフォーマンスの高いアプリを提供することができます。&lt;/p&gt;</description><pubDate>Sat, 20 Apr 2019 00:00:00 GMT</pubDate></item><item><title>Svelte for new developers</title><link>https://svelte.dev/blog/svelte-for-new-developers</link><author>Rich Harris</author><description>&lt;p&gt;This short guide is designed to help you — someone who has looked at the &lt;a href=&quot;/tutorial&quot;&gt;tutorial&lt;/a&gt; and wants to start creating Svelte apps, but doesn&amp;rsquo;t have a ton of experience using JavaScript build tooling — get up and running.&lt;/p&gt;
&lt;p&gt;If there are things that don&amp;rsquo;t make sense, or that we&amp;rsquo;re glossing over, feel free to &lt;a href=&quot;https://github.com/sveltejs/svelte/issues&quot;&gt;raise an issue&lt;/a&gt; or &lt;a href=&quot;https://github.com/sveltejs/svelte/blob/master/site/content/blog/2019-04-16-svelte-for-new-developers.md&quot;&gt;suggest edits to this page&lt;/a&gt; that will help us help more people.&lt;/p&gt;
&lt;p&gt;If you get stuck at any point following this guide, the best place to ask for help is in the &lt;a href=&quot;/chat&quot;&gt;chatroom&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;First-things-first&quot;&gt;&lt;span&gt;First things first&lt;/span&gt;&lt;a href=&quot;#First-things-first&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;You&amp;rsquo;ll be using the &lt;em&gt;command line&lt;/em&gt;, also known as the terminal. On Windows, you can access it by running &lt;strong&gt;Command Prompt&lt;/strong&gt; from the Start menu; on a Mac, hit &lt;code&gt;Cmd&lt;/code&gt; and &lt;code&gt;Space&lt;/code&gt; together to bring up &lt;strong&gt;Spotlight&lt;/strong&gt;, then start typing &lt;code&gt;Terminal.app&lt;/code&gt;. On most Linux systems, &lt;code&gt;Ctrl-Alt-T&lt;/code&gt; brings up the command line.&lt;/p&gt;
&lt;p&gt;The command line is a way to interact with your computer (or another computer! but that&amp;rsquo;s a topic for another time) with more power and control than the GUI (graphical user interface) that most people use day-to-day.&lt;/p&gt;
&lt;p&gt;Once on the command line, you can navigate the filesystem using &lt;code&gt;ls&lt;/code&gt; (&lt;code&gt;dir&lt;/code&gt; on Windows) to list the contents of your current directory, and &lt;code&gt;cd&lt;/code&gt; to change the current directory. For example, if you had a &lt;code&gt;Development&lt;/code&gt; directory of your projects inside your home directory, you would type&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;Development&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;to go to it. From there, you could create a new project directory with the &lt;code&gt;mkdir&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;mkdir&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte-projects&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte-projects&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A full introduction to the command line is out of the scope of this guide, but here are a few more useful commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cd ..&lt;/code&gt; — navigates to the parent of the current directory&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cat my-file.txt&lt;/code&gt; — on Mac/Linux (&lt;code&gt;type my-file.txt&lt;/code&gt; on Windows), lists the contents of &lt;code&gt;my-file.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;open .&lt;/code&gt; (or &lt;code&gt;start .&lt;/code&gt; on Windows) — opens the current directory in Finder or File Explorer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Installing-Node.js&quot;&gt;&lt;span&gt;Installing Node.js&lt;/span&gt;&lt;a href=&quot;#Installing-Node.js&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://nodejs.org/en/&quot;&gt;Node&lt;/a&gt; is a way to run JavaScript on the command line. It&amp;rsquo;s used by many tools, including Svelte. If you don&amp;rsquo;t yet have it installed, the easiest way is to download the latest version straight from the &lt;a href=&quot;https://nodejs.org/en/&quot;&gt;website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once installed, you&amp;rsquo;ll have access to three new commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;node my-file.js&lt;/code&gt; — runs the JavaScript in &lt;code&gt;my-file.js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm [subcommand]&lt;/code&gt; — &lt;a href=&quot;https://www.npmjs.com/&quot;&gt;npm&lt;/a&gt; is a way to install &amp;lsquo;packages&amp;rsquo; that your application depends on, such as the &lt;a href=&quot;https://www.npmjs.com/package/svelte&quot;&gt;svelte&lt;/a&gt; package&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npx [subcommand]&lt;/code&gt; — a convenient way to run programs available on npm without permanently installing them&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Installing-a-text-editor&quot;&gt;&lt;span&gt;Installing a text editor&lt;/span&gt;&lt;a href=&quot;#Installing-a-text-editor&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To write code, you need a good editor. The most popular choice is &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt; or VSCode, and justifiably so — it&amp;rsquo;s well-designed and fully-featured, and has a wealth of extensions (&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode&quot;&gt;including one for Svelte&lt;/a&gt;, which provides syntax highlighting and diagnostic messages when you&amp;rsquo;re writing components).&lt;/p&gt;
&lt;h2 id=&quot;Creating-a-project&quot;&gt;&lt;span&gt;Creating a project&lt;/span&gt;&lt;a href=&quot;#Creating-a-project&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;We&amp;rsquo;re going to use the &lt;a href=&quot;https://github.com/vitejs/vite/tree/main/packages/create-vite/template-svelte&quot;&gt;Svelte + Vite&lt;/a&gt; template. You don&amp;rsquo;t have to use a project template, but it means you have to do a lot less setup work.&lt;/p&gt;
&lt;p&gt;On the command line, navigate to where you want to create a new project, then type the following lines (you can paste the whole lot, but you&amp;rsquo;ll develop better muscle memory if you get into the habit of writing each line out one at a time then running it):&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;create&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;vite@latest&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;my-svelte-project&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;--&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;--template&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;my-svelte-project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;You can replace &lt;code&gt;--template svelte&lt;/code&gt; with &lt;code&gt;--template svelte-ts&lt;/code&gt;, if you prefer TypeScript.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;This creates a new directory, &lt;code&gt;my-svelte-project&lt;/code&gt;, adds files from the &lt;a href=&quot;https://github.com/vitejs/vite/tree/main/packages/create-vite/template-svelte&quot;&gt;create-vite/template-svelte&lt;/a&gt; template, and installs a number of packages from npm. Open the directory in your text editor and take a look around. The app&amp;rsquo;s &amp;lsquo;source code&amp;rsquo; lives in the &lt;code&gt;src&lt;/code&gt; directory, while the files your app can load are in &lt;code&gt;public&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the &lt;code&gt;package.json&lt;/code&gt; file, there is a section called &lt;code&gt;&amp;quot;scripts&amp;quot;&lt;/code&gt;. These scripts define shortcuts for working with your application — &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt; and &lt;code&gt;preview&lt;/code&gt;. To launch your app in development mode, type the following:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;run&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Running the &lt;code&gt;dev&lt;/code&gt; script starts a program called &lt;a href=&quot;https://vitejs.dev/&quot;&gt;Vite&lt;/a&gt;. Vite&amp;rsquo;s job is to take your application&amp;rsquo;s source files, pass them to other programs (including Svelte, in our case) and convert them into the code that will actually run when you open the application in a browser.&lt;/p&gt;
&lt;p&gt;Speaking of which, open a browser and navigate to &lt;a href=&quot;http://localhost:5173&quot;&gt;http://localhost:5173&lt;/a&gt;. This is your application running on a local &lt;em&gt;web server&lt;/em&gt; (hence &amp;lsquo;localhost&amp;rsquo;) on port 5173.&lt;/p&gt;
&lt;p&gt;Try changing &lt;code&gt;src/App.svelte&lt;/code&gt; and saving it. The application will update with your changes.&lt;/p&gt;
&lt;h2 id=&quot;Building-your-app&quot;&gt;&lt;span&gt;Building your app&lt;/span&gt;&lt;a href=&quot;#Building-your-app&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In the last step, we were running the app in &amp;lsquo;development mode&amp;rsquo;. In dev mode, Svelte adds extra code that helps with debugging, and Vite skips the final step where your app&amp;rsquo;s JavaScript is compressed.&lt;/p&gt;
&lt;p&gt;When you share your app with the world, you want to build it in &amp;lsquo;production mode&amp;rsquo;, so that it&amp;rsquo;s as small and efficient as possible for end users. To do that, use the &lt;code&gt;build&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;run&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;build&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Your &lt;code&gt;dist&lt;/code&gt; directory now contains an optimised version of your app. You can run it like so:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npm&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;run&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;preview&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Tue, 16 Apr 2019 00:00:00 GMT</pubDate></item><item><title>Svelte on The Changelog</title><link>https://svelte.dev/blog/svelte-on-the-changelog</link><author>Rich Harris</author><description>&lt;p&gt;Earlier this month, I had the privilege of appearing on &lt;a href=&quot;https://changelog.com/podcast&quot;&gt;The Changelog&lt;/a&gt;, a podcast about software development. We had a fun (for me) and wide-ranging conversation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;life as a coder inside a newsroom&lt;/li&gt;
&lt;li&gt;the big compilers-as-frameworks trend&lt;/li&gt;
&lt;li&gt;scalability&lt;/li&gt;
&lt;li&gt;the &lt;a href=&quot;https://css-tricks.com/the-great-divide/&quot;&gt;Great Divide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;...and, most importantly, Svelte 3.&lt;/p&gt;
&lt;p&gt;Unless you hang out in our &lt;a href=&quot;/chat&quot;&gt;Discord server&lt;/a&gt; or follow &lt;a href=&quot;https://bsky.app/profile/svelte.dev&quot;&gt;@sveltejs&lt;/a&gt; on BlueSky, you might not know that Svelte 3 is just around the corner, and it&amp;rsquo;s going to be a huge release. We&amp;rsquo;ve rethought the developer experience from the ground up, and while it &lt;em&gt;will&lt;/em&gt; be a nuisance if you need to upgrade a Svelte 2 app (more on that soon) we think you&amp;rsquo;re going to love it.&lt;/p&gt;
&lt;p&gt;On the podcast &lt;a href=&quot;https://bsky.app/profile/adamstac.bsky.social&quot;&gt;Adam&lt;/a&gt;, &lt;a href=&quot;https://bsky.app/profile/jerod.bsky.social&quot;&gt;Jerod&lt;/a&gt; and I talk about some of the changes and why we&amp;rsquo;re making them. You can listen here or on the &lt;a href=&quot;https://changelog.com/podcast/332&quot;&gt;podcast page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;audio data-theme=&quot;night&quot; style=&quot;width: 100%&quot; data-src=&quot;https://changelog.com/podcast/332/embed&quot; src=&quot;https://cdn.changelog.com/uploads/podcast/332/the-changelog-332.mp3&quot; preload=&quot;none&quot; class=&quot;changelog-episode&quot; controls&gt;&lt;/audio&gt;&lt;p&gt;&lt;a href=&quot;https://changelog.com/podcast/332&quot;&gt;The Changelog 332: A UI framework without the framework&lt;/a&gt; – Listen on &lt;a href=&quot;https://changelog.com/&quot;&gt;Changelog.com&lt;/a&gt;&lt;/p&gt;&lt;script async src=&quot;//cdn.changelog.com/embed.js&quot;&gt;&lt;/script&gt;&lt;/p&gt;</description><pubDate>Thu, 31 Jan 2019 00:00:00 GMT</pubDate></item><item><title>仮想DOMは純粋なオーバーヘッド(Virtual DOM is pure overhead)</title><link>https://svelte.dev/blog/virtual-dom-is-pure-overhead</link><author>Rich Harris</author><description>&lt;p&gt;ここ数年でJavaScriptフレームワークを使ったことがある人なら、&amp;rsquo;仮想DOMは速い&amp;rsquo; というフレーズを聞いたことがあるでしょう、これはしばしば、実際のDOMよりも速い、という意味で言われることがあります。これは驚くほどしぶといミームです — 例えば、どうやってSvelteは仮想DOMを使わずに高速にできるのかを尋ねられることがありました。&lt;/p&gt;
&lt;p&gt;では、じっくり見ていきましょう。&lt;/p&gt;
&lt;h2 id=&quot;What-is-the-virtual-DOM&quot;&gt;&lt;span&gt;仮想DOMとは？&lt;/span&gt;&lt;a href=&quot;#What-is-the-virtual-DOM&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;多くのフレームワークで、&lt;code&gt;render()&lt;/code&gt;関数を作ってアプリを構築します。例えばシンプルな &lt;a href=&quot;https://reactjs.org/&quot;&gt;React&lt;/a&gt; コンポーネントでは:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;HelloMessage&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;HelloMessage&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;props&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;className&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;className&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&quot;greeting&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;Hello {&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;props&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;JSXを使わずに同じことをするなら…&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;HelloMessage&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;HelloMessage&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;props&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;React&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;createElement&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;div&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;className&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;string&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;className&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;greeting&#39;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Hello &#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;props&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;…しかし、結果は同じで — ページがどのように見えるかを表現するオブジェクトになります。このオブジェクトは仮想DOMです。アプリのstateが更新されるたびに(例えば &lt;code&gt;name&lt;/code&gt; prop が変わったとき)、これが新たに作成されます。フレームワークの仕事は、新しいオブジェクトと古いオブジェクトを &lt;em&gt;調整&lt;/em&gt; し、どのような変更が必要か把握して、実際のDOMにそれを適用することです。&lt;/p&gt;
&lt;h2 id=&quot;How-did-the-meme-start&quot;&gt;&lt;span&gt;このミームはどう始まった？&lt;/span&gt;&lt;a href=&quot;#How-did-the-meme-start&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;仮想DOMのパフォーマンスに関する誤解された主張は、Reactの立ち上げまで遡ります。元ReactコアチームメンバーのPete Hunt氏による2013年の発展的な講演 &lt;a href=&quot;https://www.youtube.com/watch?v=x7cQ3mrcKaY&quot;&gt;Rethinking Best Practices&lt;/a&gt; で、私たちは次のことを学びました。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;これは実際には非常に高速で、主な理由は、ほとんどのDOM操作は遅くなる傾向があるからです。DOMには多くのパフォーマンス作業がありますが、ほとんどのDOM操作はフレームをドロップする傾向があります。&lt;br&gt;※原文 : This is actually extremely fast, primarily because most DOM operations tend to be slow. There&amp;rsquo;s been a lot of performance work on the DOM, but most DOM operations tend to drop frames.&lt;/p&gt;
&lt;/blockquote&gt;&lt;figure&gt;
	&lt;img alt=&quot;Pete Hunt at JSConfEU 2013&quot; src=&quot;/media/rethinking-best-practices.jpg&quot;&gt;
	&lt;figcaption&gt;Screenshot from &lt;a href=&quot;https://www.youtube.com/watch?v=x7cQ3mrcKaY&quot;&gt;Rethinking Best Practices&lt;/a&gt; at JSConfEU 2013&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;しかし、ちょっと待ってください！　仮想DOMの操作は、実際のDOMに対する最終的な操作に &lt;em&gt;加えて&lt;/em&gt; 行われます。これを高速だと主張するには、より非効率なフレームワークと比較するか(2013年にはたくさんありました)、もしくは、実際には誰もやらないような架空の代替案に対して反論するしかありません。&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;onEveryStateChange&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Document&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Window/document&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;document&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Document&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.body: HTMLElement&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Specifies the beginning and end of the document body.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Document/body&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;body&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Element&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.innerHTML: string&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/docs/Web/API/Element/innerHTML&quot;&gt;MDN Reference&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/span&gt;innerHTML&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;renderMyApp&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Peteはすぐ後に明確にしました…&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Reactは魔法ではありません。C言語でアセンブラを使用してCコンパイラに勝つことができるのと同様に、必要に応じて生のDOMとDOM APIを使えばReactに勝つことができます。しかし、C や Java、JavaScript を使うと、プラットフォームの詳細について心配する必要がなくなるため、パフォーマンスが桁違いに向上します。Reactを使うことで、パフォーマンスを気にすることなくアプリケーションを構築することができますし、デフォルトの state は高速です。&lt;br&gt;※原文 : React is not magic. Just like you can drop into assembler with C and beat the C compiler, you can drop into raw DOM operations and DOM API calls and beat React if you wanted to. However, using C or Java or JavaScript is an order of magnitude performance improvement because you don&amp;rsquo;t have to worry...about the specifics of the platform. With React you can build applications without even thinking about performance and the default state is fast.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;…しかし、それは行き詰まった部分ではありません。&lt;/p&gt;
&lt;h2 id=&quot;So-is-the-virtual-DOM-slow&quot;&gt;&lt;span&gt;それで…仮想DOMは遅い？&lt;/span&gt;&lt;a href=&quot;#So-is-the-virtual-DOM-slow&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;その表現は正しくありません。&amp;rsquo;仮想DOMは大抵、十分に速い&amp;rsquo;というほうがより近いですが、いくつかの注意点があります。&lt;/p&gt;
&lt;p&gt;Reactの当初の約束は、パフォーマンスを心配することなく、state が1つ変更されるたびにアプリ全体を再レンダリングできる、というものでした。実際には、それは正確ではないと思います。もしそうなら、&lt;code&gt;shouldComponentUpdate&lt;/code&gt; (コンポーネントを安全にスキップできるときにReactに伝える方法) のような最適化は必要ないはずです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;shouldComponentUpdate&lt;/code&gt; を使ったとしても、アプリ全体の仮想DOMを一度に更新するのは大変な作業です。しばらく前に、ReactチームはReact Fiberと呼ばれるものを導入し、更新をより小さなチャンクに分割できるようになりました。これは (とりわけ) 更新によってメインスレッドが長時間ブロックされないことを意味しますが、総作業量や更新にかかる時間が減るわけではありません。&lt;/p&gt;
&lt;h2 id=&quot;Where-does-the-overhead-come-from&quot;&gt;&lt;span&gt;オーバーヘッドはどこから？&lt;/span&gt;&lt;a href=&quot;#Where-does-the-overhead-come-from&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ほぼ間違いなく、&lt;a href=&quot;https://twitter.com/pcwalton/status/1015694528857047040&quot;&gt;差分検出のコストはゼロではありません&lt;/a&gt;(原文 : diffing isn&amp;rsquo;t free)。まず仮想DOMとその直前のスナップショットの比較をしないと、変更を実際のDOMに適用できません。先ほどの &lt;code&gt;HelloMessage&lt;/code&gt; の例で言えば、&lt;code&gt;name&lt;/code&gt; propが &amp;lsquo;world&amp;rsquo; から &amp;lsquo;everybody&amp;rsquo; に変わったとします。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;どちらのスナップショットにも単一の要素が含まれています。どちらの場合もそれは &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; であり、同じ DOM ノードを維持できることを意味します。&lt;/li&gt;
&lt;li&gt;古い &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; と新しい &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; のすべての属性を列挙して、変更、追加、削除する必要があるか調べます。どちらも、値が &lt;code&gt;&amp;quot;greeting&amp;quot;&lt;/code&gt; の &lt;code&gt;className&lt;/code&gt; 属性だけがあります。&lt;/li&gt;
&lt;li&gt;要素に降りていくと、テキストが変更されていることがわかるので、実際のDOMを更新する必要があります。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この3つのステップのうち、今回のケースでは3番目のステップだけが価値を持ちます、というのも — ほとんどの更新がそうであるように — アプリの基本構造は変わっていないからです。3番目のステップに直接進むことができれば、より効率的です:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;span class=&quot;twoslash-popup-docs-tag&quot;&gt;&lt;span class=&quot;twoslash-popup-docs-tag-name&quot;&gt;@deprecated&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(これはSvelteが生成する更新のコードとほぼ同じです。従来のUIフレームワークとは異なり、Svelteは、 &lt;em&gt;実行時&lt;/em&gt; にこの作業をするのを待つのではなく、どのように変更されるか &lt;em&gt;ビルド時&lt;/em&gt; にわかるコンパイラです)&lt;/p&gt;
&lt;h2 id=&quot;It&#39;s-not-just-the-diffing-though&quot;&gt;&lt;span&gt;差分検出だけではありません&lt;/span&gt;&lt;a href=&quot;#It&#39;s-not-just-the-diffing-though&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Reactや他の仮想DOMフレームワークで使われている差分検出アルゴリズムは高速です。議論の余地はありますが、より大きなオーバーヘッドはコンポーネント自体にあります。こんなコードは普通書かないと思います…&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;StrawManComponent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;StrawManComponent&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;props&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;value&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;expensivelyCalculateValue&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;props&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;the value is {&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;value&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;…なぜなら、&lt;code&gt;props.foo&lt;/code&gt; が変更されたかどうかに関わらず、更新のたびに不注意に &lt;code&gt;value&lt;/code&gt; を再計算してしまうからです。しかし、もっと無害に見える方法で、不必要な計算やアロケーションが行われてしまうことは非常に一般的です:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;MoreRealisticComponent&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;MoreRealisticComponent&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;props&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;selected&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;selected&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;setSelected&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;setSelected&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;]&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;useState&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;Selected {&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;selected&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;selected&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;selected&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;selected&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;nothing&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;				&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;props&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;props&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;items&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;item&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;					&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;						&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;onClick&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;onClick&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{()&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;setSelected&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;setSelected&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;item&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)}&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;item&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;item&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;					&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;				&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;))}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここでは、&lt;code&gt;props.items&lt;/code&gt; が変化したかどうかに関わらず、仮想的な &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; 要素の新しい配列（それぞれがインラインのイベントハンドラを持つ）をそれぞれの状態が変化するたびに生成しています。よっぽどパフォーマンスにこだわっていない限り、これを最適化することはないでしょう。意味がありません。これで十分に速いのですから。しかし、さらに速い方法がわかりますか？ &lt;em&gt;こうしないことです&lt;/em&gt; 。&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;&lt;a href=&quot;https://reactjs.org/docs/hooks-intro.html&quot;&gt;React Hooks&lt;/a&gt;は不必要な作業をデフォルトにするという賭けに出て、&lt;a href=&quot;https://twitter.com/thekitze/status/1078582382201131008&quot;&gt;予想通りの結果&lt;/a&gt;になりました。&lt;/p&gt;&lt;/aside&gt;

&lt;p&gt;デフォルトで不必要な作業を行うことは危険で、たとえその作業が些細なものであっても、最適化の際に明確なボトルネックがないためにアプリがやがて &amp;lsquo;じわじわと破滅に向かう&amp;rsquo;(原文 : death by a thousand cuts)ことに屈してしまいます。&lt;/p&gt;
&lt;p&gt;Svelteは、そのような状況に陥らないよう明示的に設計されています。&lt;/p&gt;
&lt;h2 id=&quot;Why-do-frameworks-use-the-virtual-DOM-then&quot;&gt;&lt;span&gt;では、なぜフレームワークは仮想DOMを使うのか？&lt;/span&gt;&lt;a href=&quot;#Why-do-frameworks-use-the-virtual-DOM-then&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;重要なのは、仮想DOMは &lt;em&gt;機能ではない&lt;/em&gt; ということです。それは目的を達成するための手段であり、その目的とは宣言的で状態駆動型のUI開発です。仮想DOMは、状態遷移を考えることなくアプリケーションを開発できるようにし、 &lt;em&gt;一般的には十分な&lt;/em&gt; パフォーマンスを得られるという点で価値があります。つまり、バグを減らし、退屈な作業ではなく創造的な作業に多くの時間を費やすことができるようになります。&lt;/p&gt;
&lt;p&gt;しかし、仮想DOMを使用せずに同様のプログラミングモデルを実現できることがわかりました — つまりSvelteの登場です。&lt;/p&gt;</description><pubDate>Thu, 27 Dec 2018 00:00:00 GMT</pubDate></item><item><title>Using CSS-in-JS with Svelte</title><link>https://svelte.dev/blog/svelte-css-in-js</link><author>Rich Harris</author><description>&lt;p&gt;CSS is a core part of any web app. By extension, a UI framework that doesn&amp;rsquo;t have a built-in way to add styles to your components is unfinished.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s why Svelte allows you to add CSS in a component&amp;rsquo;s &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tag. Co-locating your CSS with your markup means we can &lt;a href=&quot;/blog/the-zen-of-just-writing-css&quot;&gt;solve the biggest problems developers face when writing CSS&lt;/a&gt; without introducing new ones, all while providing a rather nice development experience.&lt;/p&gt;
&lt;p&gt;But Svelte&amp;rsquo;s style handling does have some limitations. It&amp;rsquo;s too difficult to share styles between components, or apply app-level optimisations. These are areas we plan to address in future versions, but in the meantime if you need those things you can use any framework-agnostic CSS-in-JS library.&lt;/p&gt;
&lt;h2 id=&quot;For-example&quot;&gt;&lt;span&gt;For example&lt;/span&gt;&lt;a href=&quot;#For-example&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Here, we&amp;rsquo;re using &lt;a href=&quot;https://emotion.sh&quot;&gt;Emotion&lt;/a&gt; to generate scoped class names that can be used across multiple components:&lt;/p&gt;
&lt;div class=&quot;max&quot;&gt;
	&lt;iframe
		title=&quot;Aphrodite example&quot;
		src=&quot;/repl/embed?example=blog-svelte-css-in-js&quot;
		scrolling=&quot;no&quot;
	&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;It&amp;rsquo;s important to note that most CSS-in-JS libraries have a runtime library, and many don&amp;rsquo;t support statically extracting styles out into a separate &lt;code&gt;.css&lt;/code&gt; file at build time (which is essential for the best performance). You should therefore only use CSS-in-JS if it&amp;rsquo;s necessary for your application!&lt;/p&gt;
&lt;p&gt;Note that you can mix-and-match — you can still use Svelte&amp;rsquo;s built-in CSS handling alongside a CSS-in-JS library.&lt;/p&gt;</description><pubDate>Wed, 26 Dec 2018 00:00:00 GMT</pubDate></item><item><title>Svelte v2 is out!</title><link>https://svelte.dev/blog/version-2</link><author>Rich Harris</author><description>&lt;aside&gt;Our motto is &#39;move slowly and break things&#39;. No, wait, that came out wrong...&lt;/aside&gt;

&lt;p&gt;Almost a year after we first started talking about version 2 on the Svelte issue tracker, it&amp;rsquo;s finally time to make some breaking changes. This blog post will explain what changed, why it changed, and what you need to do to bring your apps up to date.&lt;/p&gt;
&lt;h2 id=&quot;tl-dr&quot;&gt;&lt;span&gt;tl;dr&lt;/span&gt;&lt;a href=&quot;#tl-dr&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Each of these items is described in more depth below. If you get stuck, ask for help in our friendly &lt;a href=&quot;/chat&quot;&gt;Discord chatroom&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install Svelte v2 from npm&lt;/li&gt;
&lt;li&gt;Upgrade your templates with &lt;a href=&quot;https://github.com/sveltejs/svelte-upgrade&quot;&gt;svelte-upgrade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Remove calls to &lt;code&gt;component.observe&lt;/code&gt;, or add the &lt;code&gt;observe&lt;/code&gt; method from &lt;a href=&quot;https://github.com/sveltejs/svelte-extras&quot;&gt;svelte-extras&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rewrite calls to &lt;code&gt;component.get(&amp;#39;foo&amp;#39;)&lt;/code&gt; as &lt;code&gt;component.get().foo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Return &lt;code&gt;destroy&lt;/code&gt; from your custom event handlers, rather than &lt;code&gt;teardown&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Make sure you&amp;rsquo;re not passing numeric string props to components&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;New-template-syntax&quot;&gt;&lt;span&gt;New template syntax&lt;/span&gt;&lt;a href=&quot;#New-template-syntax&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The most visible change: we&amp;rsquo;ve made some improvements to the template syntax.&lt;/p&gt;
&lt;p&gt;A common piece of feedback we heard was &amp;lsquo;ewww, Mustache&amp;rsquo; or &amp;lsquo;ewww, Handlebars&amp;rsquo;. A lot of people who used string-based templating systems in a previous era of web development &lt;em&gt;really&lt;/em&gt; dislike them. Because Svelte adopted the &lt;code&gt;{{curlies}}&lt;/code&gt; from those languages, a lot of people assumed that we somehow shared the limitations of those tools, such as weird scoping rules or an inability to use arbitrary JavaScript expressions.&lt;/p&gt;
&lt;aside&gt;If you need to show an actual `{` character, it&#39;s as easy as `&amp;amp;#123;`&lt;/aside&gt;

&lt;p&gt;Beyond that, JSX proved that double curlies are unnecessary. So we&amp;rsquo;ve made our templates more... svelte, by adopting single curlies. The result feels much lighter to look at and is more pleasant to type:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;Hello {name}!&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There are a few other updates. But you don&amp;rsquo;t need to make them manually — just run &lt;a href=&quot;https://github.com/sveltejs/svelte-upgrade&quot;&gt;svelte-upgrade&lt;/a&gt; on your codebase:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;bash&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;npx&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;svelte-upgrade&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;v2&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string)&quot;&gt;src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This assumes any &lt;code&gt;.html&lt;/code&gt; files in &lt;code&gt;src&lt;/code&gt; are Svelte components. You can specify whichever directory you like, or target a different directory — for example, you&amp;rsquo;d do &lt;code&gt;npx svelte-upgrade v2 routes&lt;/code&gt; to update a &lt;a href=&quot;https://sapper.svelte.technology&quot;&gt;Sapper&lt;/a&gt; app.&lt;/p&gt;
&lt;p&gt;To see the full set of changes, consult the &lt;a href=&quot;https://github.com/sveltejs/svelte-upgrade#svelte-v2-syntax-changes&quot;&gt;svelte-upgrade README&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;Computed-properties&quot;&gt;&lt;span&gt;Computed properties&lt;/span&gt;&lt;a href=&quot;#Computed-properties&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Another thing that people often found confusing about Svelte is the way computed properties work. To recap, if you had a component with this...&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;computed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;computed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;d&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;c&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;a&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;b&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;c&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;...then Svelte would first look at the function arguments to see which values &lt;code&gt;d&lt;/code&gt; depended on, and then it would write code that updated &lt;code&gt;d&lt;/code&gt; whenever those values changed, by injecting them into the function. That&amp;rsquo;s cool, because it allows you to derive complex values from your component&amp;rsquo;s inputs without worrying about when they need to recomputed, but it&amp;rsquo;s also... &lt;em&gt;weird&lt;/em&gt;. JavaScript doesn&amp;rsquo;t work that way!&lt;/p&gt;
&lt;p&gt;In v2, we use &lt;a href=&quot;http://www.jstips.co/en/javascript/use-destructuring-in-function-parameters/&quot;&gt;destructuring&lt;/a&gt; instead:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;ts&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;computed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({ a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c }: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b: any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;        &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c: any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;computed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;d&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({ a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c }: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b: any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c: any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;d&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;c&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;a&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;b&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;c&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Svelte compiler can still see which values &lt;code&gt;d&lt;/code&gt; depends on, but it&amp;rsquo;s no longer injecting values — it just passes the component state object into each computed property.&lt;/p&gt;
&lt;p&gt;Again, you don&amp;rsquo;t need to make this change manually — just run svelte-upgrade on your components, as shown above.&lt;/p&gt;
&lt;h2 id=&quot;Sorry-IE11.-It&#39;s-not-you-it&#39;s-well-actually-yeah.-It&#39;s-you&quot;&gt;&lt;span&gt;Sorry, IE11. It&amp;rsquo;s not you, it&amp;rsquo;s... well actually, yeah. It&amp;rsquo;s you&lt;/span&gt;&lt;a href=&quot;#Sorry-IE11.-It&#39;s-not-you-it&#39;s-well-actually-yeah.-It&#39;s-you&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte v1 was careful to only emit ES5 code, so that you wouldn&amp;rsquo;t be forced to faff around with transpilers in order to use it. But it&amp;rsquo;s 2018 now, and almost all browsers support modern JavaScript. By ditching the ES5 constraint, we can generate leaner code.&lt;/p&gt;
&lt;p&gt;If you need to support IE11 and friends, you will need to use a transpiler like &lt;a href=&quot;https://babeljs.io/repl&quot;&gt;Babel&lt;/a&gt; or &lt;a href=&quot;https://buble.surge.sh/&quot;&gt;Bublé&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;New-lifecycle-hooks&quot;&gt;&lt;span&gt;New lifecycle hooks&lt;/span&gt;&lt;a href=&quot;#New-lifecycle-hooks&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In addition to &lt;code&gt;oncreate&lt;/code&gt; and &lt;code&gt;ondestroy&lt;/code&gt;, Svelte v2 adds two more &lt;a href=&quot;https://v2.svelte.dev/guide#lifecycle-hooks&quot;&gt;lifecycle hooks&lt;/a&gt; for responding to state changes:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;onstate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({ changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;previous }&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;previous&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;onstate&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;changed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;current&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;previous&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;previous&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// this fires before oncreate, and&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// whenever state changes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;onupdate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({ changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;previous }&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;previous&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;onupdate&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;changed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;current&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;previous&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;previous&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// this fires after oncreate, and&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// whenever the DOM has been updated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// following a state change&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also listen to those events programmatically:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;state&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;changed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;current&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;previous&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;previous&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;component.observe&quot;&gt;&lt;span&gt;component.observe&lt;/span&gt;&lt;a href=&quot;#component.observe&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;With the new lifecycle hooks, we no longer need the &lt;code&gt;component.observe(...)&lt;/code&gt; method:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// before&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;oncreate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;oncreate&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;observe&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;foo&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;foo&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Console&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;The &lt;code&gt;console&lt;/code&gt; module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.&lt;/p&gt;
&lt;p&gt;The module exports two specific components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Console&lt;/code&gt; class with methods such as &lt;code&gt;console.log()&lt;/code&gt;, &lt;code&gt;console.error()&lt;/code&gt; and &lt;code&gt;console.warn()&lt;/code&gt; that can be used to write to any Node.js stream.&lt;/li&gt;
&lt;li&gt;A global &lt;code&gt;console&lt;/code&gt; instance configured to write to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstdout&quot;&gt;&lt;code&gt;process.stdout&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstderr&quot;&gt;&lt;code&gt;process.stderr&lt;/code&gt;&lt;/a&gt;. The global &lt;code&gt;console&lt;/code&gt; can be used without importing the &lt;code&gt;node:console&lt;/code&gt; module.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;/em&gt;: The global console object&amp;rsquo;s methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#a-note-on-process-io&quot;&gt;&lt;code&gt;note on process I/O&lt;/code&gt;&lt;/a&gt; for
more information.&lt;/p&gt;
&lt;p&gt;Example using the global &lt;code&gt;console&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints error message and stack trace to stderr:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//   Error: Whoops, something bad happened&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]:5:15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Script.runInThisContext (node:vm:132:18)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Object.runInThisContext (node:vm:309:38)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/process/execution:77:19&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]-wrapper:6:22&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at evalScript (node:internal/process/execution:76:60)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/main/eval_string:23:3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to stderr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example using the &lt;code&gt;Console&lt;/code&gt; class:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(out&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;err);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: [Error: Whoops, something bad happened], to err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to err&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@see&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/v20.11.1/lib/console.js&quot;&gt;source&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;optionalParams: any[]):&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;overload)&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Prints to &lt;code&gt;stdout&lt;/code&gt; with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to &lt;a href=&quot;http://man7.org/linux/man-pages/man3/printf.3.html&quot;&gt;&lt;code&gt;printf(3)&lt;/code&gt;&lt;/a&gt;
(the arguments are all passed to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count: %d&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count:&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@since&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;v0.1.100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`foo is now&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;foo&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// after&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;onstate&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({ changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current }&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;})&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;onstate&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;({&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;changed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;current&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;changed&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;changed&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;			&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Console&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;The &lt;code&gt;console&lt;/code&gt; module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.&lt;/p&gt;
&lt;p&gt;The module exports two specific components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Console&lt;/code&gt; class with methods such as &lt;code&gt;console.log()&lt;/code&gt;, &lt;code&gt;console.error()&lt;/code&gt; and &lt;code&gt;console.warn()&lt;/code&gt; that can be used to write to any Node.js stream.&lt;/li&gt;
&lt;li&gt;A global &lt;code&gt;console&lt;/code&gt; instance configured to write to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstdout&quot;&gt;&lt;code&gt;process.stdout&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#processstderr&quot;&gt;&lt;code&gt;process.stderr&lt;/code&gt;&lt;/a&gt;. The global &lt;code&gt;console&lt;/code&gt; can be used without importing the &lt;code&gt;node:console&lt;/code&gt; module.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;/em&gt;: The global console object&amp;rsquo;s methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/process.html#a-note-on-process-io&quot;&gt;&lt;code&gt;note on process I/O&lt;/code&gt;&lt;/a&gt; for
more information.&lt;/p&gt;
&lt;p&gt;Example using the global &lt;code&gt;console&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints error message and stack trace to stderr:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//   Error: Whoops, something bad happened&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]:5:15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Script.runInThisContext (node:vm:132:18)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at Object.runInThisContext (node:vm:309:38)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/process/execution:77:19&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at [eval]-wrapper:6:22&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at evalScript (node:internal/process/execution:76:60)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;//     at node:internal/main/eval_string:23:3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to stderr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example using the &lt;code&gt;Console&lt;/code&gt; class:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;getStreamSomehow&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(out&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;err);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;hello %s&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;world&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: hello world, to out&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Whoops, something bad happened&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: [Error: Whoops, something bad happened], to err&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;name&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;Will Robinson&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;myConsole&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.warn&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`Danger&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;! Danger!`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: Danger Will Robinson! Danger!, to err&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@see&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;&lt;a href=&quot;https://github.com/nodejs/node/blob/v20.11.1/lib/console.js&quot;&gt;source&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;console&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(message&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;?:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;optionalParams: any[]):&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;overload)&lt;/span&gt;&lt;/code&gt;&lt;div class=&quot;twoslash-popup-docs&quot;&gt;&lt;p&gt;Prints to &lt;code&gt;stdout&lt;/code&gt; with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to &lt;a href=&quot;http://man7.org/linux/man-pages/man3/printf.3.html&quot;&gt;&lt;code&gt;printf(3)&lt;/code&gt;&lt;/a&gt;
(the arguments are all passed to &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;count&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count: %d&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.log&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;count:&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;count);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// Prints: count: 5, to stdout&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See &lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/util.html#utilformatformat-args&quot;&gt;&lt;code&gt;util.format()&lt;/code&gt;&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/div&gt;&lt;div class=&quot;twoslash-popup-docs twoslash-popup-docs-tags&quot;&gt;&lt;div class=&quot;tags&quot;&gt;&lt;span class=&quot;tag&quot;&gt;@since&lt;/span&gt;&lt;span class=&quot;value&quot;&gt;v0.1.100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;log&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`foo is now&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;current&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This shrinks the amount of code Svelte needs to generate, and gives you more flexibility. For example, it&amp;rsquo;s now very easy to take action when any one of &lt;em&gt;several&lt;/em&gt; properties have changed, such as redrawing a canvas without debouncing several observers.&lt;/p&gt;
&lt;p&gt;However, if you prefer to use &lt;code&gt;component.observe(...)&lt;/code&gt;, then you can install it from &lt;a href=&quot;https://github.com/sveltejs/svelte-extras&quot;&gt;svelte-extras&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;observe&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;observe&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;svelte-extras&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;export&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;default&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;pre class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;methods&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;    &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;observe&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/span&gt;methods&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;		&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;observe&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;observe&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;	&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;component.get&quot;&gt;&lt;span&gt;component.get&lt;/span&gt;&lt;a href=&quot;#component.get&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This method no longer takes an optional &lt;code&gt;key&lt;/code&gt; argument — instead, it always returns the entire state object:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// before&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;foo&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;foo&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;bar&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-string-expression)&quot;&gt;&#39;bar&#39;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-comment)&quot;&gt;// after&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;foo&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;bar&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;bar&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This change might seem annoying initially, but it&amp;rsquo;s the right move: among other things, it&amp;rsquo;s likely to play better with type systems as we explore that space more fully in future.&lt;/p&gt;
&lt;h2 id=&quot;event_handler.destroy&quot;&gt;&lt;span&gt;event_handler.destroy&lt;/span&gt;&lt;a href=&quot;#event_handler.destroy&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If your app has &lt;a href=&quot;https://v2.svelte.dev/guide#custom-event-handlers&quot;&gt;custom event handlers&lt;/a&gt;, they must return an object with a &lt;code&gt;destroy&lt;/code&gt; method, &lt;em&gt;not&lt;/em&gt; a &lt;code&gt;teardown&lt;/code&gt; method (this aligns event handlers with the component API).&lt;/p&gt;
&lt;h2 id=&quot;No-more-type-coercion&quot;&gt;&lt;span&gt;No more type coercion&lt;/span&gt;&lt;a href=&quot;#No-more-type-coercion&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Previously, numeric values passed to components were treated as numbers:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Counter&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&quot;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That causes unexpected behaviour, and has been changed: if you need to pass a literal number, do so as an expression:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;svelte&quot; class=&quot;shiki css-variables&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;Counter&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;} /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;Compiler-changes&quot;&gt;&lt;span&gt;Compiler changes&lt;/span&gt;&lt;a href=&quot;#Compiler-changes&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In most cases you&amp;rsquo;ll never need to deal with the compiler directly, so this shouldn&amp;rsquo;t require any action on your part. It&amp;rsquo;s worth noting anyway: the compiler API has changed. Instead of an object with a mish-mash of properties, the compiler now returns &lt;code&gt;js&lt;/code&gt;, &lt;code&gt;css&lt;/code&gt;, &lt;code&gt;ast&lt;/code&gt; and &lt;code&gt;stats&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;div class=&quot;controls&quot;&gt;&lt;button class=&quot;copy-to-clipboard raised&quot; title=&quot;Copy to clipboard&quot; aria-label=&quot;Copy to clipboard&quot;&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre data-language=&quot;js&quot; class=&quot;shiki css-variables twoslash lsp&quot; style=&quot;background-color:var(--shiki-background);color:var(--shiki-foreground)&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;js&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;js&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;css&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;css&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;ast&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;ast&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;span class=&quot;twoslash-hover&quot;&gt;&lt;span class=&quot;twoslash-popup-container&quot;&gt;&lt;code class=&quot;twoslash-popup-code&quot;&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;stats&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;any&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;stats&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-keyword)&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-constant)&quot;&gt;svelte&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-function)&quot;&gt;compile&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-token-punctuation)&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;options&lt;/span&gt;&lt;span style=&quot;color:var(--shiki-foreground)&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;js&lt;/code&gt; and &lt;code&gt;css&lt;/code&gt; are both &lt;code&gt;{ code, map }&lt;/code&gt; objects, where &lt;code&gt;code&lt;/code&gt; is a string and &lt;code&gt;map&lt;/code&gt; is a sourcemap. The &lt;code&gt;ast&lt;/code&gt; is an abstract syntax tree of your component, and the &lt;code&gt;stats&lt;/code&gt; object contains metadata about the component, and information about the compilation.&lt;/p&gt;
&lt;p&gt;Before, there was a &lt;code&gt;svelte.validate&lt;/code&gt; method which checked your component was valid. That&amp;rsquo;s been removed — if you want to check a component without actually compiling it, just pass the &lt;code&gt;generate: false&lt;/code&gt; option.&lt;/p&gt;
&lt;h2 id=&quot;My-app-is-broken-Help&quot;&gt;&lt;span&gt;My app is broken! Help!&lt;/span&gt;&lt;a href=&quot;#My-app-is-broken-Help&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Hopefully this covers everything, and the update should be easier for you than it was for us. But if you find bugs, or discover things that aren&amp;rsquo;t mentioned here, swing by &lt;a href=&quot;/chat&quot;&gt;Discord chatroom&lt;/a&gt; or raise an issue on the &lt;a href=&quot;https://github.com/sveltejs/svelte/issues&quot;&gt;tracker&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 18 Apr 2018 00:00:00 GMT</pubDate></item><item><title>Sapper: 理想の Web アプリケーションフレームワークを目指して</title><link>https://svelte.dev/blog/sapper-towards-the-ideal-web-app-framework</link><author>Rich Harris</author><description>&lt;blockquote&gt;&lt;p&gt;せっかちな人のためのクイックスタート: &lt;a href=&quot;https://sapper.svelte.dev&quot;&gt;Sapper のドキュメント&lt;/a&gt;、&lt;a href=&quot;https://github.com/sveltejs/sapper-template&quot;&gt;スターターテンプレート&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;もし完璧な Node.js の Web アプリケーションフレームワークの特徴を挙げるとしたら、次のようなものを思いつくでしょう:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;最初の読み込みの高速化や SEO 対策に支障をきたさないために、サーバーサイドレンダリングを行う&lt;/li&gt;
&lt;li&gt;当然の結果として、アプリケーションのコードベースは普遍的である — サーバーとクライアント &lt;em&gt;共通&lt;/em&gt; で1度だけコードを書く&lt;/li&gt;
&lt;li&gt;クライアントサイドのアプリは、サーバーでレンダリングされた HTML を再レンダリングすると言うより既存の要素にイベントリスナ（などなど）をアタッチして &lt;em&gt;ハイドレート&lt;/em&gt; する&lt;/li&gt;
&lt;li&gt;瞬時に次のページに移動できる&lt;/li&gt;
&lt;li&gt;オフラインや、その他のプログレッシブウェブアプリの特徴をすぐにサポートしている&lt;/li&gt;
&lt;li&gt;最初のページに必要な JavaScript と CSS のみが最初に読み込まれる。 つまり、フレームワークはルートレベルで自動的にコード分割を行い、より細かい手動制御のために動的な &lt;code&gt;import(...)&lt;/code&gt; をサポートしている&lt;/li&gt;
&lt;li&gt;パフォーマンスに妥協がない&lt;/li&gt;
&lt;li&gt;ホットモジュールリローディングやその他痒い所に手が届く様々な機能など、最高の開発環境を提供している&lt;/li&gt;
&lt;li&gt;出来上がったコードベースは、理解しやすくメンテナンス性が高い&lt;/li&gt;
&lt;li&gt;システムのあらゆる側面を理解し、カスタマイズをすることができる — webpack の設定をフレームワークの中に閉じ込めず、できるだけ隠された「配管」を少なくしている&lt;/li&gt;
&lt;li&gt;フレームワーク全体を1時間以内に学習することは、経験豊富な開発者でなくても簡単にできる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/zeit/next.js&quot;&gt;Next.js&lt;/a&gt; はこの理想に近いです。 もし Next.js に出会ったことがないなら、 &lt;a href=&quot;https://learnnextjs.com&quot;&gt;learnnextjs.com&lt;/a&gt; でチュートリアルを見てみることを強くおすすめします。 Next は素晴らしいアイディアをご紹介します: あなたのアプリケーションの全ページは &lt;code&gt;your-project/pages&lt;/code&gt; ディレクトリにあるファイルで、それらのファイルのそれぞれが React のコンポーネントです。&lt;/p&gt;
&lt;p&gt;それ以外のことについては、この画期的な設計の方針に基づいています。「コンポーネント名推測ゲーム」をして遊ぶわけではなくファイルシステムを見るだけでいいので、特定のページを受け持つコードを見つけるのは簡単です。 プロジェクトの構造のことで無駄に細かいことを考える必要がある時代は終わりました。 また、 SSR（サーバーサイドレンダリング）とコード分割の組み合わせは (React Router チームが「サーバーでレンダリングされ、コード分割されたアプリに挑戦する人たちに神の祝福あれ」と言って&lt;a href=&quot;https://reacttraining.com/react-router/web/guides/code-splitting&quot;&gt;断念した&lt;/a&gt;ものではありますが) 些細なことです。&lt;/p&gt;
&lt;p&gt;それでも、完璧なわけではありません。 &lt;em&gt;とても素晴らしいもの&lt;/em&gt; の粗探しをするのは無粋かもしれませんが、いくつか挙げられます:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Next は「ルートマスキング」と呼ばれる機能を使ってイケてる URL を生成します (例えば &lt;code&gt;/post?slug=hello-world&lt;/code&gt; の代わりに &lt;code&gt;/blog/hello-world&lt;/code&gt;)。 これは、アプリケーションの構造に対するディレクトリ構造の保証を損なうものであり、2つの構造の形式の間で変換する設定を維持する必要があります。&lt;/li&gt;
&lt;li&gt;全てのルーティングは普遍的な「ページ」であると想定されます。 しかしながら、 301 redirect やページにデータを提供する API エンドポイントのような、サーバーでのみレンダリングされるルーティングが必要になることは一般的にあることで、 Next はこれに関して良い解決策を持っていません。 こういったケースを処理するために &lt;code&gt;server.js&lt;/code&gt; ファイルにロジックを追加することはできますが、これはページの宣言的なアプローチに相反するものです。&lt;/li&gt;
&lt;li&gt;クライアントサイドのルーティングを利用する場合、リンクに標準的な &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; タグを使うことができません。 代わりに、例えば本ブログ記事のようなマークダウンコンテンツでは利用不可能な、フレームワーク固有の &lt;code&gt;&amp;lt;Link&amp;gt;&lt;/code&gt; コンポーネントを使わなければいけません&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;しかしながら、実際の問題として、これらのような良い機能には代償が伴います。 もっともシンプルな Next のアプリケーションは、 — 静的なテキストを表示する「hello world」ページですが — 66kb の 圧縮された JavaScript を含みます。 解凍すると 204kb になりますが、これは、パフォーマンスがユーザーの定着率を左右する重要な要素であるときに、モバイルデバイスが一度に解析するには大きく問題のあるコードの量です。 そして、これが &lt;em&gt;ベースライン&lt;/em&gt; になります。&lt;/p&gt;
&lt;p&gt;私たちなら、もっとより良くできます！&lt;/p&gt;
&lt;h2 id=&quot;The-compiler-as-framework-paradigm-shift&quot;&gt;&lt;span&gt;フレームワークパラダイムシフトとしてのコンパイラ&lt;/span&gt;&lt;a href=&quot;#The-compiler-as-framework-paradigm-shift&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;/blog/frameworks-without-the-framework&quot;&gt;Svelte は根本的な思想を紹介しています&lt;/a&gt;: UIフレークワークがフレームワークではなく、コンポーネントをスタンドアロンな JavaScript モジュールに変換するコンパイラだったらどうですか？React や Vue のような、アプリのことを何も知らず無難なソリューションにならざるを得ないライブラリを使う代わりに、私たちは高度に最適化された純粋な JavaScript を送り出すことができます。 アプリケーションに必要なコードだけで、仮想DOMをベースとしたソリューションのようなメモリやパフォーマンスのオーバーヘッドはありません。&lt;/p&gt;
&lt;p&gt;JavaScript の世界は &lt;a href=&quot;https://tomdale.net/2017/09/compilers-are-the-new-frameworks/&quot;&gt;このモデルに向かっています&lt;/a&gt;。 &lt;a href=&quot;https://stenciljs.com&quot;&gt;Stencil&lt;/a&gt; は Ionic のチームによる Svelte からインスピレーションを受けたフレームワークで、 Web コンポーネントにコンパイルされます。 &lt;a href=&quot;https://glimmerjs.com&quot;&gt;Glimmer&lt;/a&gt; は スタンドアロンな JavaScript にコンパイル &lt;em&gt;するわけではありませんが&lt;/em&gt; (その長所と短所については、別のブログの記事にしたいと思います)、このチームはテンプレートをバイトコードにコンパイルすることについての興味深い研究を行なっています。 (React は &lt;a href=&quot;https://twitter.com/trueadm/status/944908776896978946&quot;&gt;このような動きに足を踏み入れていますが&lt;/a&gt;、彼らの現在の研究は JSX で書かれたアプリケーションのコードを最適化することに焦点を当てており、これは間違いなく Angular、 Ractive、 そして Vue がここ数年で行なっている事前最適化によく似たものです)&lt;/p&gt;
&lt;p&gt;私たちがこの新しいモデルを出発点として用いるとどうなるのでしょうか？&lt;/p&gt;
&lt;h2 id=&quot;Introducing-Sapper&quot;&gt;&lt;span&gt;Sapper の紹介&lt;/span&gt;&lt;a href=&quot;#Introducing-Sapper&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;aside&gt;&lt;p&gt;&lt;a href=&quot;https://sapper.svelte.dev/docs#Why_the_name&quot;&gt;名前の由来&lt;/a&gt; は工兵の用語で，Svelte app maker の略でもあります。&lt;/p&gt;&lt;/aside&gt;

&lt;p&gt;&lt;a href=&quot;https://sapper.svelte.dev&quot;&gt;Sapper&lt;/a&gt; はその問いへの答えです。 &lt;strong&gt;Sapper は Next.js スタイルのフレームワークで、この記事の上部にある11の基準を満たしつつ、ブラウザに送信されるコードの量を劇的に減らすことを目的としています。&lt;/strong&gt; Express と互換性のあるミドルウェアとして実装されているため、理解しやすく、カスタマイズも容易に行えます。&lt;/p&gt;
&lt;p&gt;同じ「hello world」のアプリケーションでも、React や Next では 204kb もあったものが、 Sapper ではたったの 7kb です。 クライアントサイドのルーティングを処理する Sapper のごく僅かなランタイムを除いて、インタラクティブではないページでは &lt;em&gt;一切の&lt;/em&gt; JavaScript を読み込まないなどの最適化の可能性を探っていくうちに、将来的にこの数字はさらに小さくなっていくでしょう。&lt;/p&gt;
&lt;p&gt;さらに、「RealWorld」の例はどうでしょうか？　好都合なことに、 Medium クローンの実装をフレームワークで開発するという &lt;a href=&quot;https://github.com/gothinkster/realworld&quot;&gt;RealWorld&lt;/a&gt; プロジェクトでは、その結果を知ることができます。 &lt;a href=&quot;https://github.com/sveltejs/realworld&quot;&gt;Sapper での実装&lt;/a&gt; では、インタラクティブなホームページを表示するのに 39.6kb (zip形式では 11.8kb) かかります。&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;コード分割もタダではありません。もしリファレンスの実装がコード分割を利用していたら、さらに大きくなっていたでしょう。&lt;/p&gt;&lt;/aside&gt;

&lt;p&gt;アプリ全体のコストは 132.7kb (zip形式で 39.9kb) で、リファレンスの React/Redux での実装の 327kb (85.7kb) よりは著しく小さいですが、例え同じくらいの大きさであってもコード分割のおかげで &lt;em&gt;体感的には&lt;/em&gt; 速くなっています。そしてこれが重要なポイントです。 アプリケーションではコード分割をする必要があると言われていますが、 React や Vue のような伝統的なフレームワークを利用している場合、最初にコードを分割するチャンクのサイズには厳しい下限があります — フレームワーク自体がアプリ全体のサイズの中で大部分を占めていると考えられるからです。  Svelte のアプローチは、もはやそのようなことはありません。&lt;/p&gt;
&lt;p&gt;しかしサイズの話は物語の一部に過ぎません。 また、 Svelte アプリケーションはパフォーマンスやメモリ効率が非常に高く、「ミニマル」や「シンプル」なUIライブラリを選択した場合に犠牲にしてしまうような強力な機能がこのフレームワークには含まれています。&lt;/p&gt;
&lt;h2 id=&quot;Trade-offs&quot;&gt;&lt;span&gt;トレードオフ&lt;/span&gt;&lt;a href=&quot;#Trade-offs&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;多くの開発者が Sapper を評価する際の最大の難点は、「それでも React は好きだし、使い方もすでに知ってるよ」ということでしょうが、それは妥当なことです。&lt;/p&gt;
&lt;p&gt;そんな方々には、ぜひ代替フレームワークを試していただきたいと思います。 嬉しい驚きがあるかも知れません！ &lt;a href=&quot;https://github.com/sveltejs/realworld&quot;&gt;Sapper による RealWorld&lt;/a&gt; の実装ではソースコードの総行数が 1,201 行なのに対し、リファレンスでの実装では 2,377 行となっています。 これは、Svelte のテンプレート構文を使って概念を非常に簡潔に表現できるからで、&lt;a href=&quot;https://v2.svelte.dev/guide#template-syntax&quot;&gt;5分もあればマスターできます&lt;/a&gt;。 使われていないスタイルの削除と縮小化が組み込まれた&lt;a href=&quot;/blog/the-zen-of-just-writing-css&quot;&gt;scoped CSS&lt;/a&gt;を取得し、必要に応じて LESS のようなプリプロセッサを使用することができます。 Babel を使用する必要はありません。 SSR は、文字列を連結するだけなのでとてつもなく高速です。 また、最近導入した &lt;a href=&quot;https://v2.svelte.dev/guide#state-management&quot;&gt;svelte/store&lt;/a&gt;は、コンポーネント階層間で状態を同期させる小さなグローバルストアです。 最悪の場合、自分の正当性が証明されたような気になってしまうかも知れませんね！&lt;/p&gt;
&lt;p&gt;とは言え、トレードオフもあります。 いかなる「テンプレート言語」にも病的なまでに嫌悪感を抱く人がいますが、もしかしたらあなたも当てはまるかも知れません。 JSX の支持者は「それはただの JavaScript だ」と酷評するでしょうが、そこには React の最大の強みである、無限の柔軟性があるのです。 そのような柔軟性にはトレードオフがつきものですが、ここでそれについて議論するつもりはありません。&lt;/p&gt;
&lt;p&gt;そして、 &lt;em&gt;エコシステム&lt;/em&gt; があります。 特に React を取り巻く世界では、開発ツール、統合開発環境、付属ライブラリ、チュートリアル、 StackOverflow の回答、就職の機会に至るまで、他の追随を許さないものとなっています。 確かに、ツールを選ぶ主な理由として「エコシステム」を挙げるのは、無難な位置にとどまってしまっていて進歩の波に取り残されがちであることを示していますが、それでも既存の企業にとっては大きなポイントになります。&lt;/p&gt;
&lt;h2 id=&quot;Roadmap&quot;&gt;&lt;span&gt;ロードマップ&lt;/span&gt;&lt;a href=&quot;#Roadmap&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;まだバージョン 1.0.0 ではありませんし、そこに辿り着くまでにいくつか修正する点があるかも知れません。 それが実現した暁には (もうすぐです！)、ワクワクするようなたくさんの可能性を秘めているでしょう。&lt;/p&gt;
&lt;p&gt;私は、 Web パフォーマンスにおける次の新天地は「アプリケーション全体の最適化」だと考えています。 現在、 Svelte のコンパイラはコンポーネントレベルで動作していますが、&lt;em&gt;コンポーネント間&lt;/em&gt; の境界を解釈することができるコンパイラがあれば、より効率的なコードを生成することができます。 React チームの &lt;a href=&quot;https://twitter.com/trueadm/status/944908776896978946&quot;&gt;Prepack の研究&lt;/a&gt; も同様の考え方に基づいていますし、 Glimmer チームもこの分野で興味深い研究を行なっています。 Svelte と Sapper はこれらのアイディアを活かすことのできるポジションにいます。&lt;/p&gt;
&lt;p&gt;Glimmerといえば、コンポーネントをバイトコードにコンパイルするというアイディアは、2018年にはおそらく盗むことになるでしょう。 Sapper のようなフレームワークは、アプリの特性に応じてどのコンパイルモードを使うかを決めることができます 。 初回のルーティングでは JavaScript を提供して起動時間を最短にし、その後のルーティングではバイトコードインタプリタを遅延なく提供することで、起動サイズとアプリ全体のサイズの最適な組み合わせを実現することもできます。&lt;/p&gt;
&lt;p&gt;とは言え、 Sapper の方向性の大部分はユーザーに決めてもらいたいと考えています。あなたが最先端の生活を楽しみ、 Web アプリケーションの構築方法の未来を形作る手助けをしたいと思っている開発者であれば、ぜひ私たちの &lt;a href=&quot;https://github.com/sveltejs/svelte&quot;&gt;GitHub&lt;/a&gt; や &lt;a href=&quot;/chat&quot;&gt;Discord&lt;/a&gt; に参加してください。&lt;/p&gt;</description><pubDate>Sun, 31 Dec 2017 00:00:00 GMT</pubDate></item><item><title>The zen of Just Writing CSS</title><link>https://svelte.dev/blog/the-zen-of-just-writing-css</link><author>Rich Harris</author><description>&lt;p&gt;It&amp;rsquo;s fashionable to dislike CSS. There are lots of reasons why that&amp;rsquo;s the case, but it boils down to this: CSS is &lt;em&gt;unpredictable&lt;/em&gt;. If you&amp;rsquo;ve never had the experience of tweaking a style rule and accidentally breaking some layout that you thought was completely unrelated — usually when you&amp;rsquo;re trying to ship — then you&amp;rsquo;re either new at this or you&amp;rsquo;re a much better programmer than the rest of us.&lt;/p&gt;
&lt;p&gt;So the JavaScript community rolled up its sleeves and got to work. Over the last couple of years, there&amp;rsquo;s been a Cambrian explosion of libraries aimed at making CSS behave, collectively referred to as &lt;em&gt;CSS-in-JS&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;What you might not realise is that &lt;strong&gt;the biggest problems with CSS can be solved without CSS-in-JS&lt;/strong&gt;. Without those problems, writing CSS isn&amp;rsquo;t just tolerable — it&amp;rsquo;s enjoyable. And you don&amp;rsquo;t have to find solutions to the additional problems that CSS-in-JS introduces.&lt;/p&gt;
&lt;p&gt;This article isn&amp;rsquo;t in any way intended as criticism of the hard work the CSS-in-JS community has done. It&amp;rsquo;s one of the most active corners of the JS ecosystem, and new ideas are springing up every week. Instead, my purpose is to illustrate why an alternative approach — based on Single File Components with real CSS — is so damn delightful.&lt;/p&gt;
&lt;h2 id=&quot;The-biggest-problem-with-CSS&quot;&gt;&lt;span&gt;The biggest problem with CSS&lt;/span&gt;&lt;a href=&quot;#The-biggest-problem-with-CSS&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Everything in CSS is global. Because of that, styles intended for one bit of markup often end up affecting another. Because of &lt;em&gt;that&lt;/em&gt;, developers often resort to wild namespacing conventions (not &amp;lsquo;rules&amp;rsquo;, since they&amp;rsquo;re very difficult to enforce) that mostly just increase your risk of RSI.&lt;/p&gt;
&lt;p&gt;It gets worse when you&amp;rsquo;re working on a team. No one dares touch styles authored by someone else, because it&amp;rsquo;s often unclear what they&amp;rsquo;re doing, what markup they apply to, and what disasters will unfold if you remove them.&lt;/p&gt;
&lt;p&gt;The consequence of all this is the &lt;strong&gt;append-only stylesheet&lt;/strong&gt;. There&amp;rsquo;s no way of knowing which code can safely be removed, so it&amp;rsquo;s common to undo some existing style with another, more specific style — even on relatively small projects.&lt;/p&gt;
&lt;h2 id=&quot;Single-File-Components-change-all-that&quot;&gt;&lt;span&gt;Single File Components change all that&lt;/span&gt;&lt;a href=&quot;#Single-File-Components-change-all-that&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The idea behind SFCs is simple: you write your components in an HTML file that (optionally) contains a &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; attribute describing the component&amp;rsquo;s styles and behaviour. Svelte, Ractive, Vue and Polymer all follow this basic pattern.&lt;/p&gt;
&lt;aside&gt;
	&lt;p&gt;&lt;a href=&quot;/blog/frameworks-without-the-framework&quot;&gt;Read the introductory blog post&lt;/a&gt; if you&#39;re new to Svelte. Or &lt;a href=&quot;https://twitter.com/padolsey/status/899717303234908160&quot;&gt;read&lt;/a&gt; &lt;a href=&quot;https://twitter.com/sveltejs/status/901818357644701696&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;https://twitter.com/sveltejs/status/901818106309476352&quot;&gt;testimonials&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;

&lt;p&gt;(For the rest of this article we&amp;rsquo;ll be using Svelte, obviously. But if the idea of using a template language makes you shudder — your fears are misplaced, but that&amp;rsquo;s a topic for another day — then just use Vue which lets you use JSX in your SFCs.)&lt;/p&gt;
&lt;p&gt;Several wonderful things happen as a result:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your styles are &lt;em&gt;scoped to the component&lt;/em&gt;. No more leakage, no more unpredictable cascade. And no more sesquipedalian classnames designed to prevent conflicts.&lt;/li&gt;
&lt;li&gt;You don&amp;rsquo;t need to go spelunking through your folder structure to find the rules that are breaking your stuff.&lt;/li&gt;
&lt;li&gt;The compiler (in Svelte&amp;rsquo;s case) can &lt;strong&gt;identify and remove unused styles&lt;/strong&gt;. No more append-only stylesheets!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s see what that looks like in practice.&lt;/p&gt;
&lt;figure&gt;
	&lt;video controls poster=&#39;https://svelte-technology-assets.surge.sh/just-write-css.jpg&#39;&gt;
		&lt;source type=&#39;video/mp4&#39; src=&#39;https://svelte-technology-assets.surge.sh/just-write-css.mp4&#39;&gt;
	&lt;/video&gt;

&lt;!-- prettier-ignore --&gt;
&lt;figcaption&gt;
	Is this what they mean by &#39;use the platform&#39;?
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;Every code editor already knows about CSS, so there&amp;rsquo;s a good chance that you&amp;rsquo;ll get autocomplete, linting, syntax highlighting and so on — all without additional JS-fatigue-inducing tools.&lt;/p&gt;
&lt;p&gt;And because it&amp;rsquo;s real CSS, rather than some camelCased quotes-everywhere impostor, we can take advantage of the &amp;lsquo;tweak in devtools, paste back into our source code&amp;rsquo; workflow, which I personally couldn&amp;rsquo;t live without. Notice that we get CSS sourcemaps out of the box, so you can instantly pinpoint the lines in question. It&amp;rsquo;s hard to overstate the importance of this: when you&amp;rsquo;re in WYSIWYG mode, you&amp;rsquo;re not thinking in terms of your component tree, so having a robust way to figure out &lt;em&gt;where these damn styles came from&lt;/em&gt; is essential. Doubly so if someone else originally wrote the component. (I promise you, this is the single biggest productivity boost to your CSS workflow. If you&amp;rsquo;re writing styles without sourcemaps, you are almost certainly wasting a lot of time. I know I was.)&lt;/p&gt;
&lt;p&gt;Svelte transforms your selectors (using an attribute that&amp;rsquo;s also applied to affected elements, though the exact mechanism is unimportant and subject to change) to achieve the scoping. It warns on and removes any unused rules, then it minifies the result and lets you write it out to a &lt;code&gt;.css&lt;/code&gt; file. There&amp;rsquo;s also an experimental new option to compile to web components, using shadow DOM to encapsulate the styles, if that&amp;rsquo;s your jam.&lt;/p&gt;
&lt;p&gt;This is all possible because your CSS is parsed (with &lt;a href=&quot;https://github.com/csstree/csstree&quot;&gt;css-tree&lt;/a&gt;) and statically analysed in the context of your markup. Static analysis opens the doors to all kinds of exciting future possibilities — smarter optimisations, a11y hints — that are much harder if your styles are computed dynamically at runtime. We&amp;rsquo;re just getting started.&lt;/p&gt;
&lt;h2 id=&quot;But-we-can-add-tools-to-do-x&quot;&gt;&lt;span&gt;But we can add tools to do [x]!&lt;/span&gt;&lt;a href=&quot;#But-we-can-add-tools-to-do-x&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If your reaction to the video was &amp;lsquo;fine, but if we use TypeScript and write plugins for each editor then we can get all the autocomplete and syntax highlighting stuff&amp;rsquo; — in other words, if you believe that in order to achieve parity with CSS it makes sense to build, document, promote and maintain a fleet of ancillary projects — then, well, you and I may never see eye to eye!&lt;/p&gt;
&lt;h2 id=&quot;We-don&#39;t-have-all-the-answers-yet&quot;&gt;&lt;span&gt;We don&amp;rsquo;t have all the answers — yet&lt;/span&gt;&lt;a href=&quot;#We-don&#39;t-have-all-the-answers-yet&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Having said all that, CSS-in-JS does point to answers to some lingering questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How can we install styles from npm?&lt;/li&gt;
&lt;li&gt;How can we reuse constants that are defined in a single place?&lt;/li&gt;
&lt;li&gt;How can we compose declarations?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Personally, I haven&amp;rsquo;t found these issues to outweigh the benefits of the approach outlined above. You may well have a different set of priorities, and they may be reason enough for you to abandon CSS.&lt;/p&gt;
&lt;p&gt;But at the end of the day, you have to know CSS anyway. Love it or loathe it, you must at least &lt;em&gt;learn&lt;/em&gt; it. As custodians of the web, we have a choice: create abstractions that steepen the web dev learning curve yet further, or work together to fix the bad parts of CSS. I know which I choose.&lt;/p&gt;</description><pubDate>Wed, 06 Sep 2017 00:00:00 GMT</pubDate></item><item><title>フレームワークの無いフレームワーク: なぜもっと早く思いつかなかったのか</title><link>https://svelte.dev/blog/frameworks-without-the-framework</link><author>Rich Harris</author><description>&lt;blockquote&gt;&lt;p&gt;待って、この新しいフレームワークには &lt;em&gt;ランタイム&lt;/em&gt; があるの？ うーん。ありがとう、やめておくよ。
&lt;strong&gt;– front end developers in 2018&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;私たちはあまりに多くのコードをユーザーに配布しています。多くのフロントエンド開発者と同じように私もこの事実を否定し、ページロードの際に 100kb の JavaScript を配布しても問題ないと考えていました。&lt;a href=&quot;https://twitter.com/miketaylr/status/227056824275333120&quot;&gt;.jpg を1つ減らせば&lt;/a&gt; 良いだけだと。そして &lt;em&gt;本当に&lt;/em&gt; 重要なのはアプリケーションがインタラクティブになった後のパフォーマンスだと考えていました。&lt;/p&gt;
&lt;p&gt;しかし、私は間違っていました。100kb の .js は 100kb の .jpg と同じではありません。アプリの起動時のパフォーマンスを低下させるのはネットワークの時間だけではありません。script の解析と評価にも時間がかかり、その間ブラウザーは完全に無反応になります。モバイルでは、このミリ秒単位の時間があっという間に積み上がります。&lt;/p&gt;
&lt;p&gt;これが問題であることに納得できないなら、Twitter で &lt;a href=&quot;https://bsky.app/profile/infrequently.org&quot;&gt;Alex Russell&lt;/a&gt; をフォローしてください。Alex は &lt;a href=&quot;https://twitter.com/slightlylate/status/728355959022587905&quot;&gt;最近、フレームワークコミュニティで多くの友人を作ろうとしませんが&lt;/a&gt;、彼は間違っていません。しかし、Angular、React、Ember などのフレームワークの代替として提案されている &lt;a href=&quot;https://www.polymer-project.org/1.0/&quot;&gt;Polymer&lt;/a&gt; は、フロントエンドの世界ではまだ普及していませんし、それは決してマーケティングが不足しているからではありません。&lt;/p&gt;
&lt;p&gt;おそらく、全てを再考する必要があります。&lt;/p&gt;
&lt;h2 id=&quot;What-problem-do-frameworks-really-solve&quot;&gt;&lt;span&gt;フレームワークが &lt;em&gt;本当に&lt;/em&gt; 解決すること&lt;/span&gt;&lt;a href=&quot;#What-problem-do-frameworks-really-solve&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;フレームワークはコードの複雑さを管理しやすくする、というのが一般的な認識です。フレームワークは仮想DOMの差分検出などの技術によって面倒な実装の詳細を抽象化する、というものです。しかし、実際にはそうではありません。せいぜい、あなたが書かなければならないコードからあなたが書いていないコードに &lt;em&gt;複雑さを移動させる&lt;/em&gt; だけです。&lt;/p&gt;
&lt;p&gt;むしろ、React のようなアイデアがこれほど成功した理由は、 &lt;em&gt;コンセプト&lt;/em&gt; の複雑さを管理しやすくしているからです。フレームワークはコードではなく思考を構造化するためのツールです。&lt;/p&gt;
&lt;p&gt;そう考えると、もしそのフレームワークが &lt;em&gt;実際にはブラウザーで動かない&lt;/em&gt; としたらどうでしょうか？　代わりに、Babel が ES2016+ から ES5 に変換するように、アプリケーションを純粋なJavaScriptに変換するとしたら？　重たいランタイムを配布するための初期コストを支払うことはなく、アプリは本当に高速になります。アプリとブラウザの間の抽象レイヤーがなくなるからです。&lt;/p&gt;
&lt;h2 id=&quot;Introducing-Svelte&quot;&gt;&lt;span&gt;Introducing Svelte&lt;/span&gt;&lt;a href=&quot;#Introducing-Svelte&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelte はまさにそれを実現するフレームワークです。HTML、CSS、JavaScript (それと &lt;a href=&quot;https://v2.svelte.dev/guide&quot;&gt;5分以内に学べる&lt;/a&gt; ちょっとしたこと) でコンポーネントを書き、Svelte がそれをビルドプロセスで小さなスタンドアローンの JavaScript モジュールにコンパイルします。コンポーネントのテンプレートを静的に解析することで、ブラウザーの作業を可能な限り少なくなるようにすることができます。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://svelte-todomvc.surge.sh/&quot;&gt;Svelte による TodoMVC の実装&lt;/a&gt; は 3.6kb (zipped) です。比較として、 &lt;em&gt;アプリコードを除いた&lt;/em&gt; React と ReactDOM はおよそ 45kb (zipped) です。ブラウザーが React を評価するのにかかる時間は、Svelteがインタラクティブな TodoMVC を起動して実行するのにかかる時間の約10倍です。&lt;/p&gt;
&lt;p&gt;そして &lt;a href=&quot;https://github.com/krausest/js-framework-benchmark&quot;&gt;js-framework-benchmark&lt;/a&gt; によれば、アプリが起動して実行されると &lt;strong&gt;Svelte はとてもつもなく高速です&lt;/strong&gt;。React よりも速いです。Vue よりも速いです。Angular、Ember、Ractive、Preact、Riot、Mithrilよりも速いです。今のところ、おそらく世界で最も高速な UI フレームワークである Inferno (&lt;a href=&quot;https://bsky.app/profile/trueadm.dev&quot;&gt;Dominic Gannaway&lt;/a&gt; は魔法使い(a wizard)なので) に匹敵します。(Svelte は要素の削除が遅いですが、&lt;a href=&quot;https://github.com/sveltejs/svelte/issues/26&quot;&gt;それについては取り組んでいます&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;基本的には純粋な JS と同じくらい速いです。実際、それは &lt;em&gt;純粋な JS なので&lt;/em&gt; 当然です。ただ、純粋な JS を書く必要がないというだけです。&lt;/p&gt;
&lt;h2 id=&quot;But-that&#39;s-not-the-important-thing&quot;&gt;&lt;span&gt;本当に重要なことは&lt;/span&gt;&lt;a href=&quot;#But-that&#39;s-not-the-important-thing&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ええ、パフォーマンスはとても重要です。しかし、このアプローチの本当にエキサイティングなところは、Web 開発におけるいくつかの厄介な問題をついに解決できることです。&lt;/p&gt;
&lt;p&gt;相互運用性について考えてみてください。&lt;code&gt;npm install cool-calendar-widget&lt;/code&gt; を実行してアプリで使いたいですか？　これまでは、そのウィジェットがそのフレームワーク向けにデザインされていて、あなたがそのフレームワーク(の正しいバージョン)を使っているときに限りそれが可能でした。もし &lt;code&gt;cool-calendar-widget&lt;/code&gt; が React で作られており、あなたが Angular を使っていたら、まあ、残念でしたね。しかし、もしそのウィジェットの作者が Svelte を使用した場合、そのウィジェットを使用するアプリを好きなテクノロジーで構築することができます。(TODOリスト : Svelte コンポーネントを Web Components に変換する方法)&lt;/p&gt;
&lt;p&gt;他には、&lt;a href=&quot;https://twitter.com/samccone/status/797528710085652480&quot;&gt;コード分割&lt;/a&gt; があります。これは素晴らしいアイデア (初期表示に必要なコードだけをロードし、残りは後で取得する) ですが、問題があります。100個の React コンポーネントではなく、最初に1個の React コンポーネントを配布するだけでも、 &lt;em&gt;React自体を配布しなければなりません&lt;/em&gt; 。Svelteでは、フレームワークはコンポーネントに埋め込まれており、そのコンポーネントは小さいため、コード分割がより効果的です。&lt;/p&gt;
&lt;p&gt;最後に、オープンソースのメンテナーとして悪戦苦闘してきたこと。ユーザーは常に自分の機能を優先してほしいし、その機能を必要としていない人に対してその機能のコストを低く見積もります。フレームワークの作者は、プロジェクトの長期的な健全性と、ユーザーのニーズを満たしたいという欲求との間でバランスを常に取り続けなければなりません。これはとてつもなく難しいことです。なぜなら、少しずつ大きくなっていく成果・結果を予測したりすることはできないですし、ましてや明確にすることは不可能です。また、(それまで熱狂的にツールを伝道してきた)人たちに、それらの機能に重要な部分が足りていないと伝えるには本格的なソフトスキルが必要です。しかし Svelte のようなアプローチでは、使用していない機能のコードはコンパイラによって生成されないため、多くの機能を追加しても、その機能を必要としていない人にそのコストを与えることは全くありません。&lt;/p&gt;
&lt;h2 id=&quot;We&#39;re-just-getting-started&quot;&gt;&lt;span&gt;まだ始まったばかり&lt;/span&gt;&lt;a href=&quot;#We&#39;re-just-getting-started&quot; class=&quot;permalink&quot; aria-label=&quot;permalink&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Svelteは非常に新しいです。ビルドツールのインテグレーション作成、サーバーサイドレンダラー、ホットリロード、トランジション、ドキュメントやサンプルの追加、スターターキットなど、まだまだやるべきことがたくさんあります。&lt;/p&gt;
&lt;p&gt;しかし、すでにリッチなコンポーネントを構築することができます。それが stable な 1.0.0 のリリースに至った理由です。&lt;a href=&quot;https://v2.svelte.dev/guide&quot;&gt;ガイドを読み&lt;/a&gt;、&lt;a href=&quot;/repl&quot;&gt;REPL で試して&lt;/a&gt;、そして &lt;a href=&quot;https://github.com/sveltejs/svelte&quot;&gt;GitHub&lt;/a&gt; にアクセスして、次世代のフロントエンド開発をスタートしてください。&lt;/p&gt;</description><pubDate>Sat, 26 Nov 2016 00:00:00 GMT</pubDate></item></channel></rss>