Hacker News new | past | comments | ask | show | jobs | submit login
SvelteKit Is in Public Beta (svelte.dev)
315 points by benmccann on March 23, 2021 | hide | past | favorite | 114 comments



What is SvelteKit? The linked page assumes I already know and have just been waiting for an announcement.

I have heard a bit about Svelte. I love the analogy with spreadsheets, where original spreadsheets reevaluated every cell whenever any cell changed. Modern spreadsheets maintain a dependency graph, so when something changes, only the direct dependencies are even evaluated. If any of them change, then only their dependencies are evaluated, etc., recursively. So React's repeated full virtual DOM diff at runtime vs. Svelte's focused dependency graph, created at compile time. Very interesting.

But that's Svelte, or at least I think it is. So what is SvelteKit?


Added a paragraph to the blog post:

> Think of it as Next for Svelte. It's a framework for building apps with Svelte, complete with server-side rendering, routing, code-splitting for JS and CSS, adapters for different serverless platforms and so on.

> If you're familiar with Sapper, SvelteKit is Sapper's successor.


As @skybrian points out below, this doesn't help much if you don't know what Next and Sapper are, and especially if you don't know what Svelte is.

Here's my attempt.

1. Svelte is a JavaScript component framework, i.e. it offers a way to write reusable UI components in JavaScript. (Other popular frameworks include React, Angular, and Vue.)

Each major framework solves the problem of code reuse in a different way, and components written in one framework are generally hard to adapt to other frameworks, if only because each framework includes some JS that you have to run in order to make its components work, and it hurts performance to run three frameworks when you could have just run one, so developers fight a lot about which framework is best.

2. SvelteKit supports "server-side rendering" (SSR) for Svelte. JavaScript frameworks let you implement user interfaces in JS, but by default, that JS only runs ("renders" the UI) on the client side, in the user's browser.

Client-side rendering hurts performance if the user has a slow Android phone. But even on fast devices, client-side rendering adds round trips to the server, first requesting the page, then requesting the JS, then finally running the JS to render. It's usually faster to render HTML on the server, and then to progressively enhance it on the client side.

Server-side rendering requires you to buy into an even bigger framework, with JavaScript component code running on the server and on the client, but it can offer nifty features, like "code splitting," sending down just the right JS needed for the current page (or the current "route," which is a bunch of pages of the same type with similar URLs). SSR frameworks have to handle not just UI components, but entire pages, and deciding based on the URL which page to show, which is called "routing."

For React server-side rendering, you'll typically use Next.js. Vue offers its own server renderer. Angular offers "Angular Universal." Preact offers WMR.

Svelte had an older SSR framework called "Sapper." Sapper is now dead/deprecated code, and SvelteKit is the new thing.


That was outstanding. Decades ago, before they invented juice boxes, we kids enjoyed milk and cookies while listening to carefully worded, age-appropriate explanations. Heaven help me, sometimes that combination still hits the spot. Thank you.


Elegantly written, thanks.


It's an application framework for Svelte which replaces Sapper.

