Transcript

00:00:00Hallo zusammen! Willkommen zu einer weiteren Basel-Community-Session.
00:00:29Ich bin Maya Avendano und DX-Ingenieurin hier bei Basel.
00:00:32Falls ihr zum ersten Mal dabei seid und den Chat nicht sehen könnt,
00:00:35schaut doch mal auf unserer Community-Plattform unter [community.basel.com/live](https://www.google.com/search?q=https://community.basel.com/live) vorbei.
00:00:41Dort könnt ihr den Chat nutzen und Fragen stellen, was übrigens sehr erwünscht ist.
00:00:45Oder falls ihr auf X oder einer anderen Plattform zuseht, nutzt gerne diese.
00:00:49Auf die heutige Session freue ich mich besonders, denn – kleiner Fun Fact:
00:00:53Ich war selbst einige Jahre Svelte-Entwicklerin und habe viele Nebenprojekte damit gebaut.
00:00:58Ich bin also ein großer Fan und habe sogar das passende T-Shirt dazu.
00:01:01Für alle Svelte-Fans und diejenigen, die neugierig auf Svelte sind:
00:01:06Wir haben heute einige Leute aus dem Svelte-Team hier. Herzlich willkommen!
00:01:12Hallo! Hey zusammen! Wollt ihr uns kurz erzählen, wer ihr seid?
00:01:21Sicher, ich fange an. Mein Name ist Rich.
00:01:24Ich arbeite seit 10 Jahren an Svelte, da ich das Projekt damals 2016 gestartet habe.
00:01:32Ursprünglich wollte ich es in meinem Hauptberuf als Journalist für visuellen Journalismus nutzen,
00:01:38um Nachrichten mithilfe von JavaScript besser zu vermitteln. Vor gut vier Jahren
00:01:44bin ich dann zu Basel gewechselt, womit es mein Vollzeitjob wurde, und das mache ich seitdem.
00:01:53Ja, ich glaube, niemand sonst kann so viele Jahre vorweisen wie du.
00:01:57Ich bin, glaube ich, seit etwa fünf Jahren Svelte-Maintainer.
00:02:02Ich bin Simon. Ich arbeite ebenfalls bei Basel an Svelte,
00:02:08und zu Svelte kam ich über einen Hackathon in meiner früheren Firma.
00:02:13Ich wollte mal etwas anderes ausprobieren; damals habe ich hauptsächlich Angular gemacht.
00:02:18Beim Hackathon habe ich Svelte genutzt und mich sofort verliebt, wusste aber auch:
00:02:22“Okay, im Arbeitsalltag kann ich das nicht nutzen, wie bleibe ich also sonst mit Svelte in Kontakt?”
00:02:29Sehr nerdig, ich weiß. So wurde ich dann Teilzeit-Maintainer.
00:02:34Einige Jahre später ergab sich die Chance, bei Basel einzusteigen und Vollzeit daran zu arbeiten.
00:02:39Und ja, seitdem bin ich wunschlos glücklich.
00:02:43Ich bin Elliot. Wie ich Rich ab und zu gerne erinnere,
00:02:46habe ich genau in dem Jahr meinen Highschool-Abschluss gemacht, als er Svelte startete.
00:02:49Ich bin also noch nicht ganz so lange als Maintainer dabei.
00:02:54Aber ich fing an – ich weiß nicht mehr genau, ob Ende 2021 oder Anfang 2022.
00:02:59Irgendwann während der SvelteKit-Beta bin ich auf die Svelte-Community gestoßen.
00:03:04Und tatsächlich habe ich kurz nach Rich bei Vercel angefangen, glaube ich.
00:03:09Es war im Herbst desselben Jahres, wenn ich mich recht erinnere.
00:03:12Dort habe ich an verschiedenen Dingen gearbeitet, etwa an der Vercel-Website.
00:03:16Und dann, was sich jetzt wie eine viel kürzere Zeit anfühlt, wechselte ich vor gut einem Jahr
00:03:23ins Svelte-Team. Seitdem arbeite ich Vollzeit daran.
00:03:27In letzter Zeit durfte ich zum Beispiel die Async-SSR-Implementierung für Svelte schreiben.
00:03:36Das ist genau diese Art von nerdiger, cooler Softwareentwicklung, die ich liebe
00:03:43und die ich an Svelte schon immer geliebt habe.
00:03:48Großartig. Schön, dass ihr alle hier seid.
00:03:51Könnt ihr für die Zuschauer, die es noch nicht kennen, kurz erklären, was Svelte und SvelteKit sind?
00:04:00Wir können es ja mal versuchen. Svelte ist vieles.
00:04:04Es ist eine Community, eine Lebenseinstellung, aber eben auch ein deklaratives Komponenten-Framework.
00:04:11Wer React, Vue oder Ähnliches nutzt, kennt das Grundkonzept:
00:04:15Anstatt manuell Befehle wie “document.createElement” oder “setAttribute” zu schreiben,
00:04:21beschreibt man seine App mithilfe von deklarativen Komponenten.
00:04:25Das Framework übernimmt dann die Aufgabe, diese Absicht in das zu übersetzen, was auf dem Bildschirm erscheint.
00:04:33Svelte unterscheidet sich von anderen Frameworks durch sein “Compiler-First”-Design.
00:04:40Im Grunde ist es eine Sprache, die in hochperformantes Vanilla-JavaScript umgewandelt wird.
00:04:48In der Anwendung ähnelt es vielen anderen Frameworks, aber durch das Design
00:04:53können wir Dinge oft etwas eleganter und kompakter lösen als andere.
00:04:58Zusätzlich zu Svelte, das sozusagen die Basisschicht bildet,
00:05:02haben wir das darauf aufbauende Framework namens SvelteKit.
00:05:08Wer aus der React-Welt kommt: Das ist quasi unser Gegenstück zu Next.js.
00:05:13Es liefert alles Weitere: Routing, Server-Side Rendering, Datenladen, Build-Tools –
00:05:18eben all das, was man braucht, wenn man eine App baut, sich aber nicht
00:05:24selbst um das ganze Drumherum kümmern möchte.
00:05:28Hervorragend, vielen Dank.
00:05:29Ihr wart hinter den Kulissen ja auch ziemlich fleißig am Werk.
00:05:32Ich würde gerne mehr darüber erfahren, was ihr in den letzten Monaten so getrieben habt.
00:05:37Ich habe gehört, ihr habt auch ein paar Demos vorbereitet?
00:05:41Wir haben in der Tat ein paar Demos dabei.
00:05:43Soll ich vielleicht den Anfang machen?
00:05:44Vom Ablauf her ist es am sinnvollsten, erst über die “Async Svelte”-Entwicklung zu sprechen,
00:05:51bevor wir zu den Dingen kommen, die wir darauf aufbauen.
00:05:55Klingt gut.
00:05:55Alles klar. Seit gut einem Jahr – vielleicht auch länger, ich bin mir nicht ganz sicher –
00:06:02arbeiten wir an dem, was wir lose als “Asynchrones Svelte” bezeichnen. Wenn ich meinen Bildschirm teile,
00:06:12kann ich kurz zeigen, was das ist, und danach schauen wir uns die Anwendungsfälle an.
00:06:20Ich muss nur kurz schauen, wo der Button zum Bildschirmteilen ist.
00:06:26Und mich durch die ganzen Berechtigungsdialoge klicken.
00:06:28Einen Moment Geduld bitte.
00:06:30Gesamten Bildschirm teilen.
00:06:33Bumms.
00:06:34Okay, ich glaube, mein Bildschirm wird übertragen.
00:06:35Ist er zu sehen oder bin ich noch im Backstage-Bereich?
00:06:38Ja, wir sehen ihn.
00:06:40Okay. Für alle Neulinge: Das hier ist Svelte.dev.
00:06:43Das ist unsere Website.
00:06:44Das ist der Playground, wo man Svelte ausprobieren kann, ohne etwas zu installieren
00:06:49oder sich mit der Kommandozeile herumschlagen zu müssen.
00:06:51Man kann den Code direkt hier schreiben.
00:06:53Das ist der Standard-Playground, den man bekommt.
00:06:55Ich mache das mal etwas größer, damit es jeder gut lesen kann.
00:06:58Hier haben wir einen State (Zustand).
00:07:03Diese speziellen Elemente hier nennen wir Runes.
00:07:05Damit signalisiert man, dass sich etwas in der Svelte-Komponente ändern wird
00:07:10und dass bei einer Änderung ein Re-Rendering nötig ist.
00:07:12Wir haben hier einen Namen und einen Zähler (count).
00:07:15Den Namen lassen wir uns hier oben anzeigen.
00:07:17Und hier binden wir den Wert an den Inhalt dieses Elements.
00:07:21Das können wir so machen.
00:07:24Wenn wir auf diesen Button klicken, erhöht sich der Wert.
00:07:27Alles sehr einfache Dinge, die so ziemlich jedes
00:07:29Framework in irgendeiner Form beherrscht.
00:07:35Was Async Svelte nun ermöglicht, ist die direkte Nutzung des “await”-Keywords
00:07:41innerhalb eurer Komponenten.
00:07:45Sagen wir mal – wir schmeißen den Namen und den ganzen Rest hier raus.
00:07:49Machen wir daraus eine ID, die bei eins beginnt.
00:07:56Ich werde jetzt ein paar JSON-Daten
00:08:01von einer externen Quelle abrufen.
00:08:04Zuerst erstelle ich etwas, das von der ID abgeleitet ist.
00:08:10Diese URL wird also jedes Mal neu berechnet, wenn sich die ID ändert.
00:08:16Wie man hier sieht: Wenn ich die URL ausgebe, ändert sie sich,
00:08:22sobald sich die ID ändert.
00:08:24Jetzt hole ich mir Daten über diese URL:
00:08:28“myData = derived”.
00:08:30Und hier drin kann ich jetzt einfach schreiben: “await fetch(URL)”.
00:08:36Dann nehmen wir die Response und wandeln sie in JSON um.
00:08:41Wer in der Entwicklung tätig ist, hat so etwas
00:08:43sicherlich schon millionenfach gesehen.
00:08:47Und hier unten erstellen wir ein Blockquote-Element,
00:09:00um die geladenen Daten anzuzeigen.
00:09:03Wenn wir uns das jetzt ansehen –
00:09:06da ist gerade etwas kaputt.
00:09:13Das ist das Ergebnis, das wir wollen und anzeigen möchten.
00:09:16Also schreibe ich hier: “data.quote”.
00:09:21Oh, irgendwas stimmt nicht.
00:09:23Simon, Elliott – falls ihr seht, was ich falsch gemacht habe, sagt Bescheid.
00:09:28Ach nein, es ist nur die Verzögerung.
00:09:30Okay.
00:09:31Darunter fügen wir noch den Autor des Zitats ein.
00:09:40Vielleicht entfernen wir die Verzögerung, während wir daran arbeiten.
00:09:44Ich weiß nicht.
00:09:46Es hilft natürlich, wenn ich das in geschweifte Klammern setze.
00:09:50Wenn ich jetzt hier draufklicke, verschwindet es kurz,
00:09:55lädt neue Daten und rendert diese dann.
00:09:58Das klingt jetzt vielleicht nach einer totalen Kleinigkeit,
00:10:01aber wenn man sich ansieht, wie man das in fast jedem anderen Framework lösen muss,
00:10:08wird es schnell erschreckend kompliziert.
00:10:10Man braucht einen lokalen State und dann
00:10:13einen Effekt – wie etwa “useEffect”
00:10:16oder das Äquivalent in anderen Frameworks –, um den Fetch-Befehl auszuführen.
00:10:20Sobald der Fetch fertig ist, weist man das dem lokalen State zu,
00:10:25muss Fehlermeldungen abfangen und so weiter.
00:10:27Das wird alles ziemlich komplex.
00:10:32Aber hiermit funktioniert es einfach.
00:10:36Und selbst wenn es eine Verzögerung gibt –
00:10:43funktioniert es weiterhin.
00:10:45Wobei man sich vielleicht denkt: Moment mal,
00:10:46wenn ich den Button mehrmals schnell hintereinander klicke,
00:10:49will ich eigentlich sofort zum Endergebnis springen.
00:10:51Ich will nicht die ganzen Zwischenschritte abwarten.
00:10:53Auch das ist möglich.
00:10:54Wir können hier eine Hilfsfunktion importieren namens
00:10:58“getAbortSignal” und dieses Signal an den Fetch-Befehl übergeben.
00:11:11Wenn ich den Button jetzt klicke,
00:11:15werden alle Anfragen dazwischen verworfen,
00:11:19und es wird direkt zum letzten Klick gesprungen,
00:11:21da die früheren Anfragen zu spät aufgelöst werden.
00:11:26Zu diesem Zeitpunkt haben wir die ID ja schon wieder geändert.
00:11:28Die bestehenden Signale werden also abgebrochen.
00:11:33Gut, was geht noch?
00:11:34Vielleicht möchte ich, dass der Button sofort aktualisiert wird.
00:11:38Dafür können wir “state.eager” nutzen, um aus der
00:11:43asynchronen Warteschleife auszubrechen.
00:11:47Das ist auch ziemlich praktisch.
00:11:49Und wir können Styles hinzufügen.
00:11:51Wir definieren: “dataLoading = effect.pending > 0”.
00:11:58Das heißt, wir prüfen, ob noch Anfragen laufen.
00:11:59Und wenn wir uns in einem Ladezustand befinden,
00:12:04können wir den Inhalt ausblenden, während nachgeladen wird.
00:12:11Auch das ist etwas, das manuell zu koordinieren
00:12:13wahnsinnig schwierig wäre.
00:12:15Aber es geht noch weiter.
00:12:17Sagen wir, ich möchte passend zum Zitat ein Foto anzeigen.
00:12:19Das könnte dann so aussehen.
00:12:28Wenn ich es ändere, bekomme ich
00:12:37viele verschiedene Fotos zu sehen.
00:12:41Anscheinend alles Laptops, ich weiß gar nicht, warum.
00:12:42Ah, okay, hier ist ein schöneres Bild.
00:12:46Allerdings merkt man,
00:12:48dass es eine kleine Verzögerung gibt.
00:12:50Zuerst kommen die Daten des Zitats und dann ploppt das Bild auf.
00:12:52Das liegt daran, dass wir erst das Bild rendern
00:12:57und dann erst die Anfrage übers Netzwerk schicken,
00:12:58um das Bild zu holen. Das ist nicht ideal.
00:12:59Wenn wir das jetzt durch eine kleine “preload”-Hilfsfunktion ersetzen,
00:13:02die ich aus meinem Utility-Modul importiere,
00:13:07dann werden wir sehen, dass das Bild und das Zitat
00:13:17diesmal exakt gleichzeitig erscheinen.
00:13:24Wobei ich gerade einen kleinen Bug entdeckt habe.
00:13:27Den müssen wir noch fixen.
00:13:28Aber ihr versteht das Prinzip.
00:13:30Wir können “await” direkt in unseren Berechnungen nutzen
00:13:31und auch direkt in unseren Templates.
00:13:34Und all diese Dinge sind perfekt aufeinander abgestimmt,
00:13:36sogar über mehrere Komponenten hinweg,
00:13:40die unabhängig voneinander auf dieselben Events reagieren.
00:13:44Es funktioniert mit Server-Side Rendering.
00:13:47Es deckt all das ab, was ohne “Asynchrones Svelte”
00:13:49extrem mühsam wäre.
00:13:52Und auf dieser Basis können wir nun
00:13:55einige ziemlich coole Sachen bauen, wofür ich jetzt
00:13:58an die anderen beiden übergebe.
00:14:02Gerne.
00:14:05Ich werde kurz die “Remote Functions” demonstrieren,
00:14:09die darauf aufbauen.
00:14:10Da wir jetzt Async in Svelte haben, ist das extrem mächtig.
00:14:17die darauf aufbauen werden.
00:14:19Da wir jetzt Async in Svelte haben, ist das extrem mächtig.
00:14:24Aber SvelteKit, das Meta-Framework darüber,
00:14:27steckt sozusagen noch in der alten Welt fest.
00:14:30Wir haben diese Load-Funktionen, die in einer eigenen Datei liegen.
00:14:34Damit können wir all die neuen, coolen Sachen,
00:14:38die wir gerade gesehen haben, nicht wirklich nutzen.
00:14:41Deshalb arbeiten wir momentan an den "Remote Functions".
00:14:45Sie sind in SvelteKit bereits verfügbar.
00:14:48Zwar noch experimentell, aber man kann sie schon benutzen.
00:14:50Ich werde jetzt einfach den simpelsten Weg zeigen,
00:14:55Remote Functions zu nutzen, um Zeit zu sparen.
00:14:59Ich werde also
00:15:01einen ganz einfachen Zähler erstellen, bei dem
00:15:04der Klick auf den Button den Wert erhöht,
00:15:08der Zählerstand selbst aber auf dem Server liegt.
00:15:10Ich implementiere das in dieser counter.remote.ts-Datei.
00:15:16Ich beginne einfach mit einem "count".
00:15:18Und dann so etwas wie "get count".
00:15:20Dafür nutzen wir eine Query aus $app/server.
00:15:26Das ist eine Remote-Query.
00:15:29Hier geben wir einfach den Zählerstand zurück.
00:15:31Auf der anderen Seite können wir das dann nutzen
00:15:37und mit "await get count" aus der importierten Datei aufrufen.
00:15:44Dieser Import sieht für TypeScript wie ein normaler Import aus.
00:15:48Wir importieren lediglich eine Funktion,
00:15:52rufen sie auf und sie gibt ein Promise zurück.
00:15:54Also verwenden wir "await".
00:15:56Tatsächlich überschreitet dies aber die Grenze zwischen Client und Server.
00:16:01Dieses "get count" wird eigentlich auf dem Server ausgeführt.
00:16:05Was also passiert, ist, dass der Client
00:16:08eine Anfrage an einen versteckten Endpunkt sendet
00:16:14und von dort die Daten zurückerhält.
00:16:17Und natürlich unterstützt es auch Server-Side Rendering.
00:16:19Beim ersten Laden wird also nicht beim Backend angefragt,
00:16:23sondern es geschieht direkt.
00:16:25Jetzt haben wir zwar den Zählerstand, können aber noch nichts
00:16:29damit anfangen.
00:16:29Wir wollen ihn erhöhen.
00:16:31Das wird die zweite Remote-Funktion.
00:16:34Wir implementieren das schnell – ohne Copilot.
00:16:38Das ist der falsche Befehl.
00:16:40Wir brauchen "command" aus $app/server.
00:16:45Hier aktualisieren wir einfach unseren Server-Status.
00:16:49Das allein hilft aber noch nicht,
00:16:52da wir dem System sagen müssen, weil es ein Command ist,
00:16:55dass auch ein Update mitgesendet werden soll.
00:16:58Wir rufen hier also unsere Remote-Funktion "get count" auf
00:17:03und führen darauf "refresh" aus.
00:17:05Damit sagen wir dem System im Grunde:
00:17:08Mache eine "Single-Flight"-Mutation.
00:17:10Wenn du aufgerufen wirst, erhöhe den Zähler um eins
00:17:14und sende dann die Information an den Client zurück,
00:17:19dass überall dort, wo "get count" auf der Seite genutzt wird,
00:17:22der Wert nun um eins erhöht werden muss,
00:17:24da ein neuer Status verfügbar ist.
00:17:27Wenn ich das nun hier einfüge,
00:17:29nutze ich "on:click" und erhöhe einfach den Zähler.
00:17:37Das ist alles, was ich tue.
00:17:38Es sieht wie ein ganz normaler Funktionsaufruf aus.
00:17:40Aber wie gesagt, das ruft tatsächlich den Server auf.
00:17:43Und wenn ich jetzt klicke, erhöhe ich den Wert.
00:17:49Das war ein extrem kurzer, grober Einblick
00:17:53in die Remote Functions.
00:17:55Man kann damit noch viel mehr bauen.
00:17:58Es harmoniert auch wunderbar mit KI.
00:18:01Zum Beispiel habe ich etwa fünf Minuten vor Sitzungsbeginn
00:18:06den Code-Copiloten gefragt: "Hey, bau mir
00:18:12einen einfachen Blog im Portal-Stil, in dem ich
00:18:18ein paar Remote Functions präsentieren kann.
00:18:20Nutze Svelte 5 mit dem Svelte-MCP."
00:18:25Elliot wird gleich noch etwas mehr dazu sagen.
00:18:29"Nutze das, Remote Functions und Async."
00:18:32Und es hat auf Anhieb geklappt.
00:18:34Das hier ist vorgerendert.
00:18:35Der Block ist vorgerendert.
00:18:37Und ich kann jetzt hier tippen –
00:18:42und es hier speichern.
00:18:43Dann wird es aktualisiert.
00:18:49Unter der Haube passiert im Grunde dasselbe.
00:18:53Wenn wir das kurz überfliegen:
00:18:56Wir nutzen "await get posts".
00:18:59"get posts" ist eine Pre-render-Funktion,
00:19:01was bedeutet, dass sie zur Build-Zeit ausgeführt wird
00:19:05statt zur Laufzeit.
00:19:06Wir haben hier unten einen Kommentarbereich,
00:19:12in dem wir Kommentare laden und ein Formular nutzen,
00:19:15um einen neuen Kommentar zu posten und so weiter.
00:19:19Das alles nutzt Remote Functions, keine Load-Funktionen.
00:19:23Nirgendwo.
00:19:24Und die KI hat das im ersten Versuch geschafft.
00:19:27Elliot wird dazu jetzt sicher noch
00:19:32ein paar Details verraten.
00:19:34Ja, das klingt super.
00:19:37Ich muss jetzt denselben Kram machen wie Rich Harris
00:19:41am Anfang mit der Bildschirmfreigabe.
00:19:46Okay, los geht's.
00:19:52Ich nehme mir kurz Zeit, um über die KI-Entwicklungen
00:19:57zu sprechen, an denen wir gearbeitet haben.
00:19:59Und mit "wir" meine ich explizit nicht mich selbst.
00:20:02Sondern hauptsächlich einen Typen namens Paolo und einige andere
00:20:06unserer Svelte-Mitwirkenden.
00:20:09Tatsächlich stammt der Großteil der aktuellen KI-Sachen
00:20:13von ihnen.
00:20:14Also ein riesiges Dankeschön an sie.
00:20:15Sie haben einen fantastischen Job gemacht.
00:20:18Und ja, ich zoome hier mal kurz rein.
00:20:24So, bitteschön.
00:20:27Ich könnte jetzt lange erklären,
00:20:28was wir alles dafür aufgebaut haben,
00:20:31denn wir haben einen MCP-Server.
00:20:32Der hat einige wirklich coole Funktionen.
00:20:36Wir haben auch einige "Skills" veröffentlicht.
00:20:38Aber zum Glück müsst ihr
00:20:41gar nicht im Detail wissen, wie das alles funktioniert,
00:20:43denn wir haben auch Plugins für Open Code und Cloud Code
00:20:47veröffentlicht.
00:20:48Ich werde hier das Open-Code-Plugin installieren,
00:20:52was im Grunde nur bedeutet, diese Konfiguration zu kopieren
00:20:55und sie in eine Open-Code.json-Datei
00:20:58in eurer Bibliothek einzufügen.
00:21:00Und dann lasse ich mir von Open Code einfach eine Seite bauen.
00:21:06Mal sehen, wie das läuft.
00:21:10Ich werde es jetzt fragen.
00:21:11Ich habe ein paar Bilder in den Assets bereitgestellt.
00:21:17Ich zoome das hier auch noch mal für euch heran.
00:21:28Leider sieht es so aus, als könnte ich hier nicht reinzoomen.
00:21:34Jetzt aber.
00:21:34Okay.
00:22:00[TIPPEN]
00:22:06Wir werden sehen, was dabei herauskommt.
00:22:09Keine Fehler machen.
00:22:11Ja, genau.
00:22:12Das ist sehr wichtig.
00:22:13Wenn man das nicht ans Ende seiner Prompts schreibt,
00:22:15funktionieren sie nicht so gut.
00:22:18Aber während das hier läuft, kann ich euch
00:22:21ein wenig über ihre Arbeit erzählen.
00:22:25Wenn ihr auf die Svelte-Website geht
00:22:28und unsere KI-Dokumentation aufruft, bekommt ihr den Überblick.
00:22:32Wir haben ein MCP veröffentlicht, das eigene CLI-Tools mitbringt.
00:22:36Und es hat eine Reihe von –
00:22:40oh, hey, er hat das in den letzten fünf Minuten gefixt.
00:22:43Es sieht also anders aus als noch vor fünf Minuten.
00:22:46Aber wir haben mehrere Tools, die es auf eurem Rechner aktiviert.
00:22:51Die meisten davon dienen dazu –
00:22:53oder die ersten zwei dienen dazu, gute Informationen
00:22:58über Svelte zu erhalten.
00:22:58Es bringt eurem Agenten bei, wie man die Dokumentation liest,
00:23:03und zwar ganz spezifisch so,
00:23:05dass er genau die gesuchten Informationen findet,
00:23:08ohne die gesamte Doku dumpen zu müssen
00:23:11oder Zeit und Kontext mit unnötigem Suchen
00:23:12zu verschwenden.
00:23:15Es gibt auch diesen genialen Svelte-Autofixer,
00:23:17den sie gebaut haben. Er erkennt Muster,
00:23:21die LLMs oft verwenden, die aber nicht gut sind, und korrigiert sie.
00:23:26Zudem bietet es eine Integration mit unserem Playground,
00:23:33den man direkt hier nutzen kann.
00:23:37Eine weitere coole Sache ist eine
00:23:39unserer zentralen Design-Entscheidungen
00:23:44bei all diesen KI-Themen:
00:23:46Wie machen wir das für Agenten UND Menschen nützlich?
00:23:52Wir wollen nicht, dass das eine undurchsichtige Sache ist,
00:23:55bei der euer Agent auf magische Weise Dinge weiß,
00:23:59ihr selbst aber nicht.
00:24:00Es wäre sonst schwer nachzuvollziehen.
00:24:01Im Grunde versuchen wir also alles,
00:24:04was wir tun, auch in die Dokumentation zu integrieren.
00:24:07Unsere veröffentlichten Skills,
00:24:09die Teil des Open-Code- oder Cloud-Code-Plugins sind,
00:24:12wenn man sie installiert,
00:24:15veröffentlichen all ihre Inhalte auch in der Doku.
00:24:18Ihr könnt also immer sicher sein: Wenn ihr euch fragt,
00:24:20welche Best Practices wir eurem LLM vermitteln,
00:24:25könnt ihr sie selbst nachlesen.
00:24:27Sie werden immer so auf unserer Seite stehen.
00:24:31Schauen wir mal zurück, wie viel Arbeit
00:24:34das Ding schon geleistet hat.
00:24:35Bisher noch nicht viel.
00:24:39Oder vielleicht doch eine Menge.
00:24:45Ja, da passiert gerade viel beim Styling.
00:24:56Ich rufe einfach mal meinen Localhost auf
00:25:00und schaue, was es gemacht hat.
00:25:03Nichts.
00:25:07Okay, nun, ich möchte das hier nicht aufhalten,
00:25:10während es noch den ganzen Prozess durchdenkt.
00:25:12Das könnte eine Weile dauern.
00:25:13Falls wir am Ende noch Zeit haben, schauen wir uns an,
00:25:15was das LLM für unser handwerkliches Kartoffelkanonen-Business
00:25:19entworfen hat.
00:25:20Aber ja, das ist die KI-Entwicklung, die wir
00:25:25in den letzten Monaten vorangetrieben haben.
00:25:26Fantastisch.
00:25:32Ja, extrem relevant in dieser neuen Ära.
00:25:37Ich würde wirklich gerne wissen, was als Nächstes kommt.
00:25:40Worauf freut ihr euch am meisten?
00:25:46Das nächste Release wird SvelteKit 3 sein.
00:25:51Daran arbeiten wir momentan aktiv.
00:25:53Aber es wird kein Riesending mit Unmengen neuer Features.
00:25:56mit massenhaft neuen Funktionen.
00:25:57Es ist im Grunde eine Gelegenheit, vieles
00:25:59vom alten Kram zu entfernen, sozusagen den Tisch zu decken,
00:26:02damit wir all die aufregenden neuen Dinge bauen können.
00:26:06Die größte Änderung ist die Nutzung der Environment-API,
00:26:09jetzt, wo Vite 6 buchstäblich vor zwei Stunden veröffentlicht wurde.
00:26:15Und es wird Svelte 5 als Mindestversion voraussetzen.
00:26:21Ihr könnt also weiterhin Svelte 4 benutzen.
00:26:25Und darüber hinaus werden wir uns darauf konzentrieren,
00:26:29Async Svelte und Remote Functions stabil zu machen.
00:26:33Hört sich gut an.
00:26:37Ich habe läuten hören, dass ich jetzt
00:26:41an Elliot übergeben werde, weil das LLM
00:26:44fleißig am Arbeiten war.
00:26:46Willst du uns zeigen, was du hast?
00:26:47Wie es so oft läuft, wurde es genau eine
00:26:49Millisekunde nach unserem Wechsel zum nächsten Punkt fertig.
00:26:55Schauen wir mal hier rein.
00:26:59Ja, das ist unser handgemachter Kartoffelkanonen-Shop,
00:27:03den wir gerade für etwa einen Dollar an Tokens erstellt haben.
00:27:07Und wenn man so durch den Code schaut,
00:27:13hat es wirklich gute Arbeit geleistet, nichts Verrücktes gemacht
00:27:17und das genutzt, was ich als Best Practices für Svelte betrachte.
00:27:22Probiert es mal aus.
00:27:25Lasst uns wissen, wie es euch gefällt.
00:27:27Ich bin wirklich beeindruckt von der Arbeit,
00:27:29die Paolo und die anderen an all diesem AI-Kram geleistet haben.
00:27:33Und wir möchten uns stetig verbessern.
00:27:35Also gebt uns euer Feedback, wann immer ihr welches habt.
00:27:38Danke.
00:27:40Klasse, die Demo-Götter sind heute auf unserer Seite.
00:27:45Sollen wir die Runde für Fragen öffnen?
00:27:47Ich glaube, wir haben schon einige im Chat.
00:27:51Ich fange mal an, okay?
00:27:53Wir haben hier eine zu Remote Functions.
00:27:57Wird es Streaming für Remote Functions geben?
00:28:00Die DX von Remote Functions ist einfach so toll.
00:28:03Man möchte sie überall einsetzen.
00:28:05Ja, ich denke, Richard kann das beantworten,
00:28:06da du in diesem Bereich tätig bist.
00:28:10Ja, lustig, dass du das erwähnst.
00:28:12Ich baue nämlich gerade selbst eine App,
00:28:15die genau diese Funktion benötigt.
00:28:17Und wir – Simon hat vor einer Weile an einem PR gearbeitet,
00:28:22der Teile davon implementiert hat.
00:28:23Seitdem haben sich unsere Vorstellungen
00:28:28zum Design ein wenig weiterentwickelt.
00:28:31Aber es ist etwas, das wir unbedingt angehen wollen.
00:28:35Ja, wenn wir das hier in einer Woche machen würden,
00:28:40könnten wir vielleicht sagen: Hier ist der Pull Request.
00:28:43Soweit sind wir noch nicht ganz.
00:28:44Aber seid versichert, es hat eine sehr hohe Priorität.
00:28:47Und wir freuen uns sehr auf dieses Feature.
00:28:49Für diejenigen, die nicht vertraut sind: Im Grunde
00:28:51reden wir von einer Echtzeit-Version
00:28:55der Query-Funktion, bei der man Daten
00:28:59vom Server anfordert und ein Async Iterable zurückerhält,
00:29:04das jedes Mal, wenn es neue Daten gibt,
00:29:09diese an den Client weitergibt.
00:29:12So hat man Echtzeitdaten ohne jegliches Polling
00:29:15oder ähnliches.
00:29:16Und sobald die Seite diese Daten nicht mehr anzeigt,
00:29:21wird die Anfrage beendet.
00:29:23Und das Async Iterable räumt sich selbst auf.
00:29:26Es ist einfach eine sehr schöne Art,
00:29:28über diese Echtzeit-Probleme nachzudenken.
00:29:31Ja, darauf freue ich mich sehr.
00:29:33Um das ganz klar zu sagen: Wenn Rich sagt,
00:29:35dass wir uns bald darum kümmern, meint er,
00:29:38dass Elliot mich gerade davon abhält,
00:29:40daran zu arbeiten.
00:29:41Ich warte darauf, dass er etwas fertigstellt.
00:29:43Sobald ich mit meiner aktuellen Aufgabe durch bin,
00:29:45sind wir dran.
00:29:46Schön.
00:29:50Wir haben noch eine Frage.
00:29:52Und zwar: Warum Svelte gegenüber anderen Frameworks wählen?
00:29:55Offensichtlich halten wir es für das beste und fähigste Framework.
00:30:07Aber der wahre Grund, sich heutzutage
00:30:11für ein Framework zu entscheiden,
00:30:13ist ehrlich gesagt, dass es einem mehr Spaß macht als die anderen.
00:30:18Es geht viel mehr um persönliche Vorlieben
00:30:20als um irgendetwas anderes.
00:30:22Und besonders heutzutage, wo es
00:30:24wirklich einfach ist, zwischen Frameworks zu wechseln,
00:30:28hat man einen magischen Zauberer zur Hand, der einem zeigt:
00:30:32„Ich bin es gewohnt, das in Vue so zu machen.
00:30:35Wie mache ich das in Angular?“ oder was auch immer.
00:30:37Die KI kann das.
00:30:38Die Lernkurve wurde in der heutigen Zeit
00:30:43praktisch abgeflacht.
00:30:45Man sollte also das Werkzeug nutzen, mit dem man am produktivsten ist
00:30:49und mit dem man am liebsten arbeitet.
00:30:53Ein Teil davon ist die Community um das Projekt.
00:30:57Ein anderer Teil ist die allgemeine Philosophie des Projekts.
00:31:02Was man heutzutage aber meiner Meinung nach nicht tun muss,
00:31:05ist eine Entscheidung danach zu treffen, welches Framework X oder Y kann.
00:31:11Denn sie können im Grunde alle das Gleiche,
00:31:13oder welches Framework das größte Ökosystem hat.
00:31:16Denn das ist wirklich kein Problem mehr.
00:31:18Wählt also einfach das Framework, das am meisten Spaß macht.
00:31:21Und wir finden, dass das offensichtlich Svelte ist.
00:31:26Fantastische Antwort.
00:31:27Gefällt mir.
00:31:29Als Nächstes fragt jemand: Gibt es Neuigkeiten zum Thema Cache?
00:31:35Ja, ich denke, hier geht es wahrscheinlich um Remote Functions.
00:31:38Im Kontext von Remote Functions
00:31:41haben wir noch keine Cache-API.
00:31:45Es gibt einen internen Vorschlag.
00:31:48Das ist in Arbeit.
00:31:51Es wurde wegen all der anderen laufenden Arbeiten kurz beiseitegelegt.
00:31:55Aber es wird bald wieder aufgegriffen.
00:31:58Und dann werden wir eine wirklich schöne Caching-API haben,
00:32:01die mit Remote Functions integriert ist.
00:32:05Großartig.
00:32:06Wir haben eine etwas lockerere Frage.
00:32:08Was wäre dein Traumort für ein Svelte Summit?
00:32:10Oh, wow.
00:32:13Wollen wir spontan eine kleine Runde machen?
00:32:16Du bist stummgeschaltet, Elliot.
00:32:22Also, wenn wir von „Summits“ (Gipfeln) sprechen,
00:32:24hätten wir den Everest, den K2...
00:32:28Nein, aber für mich spielt der Ort keine so große Rolle.
00:32:34Weil ich sowieso hauptsächlich Zeit
00:32:36mit den anderen Svelte-Entwicklern verbringe.
00:32:38Auch wenn es kitschig klingt: Eigentlich ist es überall toll.
00:32:43Aber Europa ist echt cool.
00:32:46Fast überall dort gibt es Orte,
00:32:48an denen ich noch nicht war und die ich gerne sehen würde.
00:32:51Ich freue mich immer über einen Grund, ins Ausland zu reisen.
00:32:56Es gibt in der Svelte-Welt diese Tendenz,
00:33:01überall das Präfix „SV“ davorzusetzen.
00:33:04Welches Wort man auch immer nimmt,
00:33:06um eine Library oder ein Konzept zu benennen,
00:33:08man setzt einfach SV davor.
00:33:11Ich denke, wenn wir das konsequent durchziehen würden,
00:33:12müssten wir unsere Konferenz in Svalbard abhalten.
00:33:15Schön.
00:33:20Das ist eine norwegische Inselgruppe.
00:33:23Hast du das gerade spontan gegoogelt?
00:33:27Das kam tatsächlich neulich erst in einem Gespräch auf.
00:33:31Ja, ganz zufällig.
00:33:35Ja.
00:33:38Wenn ich wirklich träumen darf, wäre mein Traumort
00:33:41tatsächlich auf einem Boot.
00:33:45Einfach auf dem Meer.
00:33:47Schönes Wetter.
00:33:49Und dann einfach drei Tage auf einem Boot. Das wäre cool.
00:33:52Das wäre cool.
00:33:55Klingt alles wunderbar.
00:33:57Ich freue mich schon auf das nächste Svelte Summit.
00:34:00Und passend zum Thema Community und Events
00:34:03haben wir die Frage: Wie kann man
00:34:05sich bei Svelte einbringen? Gibt es Events oder
00:34:07Community-Möglichkeiten?
00:34:11Es finden ständig Events statt.
00:34:13Auf sveltesociety.dev findet ihr
00:34:15einen Veranstaltungskalender.
00:34:16Dort gibt es auch viele Infos dazu, wie man am besten
00:34:19mitmachen kann. Besonders wenn es in eurer Gegend
00:34:22noch nichts gibt und ihr Interesse hättet,
00:34:25eine eigene Svelte Society Gruppe zu gründen,
00:34:28ist sveltesociety.dev die richtige Anlaufstelle.
00:34:33Genau, und wenn ihr ganz neu seid, kommt in den Discord
00:34:36und sagt einfach „Hi“ in einem der vielen Kanäle.
00:34:41Es gibt auch spezielle Kanäle für die verschiedenen Gruppen
00:34:47oder Regionen.
00:34:49Meistens sind das Verweise auf andere Discord-Server
00:34:55in der jeweiligen Landessprache.
00:34:57Es gibt zum Beispiel auch einen Discord-Kanal
00:35:00der German Svelte Society.
00:35:01Schaut also einfach im Discord vorbei,
00:35:06dann ergibt sich der Rest von selbst.
00:35:08Und ansonsten ist der allgemeine Svelte-Kanal
00:35:12auch ein netter Ort zum Verweilen.
00:35:16Ja, die Svelte-Leute sind wirklich liebenswert.
00:35:18Schaut also unbedingt mal bei ihnen vorbei.
00:35:22Wir haben noch eine Frage zum Thema KI.
00:35:24Elliot, du hast das ja schon angesprochen.
00:35:26Jemand fragte: Es ist toll zu sehen, wie Frameworks sich
00:35:29an die Welt der KI-Agenten anpassen.
00:35:31Gibt es Statistiken dazu, ob Agenten standardmäßig Svelte wählen?
00:35:36Nein, nicht wirklich.
00:35:37Vielleicht könnten wir dazu ein Signal
00:35:44über etwas wie v0 erhalten,
00:35:46wo wir solche Telemetriedaten sehen.
00:35:49Aber Svelte im Allgemeinen hat –
00:35:53ich sage mal „Svelte“, aber ich meine die Leute hinter Svelte –
00:35:57eine eher ablehnende Haltung gegenüber
00:36:01dem Sammeln von Telemetriedaten eingenommen.
00:36:06Im Grunde sind die einzigen Daten, die wir haben,
00:36:08solche, die öffentlich zugänglich sind.
00:36:10Wir können uns also die NPM-Download-Trends ansehen,
00:36:14die momentan aus irgendeinem Grund völlig durch die Decke gehen.
00:36:18Man sollte sie also vielleicht nicht als absolut gesetzt ansehen.
00:36:20Keine Sorge.
00:36:22Aber ja, wir sammeln aus Datenschutzgründen
00:36:25wirklich keine Daten über unsere Nutzer.
00:36:27Wir wollen nicht auf diese Weise auf euren Rechnern präsent sein.
00:36:30Unsere Daten stammen also aus öffentlichen Quellen
00:36:35und vielleicht einige nützliche Infos über Vercel-Kanäle.
00:36:43Anekdotisch gesehen: Wenn man LLMs fragt, was man wählen soll,
00:36:46oder was das Beste ist, wird Svelte oft genannt.
00:36:51Das ist zumindest schon mal schön.
00:36:53Aber ob sich das auch in der Wahl von Svelte niederschlägt,
00:36:56wenn man es im Prompt nicht explizit angibt, ist eine andere Frage.
00:37:01Ja, das ist sehr interessant.
00:37:03Sobald man sie auffordert, über das ideale Tool nachzudenken,
00:37:06nennen sie oft Svelte.
00:37:08Aber wenn man nicht sagt: „Ich möchte, dass du dieses Framework nutzt"
00:37:11oder „Ich möchte das beste Framework",
00:37:12sondern nur „Bau mir eine App", nehmen sie standardmäßig React.
00:37:17Und da können wir momentan nicht viel dran ändern.
00:37:21Deshalb konzentrieren wir uns darauf, sicherzustellen,
00:37:23dass die Teams, die sich für Svelte entscheiden,
00:37:27die bestmögliche Erfahrung machen.
00:37:29Und dass KI-Agenten die bestmöglichen Voraussetzungen haben,
00:37:31die Dokumentation zu verstehen und Fehler zu finden.
00:37:36Ja, und wie man am Portal-Blog und der Potato Cannon-Website sieht,
00:37:42werden sie immer besser darin,
00:37:46mit dem Kontext, dem MCP und so weiter umzugehen.
00:37:50Man kommt damit inzwischen also ziemlich schnell ziemlich weit.
00:37:56Schön.
00:37:57Ja, es ist toll zu sehen, wie viel Arbeit ihr da reinsteckt
00:37:58und wie ihr sowohl menschliche Nutzer
00:38:01als auch KI-Agenten berücksichtigt.
00:38:04Wir haben noch ein paar spezifischere Fragen
00:38:06zu Svelte-Funktionen.
00:38:08Eine davon ist: Ist es okay, mehrere Aufrufe
00:38:11derselben Remote-Funktion im Markup zu haben,
00:38:14oder sollte man eine Referenz im Script-Tag nutzen?
00:38:17Ja, das ist es.
00:38:20Du arbeitest gerade daran, also erklär du es.
00:38:24Das, was Rich gerade davon abhält, an Live-Queries zu arbeiten,
00:38:26hat tatsächlich mit dieser Frage zu tun.
00:38:29Ja, es ist völlig okay, dieselbe Remote-Funktion
00:38:35mehrfach aufzurufen und sie an verschiedenen Stellen
00:38:39mehrfach zu referenzieren.
00:38:41Wenn man Remote-Funktionen nutzt,
00:38:44sollte das mentale Modell für Queries so aussehen:
00:38:46Wenn ich eine Query mit einem Argument aufrufe,
00:38:50erhalte ich eine Referenz auf diese Query,
00:38:54und die Query ist etwas anderes als die Daten selbst.
00:38:57Wenn ich also irgendwo in meiner App „getUser" mit der ID 1 aufrufe,
00:39:04erhalte ich überall in der App
00:39:07dieselbe Instanz dieser Query.
00:39:08Die Query-Aufrufe werden app-weit dedupliziert,
00:39:11sodass pro Argument-Satz maximal ein Aufruf erfolgt.
00:39:16Verschiedene Argumente liefern verschiedene Ergebnisse.
00:39:19Gleiche Argumente liefern dieselbe Query.
00:39:21Sie werden über die gesamte App hinweg dedupliziert.
00:39:24Es gibt da momentan noch ein paar seltsame Vorbehalte,
00:39:28und genau daran arbeite ich gerade – sie zu fixen, zu kodifizieren
00:39:33und das Ganze ein wenig klarer zu machen,
00:39:37so wie in den letzten Wochen.
00:39:39Und hoffentlich wird das bald veröffentlicht.
00:39:41Aber ja, die kurze Antwort lautet: Ja.
00:39:44Ruft sie einfach auf und nutzt sie, wo immer ihr wollt.
00:39:47Ja, und um das noch zu ergänzen:
00:39:48Der Grund, warum wir diesen ganzen Aufwand
00:39:51mit dem „await"-Keyword und so weiter betreiben, ist,
00:39:54weil wir möchten, dass ihr so weit wie möglich
00:39:57alles, was eure Komponente benötigt,
00:39:59innerhalb dieser Komponente ausdrücken könnt.
00:40:00Die Zeiten, in denen man Daten hier oben abruft
00:40:04und sie dann vorsichtig an alles weiterreicht, was sie braucht,
00:40:08sind bald vorbei.
00:40:10Aber wenn man erst eine Referenz auf eine Query braucht
00:40:14und diese dann herumreichen muss, dann
00:40:15hätten wir dieses Ziel eigentlich nicht erreicht.
00:40:17Die Idee ist: Wenn diese Komponente Daten braucht
00:40:20und jene Komponente zufällig auch Daten braucht,
00:40:22müssen sie nicht miteinander kommunizieren.
00:40:24Sie können das System einfach über das
00:40:28Query-Interface nach den Daten fragen.
00:40:29Und das System kümmert sich darum, sicherzustellen,
00:40:32dass dies nur zu einer einzigen Anfrage führt
00:40:34und keine Inkonsistenzen zwischen den beiden
00:40:36Komponenten entstehen.
00:40:40Klasse, danke.
00:40:42Hier ist eine Frage zur Animation- und Transition-API.
00:40:47Ist dafür eine Generalüberholung geplant?
00:40:49Es hieß: „Ich fand es mühsam, Flip-Werte für Von/Zu-Größen
00:40:54über Attachments zu übergeben."
00:40:57Ich brenne absolut darauf, daran zu arbeiten.
00:41:02Ich freue mich schon lange darauf.
00:41:04Es gibt so viel zu tun.
00:41:06Ja, alles andere kommt uns ständig in die Quere.
00:41:09Als wir die Attachments-API entworfen haben,
00:41:12hatten wir genau das im Sinn.
00:41:16Transitions und Animationen sind toll.
00:41:19Und sie sind so in das Framework integriert,
00:41:21dass bestimmte Dinge sehr einfach umzusetzen sind.
00:41:25Aber sobald man eine gewisse Grenze überschreitet,
00:41:28können sie einem nicht mehr wirklich helfen.
00:41:29Man braucht mehr programmatische Kontrolle über sie.
00:41:33Und genau da wäre eine programmatische API
00:41:36zur Definition von Transitions und Animationen nützlich.
00:41:42Und die Attachments-API ist—
00:41:46die Idee ist, dass künftig die Attachments-API
00:41:49in Kombination mit einer API, die sagt:
00:41:52„Hey, wenn ich aus dem DOM entfernt werde,
00:41:54warte kurz, bis ich ein kleines Fade-out
00:41:58oder ein kleines Shimmy oder was auch immer machen kann."
00:42:00Und dann kannst du mich aus dem DOM entfernen.
00:42:02Das ist es, was einige dieser fortgeschritteneren
00:42:06Transition- und Animations-Szenarien ermöglichen wird.
00:42:09Aber wir sind einfach noch nicht so weit.
00:42:11Es ist geplant.
00:42:12Es wird passieren.
00:42:13Aber ich kann keinen Zeitrahmen nennen.
00:42:16Sicherlich nicht in den nächsten zwei oder drei Monaten.
00:42:22Gut.
00:42:22Zumindest steht es auf dem Plan.
00:42:24Das hören wir gerne.
00:42:25Cool.
00:42:25Ich denke, wir haben Zeit für eine weitere Frage.
00:42:27Also die letzte.
00:42:29Svelte ist agnostisch, aber was ist die
00:42:32Lieblingsdatenbank der Teammitglieder?
00:42:34Noch eine schnelle Runde.
00:42:37SQLite.
00:42:37Ich habe früher mal Neon für ein kurzes Experiment genutzt,
00:42:47und das war wirklich nett.
00:42:50Ja, SQLite ist gut.
00:42:53Worauf ich wirklich warte, ist, dass diese Sync-Engines
00:42:59richtig gut und überall verfügbar werden,
00:43:02damit wir echte Local-First-Sachen machen können.
00:43:05Und dann—ehrlich gesagt, ist es mir egal,
00:43:09welche Datenbank ich im Backend nutze, das ist meine kurze Antwort.
00:43:13Ja, ich denke—
00:43:15ich weiß nicht, ob ich wirklich einen Favoriten habe, denn—
00:43:18wenn man fragt: „Was ist deine Lieblingsdatenbank?",
00:43:22gibt es so viele verschiedene, weil sie
00:43:24unterschiedliche Dinge besser können.
00:43:26Man muss also wissen, warum man eine
00:43:28Datenbank wählt, um einen Favoriten zu haben.
00:43:31Ich finde Sachen wie Convex sehr interessant für dieses
00:43:36Local-First-Sync-Engine-Thema.
00:43:38Ich finde sie echt cool, sie haben vieles, das für sie spricht.
00:43:41Meine liebste Allzweck-Datenbank
00:43:42ist wahrscheinlich eigentlich Dynamo.
00:43:45Es kann gewöhnungsbedürftig und frustrierend sein,
00:43:47aber es ist wahnsinnig schnell.
00:43:49Und es skaliert extrem gut.
00:43:51Aber ich mag auch SQL sehr gerne.
00:43:55Wenn ich also eine SQL-Datenbank für ein Projekt nutzen kann,
00:43:58werde ich mich wahrscheinlich dafür entscheiden,
00:44:04weil meine Karriere in der Datenanalyse und so begann.
00:44:07SQL ist also das, womit ich quasi aufgewachsen bin.
00:44:09Also ja, ich weiß nicht, ob ich einen Favoriten habe,
00:44:14aber so denke ich darüber nach.
00:44:16Schön.
00:44:20Und wir haben einen Kommentar von Paolo.
00:44:20Ich weiß, du hast ihn vorhin schon erwähnt.
00:44:23Er sagt: „Ich sehe zu viele Farben.
00:44:24Sind wir sicher, dass Rich, Simon und Elliot für Vercel arbeiten?"
00:44:27Mein Stuhl ist schwarz.
00:44:32Ja, Paolo hat mich gedrängt, den Vercel-Hoodie zu tragen,
00:44:35aber es ist zu warm hier drin.
00:44:38Alles klar, Leute.
00:44:40Aber ich habe ihn im Schrank und hole ihn raus,
00:44:45wenn die Tage kälter sind.
00:44:48Das hören wir gerne, immer schön den Merch präsentieren.
00:44:51Großartig.
00:44:54Ja, ich freue mich so auf die Zukunft von Svelte
00:44:55und weiß es wirklich zu schätzen, dass ihr dabei wart,
00:44:58für all eure harte Arbeit hinter den Kulissen.
00:45:01Vielen Dank auch an den Rest des Svelte-Teams,
00:45:03die Maintainer, die heute nicht im Live-Stream sind.
00:45:05Und ein Gruß an die wundervolle Svelte-Community.
00:45:09Ja, danke an Rich, Simon und Elliot, dass ihr heute dabei wart.
00:45:11Dankeschön.
00:45:16Tschüss.
00:45:17War mir ein Vergnügen.
00:45:18Okay, liebes Publikum, geht noch nicht weg,
00:45:20denn bevor wir Schluss machen, haben wir einen Ehrengast.
00:45:23Wir haben Eve vom Vercel Education-Team hier.
00:45:26Hallo.
00:45:31Wie läuft's?
00:45:32Hallo, Eve.
00:45:33Gut.
00:45:33Wie geht's dir?
00:45:34Mir geht's super.
00:45:35Danke.
00:45:36Was für ein geniales Team von Experten hier versammelt ist.
00:45:36Ja.
00:45:40Ein echter Genuss.
00:45:41Alles klar.
00:45:44Möchtest du uns mehr über die Academy erzählen
00:45:45und was du da so ausgeheckt hast?
00:45:47Ja, sehr gerne.
00:45:49Falls ihr es noch nicht gehört habt: Vercel hat jetzt eine Academy.
00:45:50Wir haben 11 Kurse, die bereits online sind.
00:45:55Der neueste davon ging heute live,
00:45:57und zwar—Tadaa—der „Svelte auf Vercel"-Kurs.
00:46:03Das Team war eine große Hilfe dabei,
00:46:10das Ganze über die Ziellinie zu bringen.
00:46:13Darin bauen wir eine Ski-Alert-App.
00:46:15Wenn ihr also Skifahrer seid—
00:46:18oh ja.
00:46:23Ich teile gerade den Bildschirm, ich blende das mal ein.
00:46:25Klasse.
00:46:28Oh, da haben wir's.
00:46:29Da haben wir's.
00:46:30Das macht es gleich spannender.
00:46:31Der „Svelte auf Vercel"-Kurs ist live.
00:46:34Darin baut ihr eine Ski-Alert-App.
00:46:36In unserer heutigen Welt wissen Skifahrer,
00:46:40dass es dieses Jahr eine eher schwierige Saison war.
00:46:43Sehr wenig Schnee.
00:46:47Überall war es zu warm.
00:46:48Deshalb ist es wichtig, benachrichtigt zu werden,
00:46:50sobald es ein guter Skitag ist.
00:46:52Und das ist die App, die wir im Kurs gemeinsam bauen,
00:46:54um genau das zu ermöglichen.
00:46:58Wir haben da alles Mögliche—man kann verschiedene Alarme
00:46:59für unterschiedliche Bedingungen einstellen, damit man,
00:47:02wenn die Bedingungen stimmen, sofort vor Ort ist
00:47:06und keinen der wenigen guten Tage verpasst.
00:47:10Ja, der Kurs deckt Svelte ab.
00:47:13Wie man es auf Vercel deployt.
00:47:17Wie man das AI SDK nutzt.
00:47:19Wie man Workflows einsetzt.
00:47:21Und einige Profi-Tipps für den Produktiveinsatz.
00:47:23Großartig.
00:47:27Wunderbar.
00:47:28Ich glaube fest daran, dass man am besten durch Bauen lernt.
00:47:29Das ist also fabelhaft.
00:47:31Vielen Dank.
00:47:33Wir werden auch einen Link zum Kurs
00:47:34in die Live-Ressourcen packen.
00:47:36Danke, dass du heute bei uns warst, Eve.
00:47:38Klasse.
00:47:41Vielen Dank.
00:47:41Alles klar.
00:47:42Und damit sind wir am Ende unserer Live-Session angelangt.
00:47:46Vielen Dank an unsere Community,
00:47:49dass ihr eure Zeit mit uns verbracht habt.
00:47:51Ich flunkere nicht, wenn ich sage: Der Chat war heute echt am Brennen.
00:47:52Es war toll, das zu sehen.
00:47:54Wir hoffen, es hat euch gefallen.
00:47:56Und um es mit Rich Harris' Worten zu sagen: Svelte ist eine Lebenseinstellung.
00:47:58Also probiert es aus.
00:48:02Baut mehr Svelte-Sachen.
00:48:03Wenn ihr bei künftigen Community-Sessions dabei sein wollt,
00:48:05findet ihr alle Details auf unserer Community-Plattform
00:48:08unter [community.vercel.com/live](https://community.vercel.com/live).
00:48:11Vielen Dank an alle.
00:48:13Man sieht sich.
00:48:15Tschüss.
00:48:16안녕.

Key Takeaway

Das Svelte-Team präsentiert mit Async Svelte, Remote Functions und dedizierten KI-Tools eine neue Ära der Webentwicklung, die Komplexität reduziert und die Entwicklererfahrung radikal vereinfacht.

Highlights

Einführung von "Async Svelte", das die direkte Nutzung des await-Keywords in Komponenten ermöglicht.

Vorstellung von "Remote Functions" in SvelteKit zur nahtlosen Kommunikation zwischen Client und Server.

Präsentation neuer KI-Entwicklungen, einschließlich eines MCP-Servers und Plugins für Open Code.

Ankündigung von SvelteKit 3, das auf Vite 6 basiert und Svelte 5 als Mindestversion voraussetzt.

Diskussion über die Philosophie von Svelte, die Freude am Entwickeln und die Ablehnung von Telemetriedatenerfassung.

Start des neuen "Svelte auf Vercel"-Kurses in der Vercel Academy zum Bau einer Ski-Alert-App.

Ausblick auf zukünftige Features wie Streaming für Remote Functions und eine neue Caching-API.

Timeline

Begrüßung und Vorstellung des Svelte-Kernteams

Maya Avendano eröffnet die Vercel-Community-Session und stellt die prominenten Gäste aus dem Svelte-Team vor. Rich Harris, der Schöpfer von Svelte, berichtet von seinen Anfängen im visuellen Journalismus vor zehn Jahren und seinem Wechsel zu Vercel. Simon erklärt seinen Weg vom Angular-Entwickler zum Svelte-Maintainer, den er über einen Hackathon einschlug. Elliot ergänzt die Runde und berichtet von seiner Arbeit an der Vercel-Website sowie der Implementierung von Async SSR. Diese Einleitung verdeutlicht die tiefe Verwurzelung des Teams innerhalb der Vercel-Struktur und die langjährige Expertise der Maintainer.

Definition von Svelte und SvelteKit

Das Team erläutert die grundlegenden Konzepte hinter Svelte als deklaratives Komponenten-Framework mit einem Compiler-First-Ansatz. Im Gegensatz zu React oder Vue wandelt Svelte den Code in hochperformantes Vanilla-JavaScript um, was kompaktere und elegantere Lösungen ermöglicht. SvelteKit wird als das dazugehörige Meta-Framework beschrieben, das vergleichbar mit Next.js Funktionen wie Routing und Server-Side Rendering bietet. Es fungiert als die Schicht, die alle notwendigen Werkzeuge für den Bau vollständiger Anwendungen bereitstellt. Dieser Abschnitt legt das Fundament für die folgenden technischen Demonstrationen und erklärt die Synergie zwischen Basis-Framework und Kit.

Deep Dive: Async Svelte und der Playground

Rich Harris demonstriert im Svelte-Playground die bahnbrechende Neuerung des asynchronen Svelte. Er zeigt, wie das await-Keyword direkt in Komponenten genutzt werden kann, um Daten ohne den Umweg über komplexe Effekte oder lokalen Status zu laden. Besonders hervorgehoben werden Hilfsfunktionen wie getAbortSignal zur Vermeidung von Race Conditions und state.eager für sofortige UI-Updates. Harris illustriert zudem, wie Ladezustände mittels effect.pending einfach koordiniert werden können, um beispielsweise Zitate und Bilder synchron anzuzeigen. Diese Neuerung reduziert den Boilerplate-Code massiv und macht asynchrone Logik so intuitiv wie synchronen Code.

Vorstellung der Remote Functions

Simon präsentiert die experimentellen Remote Functions in SvelteKit, welche die Grenze zwischen Client und Server fast unsichtbar machen. Er führt einen Zähler ein, dessen Status auf dem Server liegt, aber durch einfache Funktionsaufrufe im Frontend manipuliert werden kann. Durch die Nutzung von remote-queries und commands werden Daten automatisch aktualisiert, wobei das System die Synchronisation übernimmt. Ein beeindruckendes Beispiel zeigt einen von einer KI generierten Blog, der ausschließlich Remote Functions anstelle der klassischen Load-Funktionen nutzt. Dies markiert einen Paradigmenwechsel in der Art und Weise, wie Datenflüsse in SvelteKit-Apps zukünftig strukturiert werden.

KI-Integration und MCP-Server

Elliot erläutert die Fortschritte im Bereich der künstlichen Intelligenz, insbesondere den neuen MCP-Server (Model Context Protocol). Er demonstriert, wie ein Plugin für Open Code genutzt werden kann, um eine komplette Website für einen fiktiven Kartoffelkanonen-Shop zu generieren. Das System enthält einen Svelte-Autofixer, der typische Fehler von Large Language Models erkennt und korrigiert, um Best Practices einzuhalten. Wichtig ist dem Team dabei, dass die KI-Agenten denselben Zugriff auf die Dokumentation haben wie Menschen, um Transparenz zu gewährleisten. Die Demonstration zeigt, wie schnell Entwickler heute vom Prompt zum funktionierenden Prototypen gelangen können.

Ausblick auf SvelteKit 3 und zukünftige Roadmap

Das Team gibt einen exklusiven Ausblick auf das kommende Release von SvelteKit 3, das vor allem technische Altlasten entfernen soll. Die wichtigste technische Änderung ist die Integration der neuen Environment-API von Vite 6, das kurz vor der Session veröffentlicht wurde. SvelteKit 3 wird Svelte 5 als Mindestvoraussetzung haben, was den Weg für die Stabilisierung von Async Svelte und Remote Functions ebnet. Rich Harris betont, dass es weniger um eine Flut neuer Features geht, sondern darum, den Tisch für zukünftige Innovationen zu decken. Dieser Abschnitt vermittelt Sicherheit für Entwickler, die ihre Projekte auf die nächste Generation des Frameworks vorbereiten wollen.

Fragerunde: Streaming, Caching und Framework-Wahl

In einer ausführlichen Q&A-Session beantwortet das Team Fragen zu technischen Details und der allgemeinen Philosophie. Rich Harris bestätigt, dass Streaming für Remote Functions eine hohe Priorität hat, um Echtzeitdaten ohne Polling zu ermöglichen. Zum Thema Framework-Wahl wird betont, dass heutzutage persönliche Freude und Produktivität wichtiger sind als rein technische Feature-Listen. Auch die Ablehnung von Telemetriedaten wird thematisiert, wobei Svelte sich klar für den Datenschutz der Nutzer positioniert. Die Runde endet mit humorvollen Einblicken in die Lieblingsdatenbanken der Entwickler, von SQLite bis DynamoDB, und dem Wunsch nach einer Konferenz in Svalbard.

Vercel Academy: Svelte-Kurs und Abschluss

Zum Abschluss der Session stellt Eve vom Vercel Education-Team den brandneuen Kurs "Svelte auf Vercel" in der Vercel Academy vor. Teilnehmer bauen in diesem praxisorientierten Kurs eine Ski-Alert-App, die das AI SDK und moderne Workflows nutzt. Der Kurs soll zeigen, wie man Svelte-Anwendungen nicht nur baut, sondern auch professionell auf Vercel deployt und betreibt. Maya Avendano schließt die Sitzung mit einem Dank an die Community und den Hinweis auf die lebhaften Diskussionen im Chat ab. Das Schlusswort erinnert daran, dass Svelte mehr als nur ein Werkzeug ist, nämlich eine Lebenseinstellung, die zum Ausprobieren einlädt.

Community Posts

View all posts