It uses Vite[1] for development and has been designed from the start to be able to produce static sites a la Gatsby or Next (Sapper wasn't great at that). Svelte Kit runs SSR on Node JS servers like Sapper did, but also on cloud functions and I think even Cloudflare Workers which do not run Node.

[1] https://vitejs.dev/


That doesn't help. What is Sapper? This is defining web tech in terms of other web tech.


See Svelte as a JavaScript library like React or Angular, which allows you to develop web applications easily.

Now, SvelteKit is bringing the library to the _framework_ level (big big emphasis on "framework", we all have different definitions for what a framework is), which adds easy routing, server-side rendering, optimized JavaScript bundles per page for the client, etc.


Bit of a nitpick, but wouldn't the comparison be SvelteKit as similar to Angular, and Svelte similar to React?


> It's an application framework for Svelte

Doesn't that ring a bell?


Not another framework please. What's wrong with developing libraries and releasing them separately?


Because to start a project you have to spend days and even months researching libraries, the current best practices, etc. and then glue them all together with some monster build system (webpack, etc.) and pray that one library doesn't update to be incompatible, or that the library maintainer loses interest and maintenance, etc. And then if you look at another project you have to learn everything again because they took an entirely different approach of glueing together libraries.

These frameworks are an opinionated take on project structure meant to save time and effort. Can they build anything and everything with JS? No, and they don't make such promises. Can they build most apps and things people want to build, and with a much faster and simpler setup? Absolutely, yes.

But honestly this isn't the thread to fight the framework vs. library fight. That ship sailed _years_ ago after create-react-app got popular.


Isn't that exactly what's happening? Svelte is a library and SvelteKit is a framework built on top of it? I think.


That's pretty much it, yeah. But on HN, you will always find framework = bad comments.


SvelteKit is a fullstack framework with SSR, using Svelte for the frontend.

I have been building JS apps since '99 and once I found Svelte/SvelteKit, I have not looked back.

It really lets you stay in the flow of creativity while building.


SSR = server side rendering.


For anyone interested, follow the first link in the announcement and read the second section, named What is SvelteKit?


I get kind of annoyed when people can't do at least 10 or less minutes of their own research. I believe it states on the front page that its akin to Next for svelte and the successor svelte/sapper. If you don't know what those are then perhaps just follow the links backwards and read?


Here's the blogpost from a few months ago: https://svelte.dev/blog/whats-the-deal-with-sveltekit

TL;DR, it is the new officially recommended way to build apps with the Svelte framework. Compared to its predecessor, it promises much faster local development based atop Vite and ESBuild, and it can be deployed as a static site, or a node server, or as serverless functions (whereas previously you only had either server or static site options). There are a ton of other small new features as well in the docs.


There's a link right next to the main headline - "What's the deal with SvelteKit"


Interestingly Clojurescript had such a web framework far before Svelte: https://hoplon.io/


Third paragraph has a link: https://kit.svelte.dev/docs

Top has a link to a prior blog post: https://svelte.dev/blog/whats-the-deal-with-sveltekit


Web dev with Svelte brings me back to the early days of web development - php, MySQL, jquery and XMLhttprequest. I personally have never understood all the tooling required to build a modern day react app, and oh how I have tried. Svelte dev as a way-of-thinking-framework is as close to the fundamentals as I think you can get. The dx is amazing and sveltekit takes it to the next level. #sveltalowda

Edit: embarrassing typo


How does Sveltekit compare to Elder.js? I've been trying Elder.js out and I really like how easy it is to specify which parts to hydrate.

https://elderguide.com/tech/elderjs/


ElderJS is a very specific use-case, which is mass static generation, designed for SEO heavy sites. It's a very narrow usecase.

SvelteKit is designed to let you build anything at all with Svelte.

ElderJS, JungleJS, Primo etc, are all specialisms.


interesting distinctions... thanks.


I simply cannot wait for Svelte to blow up in popularity! It is by far the most promising web technology to me.


+1 I’m building my second app using svelte now and I’ve had a great experience. Svelte gives me what I need without a bunch of cruft that I don’t, and it lets me build components that embed in existing sites really well. The only thing missing was a good server side rendering story which I didn’t need short-term but long-term will be really useful.


Self promotion: For those interested, I did a video tour of the examples provided with SvelteKit (38 minute) - https://www.youtube.com/watch?v=qmwJTI-vH6w

Definitely a little rough around the edges (the real-world application has bugs), but it is public beta, so it's not surprising.


Hey I hope you don't mind a bit of constructive criticism: you should look into getting a pop filter for your mic. I'm very sensible to pops and esses so it might not bother others but it's a very cheap upgrade that you might want to consider :)

You can also experiment by placing at a 45°angle (point the mic towards your mouth, not your mouth towards the mic) and placing it slightly sideways. It'll help with sibilances and pops.

Anyways, thanks for sharing the video, I was actually looking for an overview of SvelteKit's features.


Thanks for the feedback- I'm always looking to improve (I just bought a new webcam). I'll look into a pop filter today!


Just to provide some balance to the argument, the popping doesn't bother me the slightest. :)

But yeah, putting the mic angled on the side would probably be an improvement.


The code examples page is a thing of beauty and simplicity, bravo! https://svelte.dev/examples#hello-world


There's also a tutorial [0] which goes through these examples one by one explaining in detail how each concept works. I highly recommend it to anyone interested in learning this framework.

[0]: https://svelte.dev/tutorial


I don't understand why the second example caches the src, checks if the current src matches the cached src, and if not sets both the src and the alt. Does the complier fully check the codebase to ensure they are always set together?


This makes me very glad I have never worked in JavaScript. Why does hello world compile to something with three explicit no-ops and what the heck is safe_not_equals? I had to wonder what an unsafe way to determine equality is and looked this and found this is apparently the code?

export function safe_not_equal(a, b) { return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); }

Why is it possible for a != a to not always be false and b == b to not always be true? How did Javascript defeat the most immutable rule of basic logic discovered by Aristotle 2000 years ago?


Javascript does a lot of implcit conversions, it was badly designed and has dynamic types which means a lot of runtime checks, these quirks can't be removed with breaking a lot of legacy code.

Unsafe equality: "1" == 1 is true (string and float, https://dev.to/mkrl/javascript-quirks-in-one-image-from-the-...).

Yet, like with C, you learn the different ways you can shoot yourself in the foot over time and avoid them. In 10 years I've never written a safe_not_equals function, although explicit object/null checks are a thing, but it wouldn't surprise me if libraries used by millions that may end up in Internet Explorer go that extra step. Each language has it's particular use-case, JS happens to be the language of web development.


Although I agree with you in principle, in practice most of js devs never worry about such things. It's mostly library authors and such. And there are cases where a != a, I think for NaN (not a number).


Fair enough. It makes sense for NaN, but languages like Rust and the various ML variants solve that by defining floating point numbers to not be a type where equality is a valid binary operation.


> Even though it was far from ready, SvelteKit was the only framework that matched our esoteric requirements. (Anyone who has worked in a newsroom and done battle with their CMS will know what I'm talking about.)

I would be interested to hear more about the esoteric requirements; whether they're performance-related, have to do with what's representable in the CMS, or something else. At any rate, those NYT covid tracker pages are great and I have (sadly) spent a lot of time with them over the past year.


things like:

• we can't have any dynamic pages, everything has to be static HTML

• we don't control the actual page; our job is to create a fragment of HTML that the CMS stitches into the body, then associate that fragment with some publish metadata...

• ...but during development, we need a simulacra of the NYT article template

• we have to be able to create AMP versions of almost every page

• our old app was already fairly Svelte-centric, and we wanted to reuse as much as possible

• we wanted to use client-side navigation to avoid page reloads (while capturing custom navigation analytics) e.g. because it makes no sense to make people load MapboxGL repeatedly

It's possible that we could have coaxed one of the existing static site generators into fulfilling all these requirements, but it seemed like we'd be in uncharted territory without the benefit of having the SSG maintainer on staff!


Are there any plans to support deno?


Not concrete plans but I expect it will happen, yes (at the very least in the sense of having an `adapter-deno` to allow the built app to run in Deno; running SvelteKit _itself_ in Deno is a separate issue)


Yeah, that will require rewriting lot of code for development so I understand.

Just curious, are you aware of few of the spinoffs of svelte for deno like snel?

https://github.com/crewdevio/Snel

Have you used deno for any toy projects and how did you like it? Any wishes or criticism?


Aleph.js (Deno alternative for Next.js) is worth trying. Though, Deno and Aleph.js are still in early phases for production use.


I just tried snel. It works pretty well. I'm looking forward to use it for my upcoming book on Deno.


i was surprised to learn how many counties in the US are still considered high risk.

also its a pretty cool indication of trust in Rich that they let him build his own metaframework and dogfood it in production at NYT scale. not sure what else i can draw about that (its probably not a good idea to let most devs do that) but its cool


I'm really enjoying front-end work at the moment. I've used Vite/esbuild for a few projects so far and it's a huge step forward, and I'm really excited by this hybrid SSG/SSR approach that SvelteKit is offering, especially as it's "official".

I've been primarily a Vue dev for quite a few years and never really considered investing much time in other emerging frameworks, but I'm very tempted to seriously dive into Svelte at this point.

JS/front-end often gets a bad rap on HN. I see complaints that things have become unnecessarily complicated or that all these frameworks are overkill, but I can build pretty complex, well structured applications with relative ease these days, and I have way more fun doing it, most of the time. I suppose I owe a lot to people like Rich Harris and Evan You who are genuinely making the work I do more enjoyable. Looking forward to trying this out.


This is so exciting! Been using SvelteKit this last week to build a new version of the Svelte Radio podcast website. Works very well and the DX is amazing.

Can't wait for whenever a Cloudflare Worker adapter is out!


Svelte has been such a breath of fresh air after so many years with React. (I still like React.) All my new projects are built with Svelte. There are just a couple of patterns to ease the transition but once you get those it's just so easy.

The best part is every time you want to do something, you gradually stop looking for a library to do it, because it's just html, js and css. So you just roll your own solution and everything is much, much simpler.

Well as Rich Hickey would say, "not everything is awesome", but I'm a big fan of Svelte and mainly looking forward to the new build times speed increases.

Thank you Rich Harris and all the Svelte contributors!


Rich Harris did a great talk[0] at an early stage of SvelteKit's development called "Futuristic Web Development". I really do believe this is the next phase of how JS web frameworks will work in the future.

[0] https://www.youtube.com/watch?v=qSfdtmcZ4d0


Out of curiosity, how does SvelteKit differ from Sapper? I haven't been involved with Svelte for some time.

Looks cool by the way, I think Svelte is a really great product.


This blog post gives a bit more information on that: https://svelte.dev/blog/whats-the-deal-with-sveltekit, though the section on Snowpack is out of date. Basically, SvelteKit is serverless-first (whereas Sapper made you choose between a Node server and prerendered HTML), and because it's powered by Vite has a much nicer developer experience.

It also fixes a few of the rough design edges in Sapper. This migration guide gives you an idea of the scope of the changes: https://kit.svelte.dev/migrating


Hey Rich, is partial hydration on your roadmap for SvelteKit?


That's a Svelte issue rather than a SvelteKit issue. It's on our _radar_, though I don't know if I'd say it's on our _roadmap_ just yet


i would also like this. i recall Rich musing on some of the "hydrating unnecessary content" problems in this post https://dev.to/richharris/in-defense-of-the-modern-web-2nia so i imagine its on his mind. Elder.js solved it in a way, i'd love to see Rich's spin on it.


Oh, awesome, thanks for responding. Excited to give SvelteKit a try!


Check out the creator's first posts and videos of sveltekit when he introduced the alpha version: https://www.youtube.com/watch?v=qSfdtmcZ4d0

The way I understand it is it's an evolution of sapper to be more versatile, especially with respect to the backend. Out of the box it can work more easily with serverless providers that give you static file hosting + some kind of basic API gateway and serverless function platform. So you can write full stack client and server-side code all using the same framework (like you can with sapper). But the key difference from sapper is that you're not stuck using a node.js backend, with sveltekit you can swap in different backend implementations, like one targeting a serverless/lambda system.


yup pretty accurate. also faster dev-mode building with vite/esbuild.


I haven't used Sapper, but I've read a bit about SvelteKit. Afaik the main reasons for the rewrite were to clean up the code, and make the framework platform agnostic. This means that you can use different adapters for SvelteKit to make it usable in places where Sapper wasn't optimal, such as serverless hosts.

For more in depth info, refer to this page: https://kit.svelte.dev/migrating


Vite seems to be powering many of these meta frameworks. Will it be the new Webpack?


No, go back about a week to the thread here on esbuild: https://news.ycombinator.com/item?id=26399377 Esbuild is a go-based tool that takes the place of babel, webpack, tsc, etc. and is much, much faster than webpack. Vite adds a nicer dev experience on top of esbuild (hot module reloading, etc.).


not tsc. There has been attempts to build a faster tsc but I have not seen any results yet.


I only know of one active attempt at: https://stc.dudy.dev/docs/status from the author of swc. You may ask kdy to test but the product is closed source unlike swc.


talked to the author on mail. it will remain a closed source product


I think there is a faster TSC, I forget what it's called, but it's significantly faster. It just isn't as fully fledged as TSC.


It takes the place of TSC as a compiler which is a significant speed-up. You still need tsc for the actual type-checking.


One thing that stops me from moving over to Svelte from Vue is the lack of a Vuetify (component framework with an API & tons of slots) equivalent.

That's also what stops me from moving over to Vue 3 (for which Vuetify support is currently in Alpha).

Vuetify just makes dev life so much easier. If Svelte had something that deep and all-encompassing I'd go all-in.



Unfortunately Svelte Material UI is vastly less developed than Vuetify. It’s a huge deficit in components and functionality.


Agree with this one. Existing UI frameworks (eg. https://sveltematerialui.com/) are not to the level of Vuetify (for good reason). Even though I like Svelte, having to build a lot of UI elements from scratch has been annoying.



Forgot to mention what SvelteKit is...


It's like the officially-supported Svelte equivalent of Next/Gatsby/Nuxt/etc.


> If you have a app that you'd like to migrate to SvelteKit, you'll find instructions at .

Ok can't copy/paste anchor text apparently, but yeah I'm confused as well. I just read a bit about Sapper the other day, is this a replacement? :shrug:


It is the new Sapper, yep.

Don't shrug, this is he most exciting framework I've seen in 22 years of fullstack dev.

Sapper was awesome, and I fully expect SvelteKit to raise the bar even further.


yes it is a replacement. bunch of internal reasons, but everyone is onboard.


Can I use it for SPA? Something like an Angular app with all the code running on the client side with routing (no SSR).


Not currently, but this will be implemented soon (and certainly before 1.0) https://github.com/sveltejs/kit/issues/231


Will SvelteKit follow the same pattern as Sapper?

As in, after the first SSR'd page the app becomes an SPA.


Yes


Hopefully, it will be possible to disable this behavior.


Disabling the `hydrate` option does this. ( https://kit.svelte.dev/docs#configuration-hydrate )


Will this support devs who want to use Svelte to add specific widgets to a dynamically generated Rails page? I want to explore SSR but was/is daunting with installing JS stuff along with existing web app infra.


This is awesome. Sapper is great, so I'm excited to move over to this.


Likewise.


Svelte rocks, Sapper was awesome, and SvelteKit looks to be even better.

Stoked.


State management in Svelte, eg. Redux, looks really clunky compared with React and Vue so I'm afraid SvelteKit is a non-starter for me.


100% the opposite is true. Svelte stores are extremely elegant and not belabored with boilerplate like Redux.


You can just use Redux if you want, but Svelte Stores are significantly nicer and help with focused updates.


It's vastly simpler. You should try something before you write it off.


Considering you can add redux to svelte... This seems trivial.


I decided to use Redux Bundler for a project at work. All the magic defined with Redux, and simple component building with Svelte. No hassle.


Awesome! I will attempt to migrate from Sapper now


about time.


We've banned this account for posting a huge number of unsubstantive comments. That's not what HN is for. It's supposed to be for thoughtful, substantive conversation and intellectual curiosity.

If you don't want to be banned, you're welcome to email hn@ycombinator.com and give us reason to believe that you'll follow the rules in the future. They're here: https://news.ycombinator.com/newsguidelines.html.


I’d like to know what he/she said, given it was their digital last words on the site.


It said "about time."


And why did this warrant death? Just so everyone knows, few people even give a fuck about Svelte. Let’s not be babies.


I think the point was that the user's comments didn't add much value to the site. If you don't have anything of value to say, then don't say it. Reddit is probably a better platform if you just want to say "nice", or something.


Note the phrase "a huge number" in https://news.ycombinator.com/item?id=26558343.


The banned user is a person who intentionally trolls comment sections, chats, and other forms of feedback. It's genuinely their goal to get banned.


In isolation, maybe it doesn’t, but reading through the comment history, the site will be better without these contributions.


[flagged]


Moderation is part of HN. That's one reason why being "doomed in general" hasn't yet destroyed the site after 10+ years of "reaching scale" (https://hn.algolia.com/?dateRange=all&page=0&prefix=false&so...).

Part of what moderators do is ban accounts that break the site guidelines repeatedly, especially when they are respawns of previous accounts that broke the site guidelines repeatedly.


Have any data to back that up?


FWIW this person is also banned from the Svelte github and the Svelte discord for similar behaviour.


You can enable display of dead/flagged comments in the settings.


Haha thank you kind stranger! I've been a member since 2012 and while I've visited my profile tons of times, for checking comments and submissions, I've apparently never stopped to look at the settings and what they might do. I have a userscript that makes the main view 69ch wide and blurs my username, but I've never even been aware that the site actually has its own customization settings. :facepalm:


With pleasure.

FYI: [dead] means the account is (shadow)banned, while [flagged] just refers to the particular comment.


from the documentation:

  There are two basic concepts:
There are two basic concepts:

Each page of your app is a component

You create pages by adding files to the src/routes directory of your project. These will be server-rendered so that a user's first visit to your app is as fast as possible, then a client-side app takes over

looks like you reinvented php, no?


Learn more about svelte (not just sveltekit here) and you'll see why your snarky comment just looks dull and uninformed. SSR (what you're calling reinvented php here) is just one tiny part of the svelte and broader component-based client-side JS ecosystem. You're washing away their incredible power for building fully browser-based applications that mix client and server logic all from the same clean codebase.


oh, does PHP include a client-side router these days? that's exciting!


lol


No. PHP hasn’t been “one file per page” in at least 15 years, and that’s hardly a defining trait for either of these two things.

If this is your only thought about it, you have a lot of catching up to do!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: