The Changelog: Software Development, Open Source - A UI framework without the framework (Interview)

Episode Date: January 30, 2019

Jerod and Adam talked with Rich Harris –a JavaScript Journalist on The New York Times Investigations team– about his magical disappearing UI framework called Svelte. We compare and contrast Svelte... to React, how the framework is embedded in a component, build time vs. run time, scoping CSS to components, and CSS in JavaScript. Rich also shares where Svelte v3 is heading and the details on Sapper, a framework for building extremely high-performance progressive web apps, powered by Svelte.

Transcript
Discussion (0)
Starting point is 00:00:00 Bandwidth for Changelog is provided by Fastly. Learn more at fastly.com. We move fast and fix things here at Changelog because of Rollbar. Check them out at rollbar.com. And we're hosted on Linode servers. Head to linode.com slash changelog. This episode is brought to you by DigitalOcean. DigitalOcean is the simplest cloud platform for developers and teams with products like Droplets, Spaces spaces kubernetes load balancers block storage and pre-built one-click apps you can deploy manage and scale cloud applications faster and more efficiently on digital ocean whether you're running one virtual machine or 10 000 digital ocean makes managing your infrastructure way too easy. Get started for free with a $100 credit. Head to do.co slash changelog.
Starting point is 00:00:46 Again, do.co slash changelog. All right, welcome back, everyone. This is the ChangeLog, a podcast featuring the hackers, the leaders, and the innovators of software development. I'm Adam Stachowiak, Editor-in-Chief here at ChangeLog. We have a jam-packed show for you today. We talk with Rich Harris, a JavaScript journalist on the New York Times investigations team, about his magical disappearing UI framework called Svelte. We compare and contrast Svelte's React, get knee-deep in what it is,
Starting point is 00:01:26 how their framework is embedded in a component, build time versus runtime and the play on that for the browser, scoping CSS to components and CSS in JavaScript. Rich also shares where Svelte 3 is heading and details on Saper, a framework for building extremely high performance progressive web apps powered by Svelte. So Rich, we're here to talk about your magical disappearing UI framework. Before we get to that, let's talk a little bit about your day job. You've been a longtime journalist and you're a graphics editor at the New York Times investigations team. Tell us about that lifestyle and what you're up to at the Times. Yeah, my job title is graphics editor,
Starting point is 00:02:12 which is a slightly nebulous job title, honestly. A lot of the time I am working on graphics. I'm building interactive charts and things like that, things that help explain complex topics in the news. But really, it would probably be more accurate to say that I'm a JavaScript journalist. I work on... Nice. That sounds cool even. I currently work on the investigations team at the New York Times, and I'm part of a unit that uses computational techniques to find out things and report them. That's awesome. Can you give us a for instance, maybe something you've done in the last six
Starting point is 00:02:42 months or a year that's like a, for instance, I built this particular story or graphic. So about a year ago, we did a story called The Follower Factory, which was an investigation into the economy of fake social media accounts. The people that make Twitter bots and the people that buy them. We obtained a list of clients of a company called Davumi. People, many of whom you've heard of, people like Michael Dell, famous actors like John Leguizamo, people like that, who'd bought fake Twitter followers to try and puff up their own online influence. And we used a variety of techniques to track down where these bots were, where they were coming from. And we did a whole big expose on what that economy looks like. So that's a pretty good
Starting point is 00:03:29 example of the kind of work that we do that marries traditional journalistic techniques with the kind of more modern and computational techniques that our team specializes in. And it had some impact, right? After we did that story, Twitter got rid of millions of bots off their platform. There was like a big platform- the purge which got people paying attention that's cool so that was a result of that story and some of that fallout you'll have to give us a link back so listeners can go and check that out and i got one it looks pretty awesome you got it yeah it's uh this is an interesting you know it's kind of scroll driven page that begins with like this kind of montage of grid of like a person's face but sort of broken up like a fragmented mirror pretty interesting so
Starting point is 00:04:11 did you build this whole thing and is the whole thing a kind of like your baby or is it sort of a team effort i'm one of four bylined uh reporters on that piece i did the bulk of the graphics not the opening graphic that you've just described. That was a chap named Adam Ferris who did that for us. But the later graphics where we look at what these bots look like, what their behavior looks like
Starting point is 00:04:34 in aggregate when you start to analyze some of the statistical patterns, all that kind of thing was me together with my editor, Gabe Dance, and colleagues like Jeremy Ashkenes and Danny DeBelius.
Starting point is 00:04:46 Jeremy Ashkenaz is a friend of the show. We've talked to him since way back. Gosh, it's been so long since he actually began as Jeremy Ashinkas, since we did not pronounce his last name, and then we learned it's Ashkenaz. Sadly, no longer of this parish. He left the New York Times back in 2017, but that was the last big project that we worked on. I mean, having seen this page, I can see why you describe yourself
Starting point is 00:05:12 more so as a JavaScript journalist, because this page is definitely a culmination of not only good journalism, investigatively, as well as written, but then how it actually formulates onto a page. And I'm sure that you've got, you know, mobile viewports planned for web. Like it doesn't matter which platform that you're still going to be able to enjoy this content in a similar fashion. It's pretty amazing. Thank you. Yeah, we obsess over making things look good on a mobile device as well as on desktop and all of this stuff.
Starting point is 00:05:42 And it's an interesting challenge trying to take this vast wealth of information and condense it into something that makes a point that a reader who comes to a story without any level of prior knowledge or expertise can actually get something from it. And trying to use technology in a way that makes that more apparent and more impactful.
Starting point is 00:06:06 So technological question on this, which may lead in the spell, maybe not. But when you guys do stories like these, is each individual story, I mean, this feel like a unique experience where this would be like its own separate software application versus, you know, fitting into the larger times CMS or just curious, do you guys start fresh each time? Do you guys have a existing framework that you're shoving stories and code into or is it like little micro services for each little story?
Starting point is 00:06:35 In that example, the story is written into the same content management system that all of our journalists use. The individual graphics are, each one is an individual Svelte application. So it's the, the idea behind Svelte is that you can, you can create a full blown web app, but you can also create little parts of web apps. You can create embeds like, like the examples that you're looking at right now. Very cool. Well, that is about the perfect segue into the main focus of the conversation.
Starting point is 00:07:06 By the way, I have to give a thanks to Kevin McGee, long-time listener, Adam, long-time show idea creator who's still listening, according to Ping, who actually gave us the idea for the show. Now, Svelte did cross my radar a couple years ago. I think I read your initial 2016 post, Frameworks Without the Framework,
Starting point is 00:07:24 and we probably logged it on changelog news, but I didn't see much else between then. And I think it was probably back in June or something of 2018 when Kevin said, Hey, you know, get rich on the show. It should be interesting to talk about this, uh, magical disappearing UI framework. So here we are, uh, Svelte three is upon us. So it's been a couple iterations on the idea. Take us back to the big idea of frameworks without the framework, what Svelte is, and how it differentiates itself from other things
Starting point is 00:07:52 that are out there in the front-end space. Yeah, so imagine that if React and Vue and Elm and Babel and maybe some other projects had a love child, and the love child somehow inherited all of the best qualities. That's what we're aiming for with this project. It's a JavaScript framework. If you've used things like React and Vue
Starting point is 00:08:12 and Angular and Ember, you'll be familiar with the concept. You create a series of components and you connect them together and the framework manages updating the DOM in a way that frees you from having to do element equals document dot query selector, element dot text content equals blah, blah, blah.
Starting point is 00:08:27 All of that declarative style of programming that is the way that people build web applications nowadays. It's designed to do exactly that, but it does it in quite a radically different way from traditional frameworks like React and Vue. What it does is it works on your components at compile time as part of your build step it takes your components and it compiles them into optimal vanilla javascript rather than having a library in the browser that you give your
Starting point is 00:08:59 components to your component becomes the javascript module that executes directly. And the result of that is an application that is smaller, typically much smaller, and is much faster to update. And at the same time, you, the author, because you're writing this very compact component format, you end up writing a lot less code than you typically would with other frameworks. Does that mean that the end product is difficult to kind of peek into as a developer, like view source kind of thing? Does that, I'm sure that maybe a compile time there, vanilla JavaScript, it's probably minifying it,
Starting point is 00:09:34 things like that. Does it make it hard to view port or view source kind of things like that? It's a really good question. And it is a thing that we think about a lot. Obviously, if you're compiling a representation of a component into vanilla JavaScript, there is a slightly larger disconnect between the code that you've written and the code that executes than if, say, it was just a transformation from your JSX, if you're writing React, to the React.createElement calls that that compiles to. However, first of all, we have pretty good source map support
Starting point is 00:10:05 and you can use that for debugging. But also when you look at the compiled output, which we do optimize for readability as well as other things, it's really easy to understand what is actually happening. So the disconnect between what you've written and what you're running
Starting point is 00:10:20 might be slightly larger, but it's paradoxically much easier to understand what's going on. Because rather than looking through 20,000 lines of library code when you're running might be slightly larger, but it's paradoxically much easier to understand what's going on. Because rather than looking through 20,000 lines of library code, when you're trying to understand how a particular state change resulted in a particular DOM update, it's right there in front of you. And you maybe only have to look through a hundred lines. So the experience that a lot of people have had has been that debugging has actually got easier, surprisingly. So the way I'm thinking about this and correct my thoughts if they're wrong here
Starting point is 00:10:47 is that what it kind of is, or it could be boiled down to a framework, like a code generator. So you're writing your JavaScript into this framework, but when you build it, instead of saying, okay, here's my runtime, I'm going to ship that with my code,
Starting point is 00:11:05 it's saying take the code that I wrote and generate new code that's very similar, but also has, I think in one point in the docs you say, the framework is embedded in the component. So it's code generating the component based on the component I wrote, a fancier component that has svelte things in it that provide the functionality that I don't have to write. Is that a good way of thinking about it or am I upstream of it? That's exactly what's happening. You're writing at a high level. You're sort of behaving as the architect, let's say.
Starting point is 00:11:35 And the compiler is acting as the thing that builds the thing that you've designed. So you don't need to worry about wiring up the lights or doing the plumbing or anything. That is taken care of. so you don't need to worry about wiring up the lights or doing the plumbing or anything that is taken care of and your time is spent at a higher level thinking more creatively about the kind of experience that you're trying to deliver so the framework is embedded in the component that was a phrase that spoke to me it made sense but then i thought well what if i have 150 components on this page do i have 150 frameworks embedded into the component seems like it would actually bloat more than shipping a single runtime that gets called into is that not the case it's it's not
Starting point is 00:12:10 the case it is another very good question and a lot of people do hit upon this um straight away they're like how can this possibly make sense when we're building something at the scale of a typical modern web app right i'm i'm actually the author of a module bundler called Rollup. So I've spent a lot of time thinking about this question as well, about how do you deduplicate code efficiently and all the rest of it. And Svelte does have an internal library. When it turns your component into a JavaScript module,
Starting point is 00:12:37 it's not a completely self-contained bit of code. It's actually importing helpers from that internal library, just the ones that it needs, and the rest get tree-shaken away so um all the code that does the heavy lifting is in fact deduplicated and so while you would expect it to scale very poorly it actually scales pretty well there is theoretically an inflection point where if you have more svelte components because the incremental cost of a component is slightly larger than let, because the incremental cost of a component is slightly larger than, let's say, the incremental cost of a React component,
Starting point is 00:13:08 in theory there's an inflection point where the lack of a library is outweighed by the extra size of the components. But in practice, we don't see that. In practice, we see that the inflection point is at a much larger application size than people are typically building. And on top of that, we have code splitting. And code splitting is a technique that people use to deliver small chunks of their app at a time
Starting point is 00:13:35 so that when you first hit a page, you don't have to get all of the JavaScript for every possible thing that you could then do as you move through the application. It just gives you the code that you need for that first page experience, and then the rest is loaded as and when you need it. Now, with a traditional framework, there's a limit, a pretty strict limit, to how effective code splitting can be, because the smallest chunk of your application still needs the entire library, all of your state management, all of your router, all of this other stuff. And Svelte doesn't have that problem. So while in theory, there is this problem with scalability, in practice, it's
Starting point is 00:14:11 actually better than traditional frameworks. Have you done any of the math on where that inflection point is? Could you say, well, you need to have an application with 6,500 components or a million components? Like what's the, even the order of magnitude where people might say, oh, the trade-off isn't worth it anymore. I haven't done the napkin math on that, no. Okay. The reason being that, I mean, there's really no point.
Starting point is 00:14:37 It's just an intellectual exercise that doesn't actually bear any relation to how we're building applications. There is a project called the Real World Project by Go thinkster you can find that on github and the point of this project is to actually do this comparison allow you to do this comparison between different frameworks so that you can get a sense of what it feels like to implement something slightly less trivial than the traditional to do mvc or hack and use. And there is a Svelte implementation of the real-world project, and not only is it about half the size
Starting point is 00:15:10 of the reference React slash Redux implementation, but it's actually about half the number of lines of code as well. So your initial payload is much smaller, your total application size is much smaller, and the number of lines of code that you had to write is much smaller. So one of the things you wrote, I think it was the subtitle to that post back in 2016, which we will include in the show notes, is why didn't we think of this sooner? Yeah.
Starting point is 00:15:33 And here we are in 2019 and React is dominating the front end framework space. You have Vue, which is very popular and gaining steam, but really it's kind of a two-dog race, it seems like, in terms of just mass adoption. Angular has had the head of steam, but it's kind of fallen into third place in that regard. And Ember, of course, always there, always just plodding along relentlessly, which we love. But Svelte seems like, this model,
Starting point is 00:16:04 seems like it's markedly better in terms of end user experience because you're not shipping as much javascript and of course the the raw kilobytes of the size of your js bundle isn't the end of the story because you also have to parse and evaluate that code inside the the device which is slower on slower devices, especially phones. So it's not like saying, you know, a bunch of big images versus a bunch of big drivers. Point being is like, this seems like a pretty big advantage. Why didn't we think of this sooner?
Starting point is 00:16:35 And then why hasn't anybody else adopted it? Or maybe they have, and I'm not paying close enough attention. Well, actually they have. Svelte probably wasn't the first library to do this anyway. We've always had, you know, we've had things like Elm, which is kind of a version of this idea, you could argue. Before there was Svelte, there was a project that I wasn't aware of at the time called Monkberry, which was doing something vaguely similar. There is a project called Marco from eBay, which again is doing something not a million miles away from what Svelte is doing. And then we have Angular's AOT compilation, ahead-of-time compilation, which they're baking into their new renderer called Ivy.
Starting point is 00:17:16 Ember's new rendering engine is a thing called Glimmer, which takes your handlebars components and compiles them to a very efficient bytecode format. So pretty much every framework is adopting this model. And Svelte, I think, is probably the purest expression of the idea in that it compiles your components to vanilla JavaScript and you don't need any other library code once you've imported the component. But it's far from the only framework that is,
Starting point is 00:17:49 that is cottoned on to the fact that if you can move work out of the browser and into your build step, you're providing a better experience to users and in most cases to developers as well. I can imagine too
Starting point is 00:18:00 that being from the New York Times that you think about not only, you know, think about not only you know download time for you know or performance page speed things like that but you also think about battery life and things that you know generally users shy away from i mean it your newspaper so generally you have ads on your pages in most cases so you've got to have that as a concern so after you load ads javascript all that good stuff with that you've got to have that as a concern. So after you load ads, JavaScript, all that good stuff with that, you've got to now deliver your application.
Starting point is 00:18:28 And the easier you can make that on your users probably is pretty important. So was this project born out of the New York Times? And we're just now hearing about that part? It wasn't born out of the New York Times. It was actually something that I created while I was working at the Guardian US, just before I came to the New York Times. But it is absolutely born out of the problem that people doing this job have, which is that we're putting code, which is often very heavily interactive, lots of animations, all that kind of thing, pretty performance intensive. We're putting it onto pages that we don't control, right?
Starting point is 00:19:03 Because very often we're doing embeds that sit in someone else's article. And on that article, as you say, we've got ads, we've got analytics, we've got comment widgets, we've got all of this stuff. And our code is the last thing that gets loaded. So it's sort of this hostile environment that we're working in. And we're working with these extraordinary constraints. We're often working on really punishing deadlines. And when I started Svelte, I did so because the existing tools, frankly, didn't allow me to do the job that I wanted to do as well as I wanted to do it.
Starting point is 00:19:36 When you say people in your job, how often do you encounter other JavaScript journalists? Like, is this a seriously big type of role at all these newspapers and all these different news outlets? Or is this like, this is the first time I've heard that title. And I'm imagining there's lots of you out there, but did they all play at the same level or have the similar skills that you do?
Starting point is 00:19:55 It's a very broad church. There's definitely a lot of people who would qualify for that label. A lot of them are here at the New York Times. New York Times invested very heavily in building out the graphics department. Way back when a lot of other publishers were still trying to figure out what their digital strategy was, the New York Times was laying the groundwork for, I'm not boasting here, the best graphics department in the world. It's had a ton of really influential JavaScript programmers
Starting point is 00:20:27 come through the graphics department, folks like Mike Bostock, Gregor Eich, Jeremy Ashkeneth. But at the same time, we've got a lot of people who don't have a background in hardcore programming. We've got people who have backgrounds in straight reporting and design and they've learned javascript because they want to be able to tell stories that are richer and more interactive and that is the way to do it other news organizations definitely have other people doing very similar work um i'd struggle to give you an estimate of the number, but there's certainly in the US, there think, with regard to storytelling and providing, you know, valuable information for people. But that being said, it would be cool to be like JavaScript journalist and really work at the intersection of all those different skill sets, right? Journalism, data science, design, programming.
Starting point is 00:21:43 I always tell people that it's the best place to be a software engineer. You know, you're surrounded by so many people with overlapping but different interests, which means it's a great place to learn. You're doing work that is, it's important. It's important for our civic life. You're doing work,
Starting point is 00:22:02 and this is my favorite part of it probably. You can spend four weeks working on a project rack up as much technical debt as you can manage and then you can just light a match at the end of it and walk away I was just going to say that because you don't have to maintain a product for months after you've launched it
Starting point is 00:22:19 as soon as you hit publish that's it I was just revelating that thought I'm glad that you said that because I was thinking wow like you have to care about these things that matter, right? But you don't have to care about the things that don't matter, which to most of us, the things that matter is maintainability and for software to be malleable to change over time because software that doesn't
Starting point is 00:22:37 provide value over time is invaluable. We want to write valuable software, but for this, for your style, it really is kind of a one and done, which means you have lots of green fields as well. Like you get to start over a lot, which many of us don't get to. It means that we get to experiment with a lot of different ideas and technologies. And so I think it's one of the reasons that it's a pretty fast moving, fast evolving arena for JavaScript to come out of. This episode is brought to you by Git Prime. Git Prime helps software teams accelerate their velocity and release products faster by turning historical Git data into easy to understand insights and reports. Because past performance predicts future performance, Git Prime can examine your Git data to identify
Starting point is 00:23:30 bottlenecks, compare sprints and releases over time, and enable data-driven discussions about engineering and product development. Shift faster because you know more, not because you're rushing. Get started at gitprime.com slash changelog. That's G-I-T-P-R-I-M-E dot com slash changelog. Again, getprime.com slash changelog. so rich help us understand the evolution of spelt over time you have version three which is imminently being released depending on when you're listening to this listener it may be out there it may not you know software developers and timelines we hate them but uh it's right around the corner
Starting point is 00:24:22 or it's out there one of the two um so spelt two was last year i'm gonna put my money on it's right around the corner or it's out there one of the two um so svelte 2 was last year april 2018 i'm gonna put my money on it's oh it's just around the corner okay i thought you were gonna put a stake in the ground for a second there and say it's out there but no you played it smart played it smart coming soon as as all good software is so you know things change over time svelte came out in 2016 as we said that's three years later you have a version 2 you have a version 3 so tell us about the way it's changed. Has it been philosophical changes, just implementation? Help us understand where it's gone and then where it's going to be today,
Starting point is 00:24:54 or I guess in the near future. I guess if we want to talk about the origin of Svelte, we have to go back to 2012, which is when I started working on Svelte's predecessor, which is a library called Ractive as in short for interactive also a word from a Neil Stevenson novel. Ractive was a view framework
Starting point is 00:25:13 that was based around templates it was based around the idea that if you had some data that existed as a plain old JavaScript object and you had a template which resembled Mustache, and you could combine the two together, then you could generate a really highly performing application by tracking which parts of your data were changing over time. This is something that I think was probably pioneered
Starting point is 00:25:42 with Knockout back in the day, but I wanted a different developerered with Knockout back in the day but I wanted a different developer experience than Knockout could provide and I noticed that a lot of the things that we were building all we were doing really was trying to make the page match some some templated HTML but the way that we were doing that was by inner HTMLing parts of the page which is kind of gross and inefficient so i built this library that would allow me to create a slash template that would be kind of self-updating in the most efficient way possible and that's something that i started when i was working at the guardian in the uk back in 2012 and it powered a lot of our interactives back at
Starting point is 00:26:24 that point and it was it was reasonably successful. It was my first big open-source project. It ended up getting used in a bunch of places. It was used inside Amazon, inside a Wall Street bank. It was used by the NFL, Delta Airlines, Playboy TV at one point, apparently. And in spite of that, it never really hit the mainstream um but i like to think that some of the ideas kind of stuck um view came along shortly after active was launched and sort of took all the best ideas and jettisoned the bad ideas and became very
Starting point is 00:27:02 successful and i was pretty pleased with it. It was better performing than React in most of the tests that I could throw at it. And it was really easy to use and it had this really delightful community around it. But over time, as more of our work shifted to mobile, I became increasingly aware of the bundle size concern. People are always telling us that we need to make smaller JavaScript bundles
Starting point is 00:27:28 because the initial load experience is so important. And if you've got a bunch of JavaScript that has to get parsed and evaluated when the page first loads, it provides this really bad experience. And so I started thinking that there must be a way that I can deliver these applications without also having to deliver a library that knows nothing about the application right because a library like Ractive or React or Vue it has to be able to accommodate an infinite set of possible states of your application but there isn't an infinite set of possible states of your application. But there isn't an infinite set of possible states.
Starting point is 00:28:05 There's a set of states that can be known ahead of time. And if we could find out what they were, then we could deliver optimized JavaScript for them. And so I started to think about what a solution to that problem might look like. Around that time, I had a conversation at a JavaScript meetup in New York with a guy named Jed Schmidt,
Starting point is 00:28:25 who's a really smart programmer, and he'd been thinking about this problem too. And he started talking about compilers, whatever a compiler could look at your code and write the application for you. And this idea kind of bounced around in my head for a little while. And then I thought, I think I know how we can do this. We can take our existing reactive components
Starting point is 00:28:44 and we can put them through a special purpose compiler. I know what code it needs to generate. And so I spent a furious week coding, did a first version of that, and it worked. The performance was unbelievable. The size of the applications that it was generating were unbelievable. So we started using it at The Guardian for some of our projects, open sourced it, and it turned out that the idea resonated with a lot of people.
Starting point is 00:29:14 And it kind of went from there. But the initial design was very heavily influenced by Ractive because I wanted to be able to have a development experience that I was familiar with. And in retrospect have a development experience that I was familiar with. And in retrospect, that development experience had a lot of flaws. There were a lot of mistakes made in the original design of Ractive, and it was getting a little bit difficult to move away from those mistakes.
Starting point is 00:29:51 So Svelte 3 is, in essence essence a complete reboot of the idea it's a little bit inspired by the work the react team have been doing with hooks it's very focused on developer ergonomics but it also has a bunch of new features and a new approach to updating the DOM which will result in even better performance in a lot of situations. New to Svelte or new to the space in general? New to Svelte. The big difference between updates, DOM updates in Svelte 2 and Svelte 3 is that they're no longer synchronous.
Starting point is 00:30:23 We've embraced this new concept of reactivity in our applications. It used to be that the reactivity lived in the component API. You would do component.set and then you would provide a new data. And that behaved similarly to a React set state or something like that, except that it was completely synchronous. And that was good enough for most situations because you could pass in all of your data in one go and it would update everything very efficiently. But there were some situations
Starting point is 00:30:51 where that could cause layout thrashing and so on and so forth. And so we've moved away to an asynchronous batched update model. But what's more interesting is that the reactivity has moved out of the component API and into the language itself. And this is the big thing that we're going to be talking about with Svelte 3, is rethinking how we approach the problem of reactivity.
Starting point is 00:31:15 So when you say into the language itself, are you referring to extensions to JavaScript or just functions inside of the Svelte component API? Tell me what you mean by that. So imagine that you have a counter component often used as a demo for these sorts of things. You've got a button, and when you click the button, it calls an event handler, and the event handler changes the count part of your internal state. There's a few ways that you can do that.
Starting point is 00:31:44 In React, classic React, you might do component.setState. In React with hooks, you would have a state update function that was specific to the count property, and you would call that. In Vue, you might do this.count plus equals one. And in Svelte 2, you would do this.set count count plus one. In Svelte 2, you do this.set count count plus one.
Starting point is 00:32:07 In Svelte 3, all you need to do is count plus equals one. And the compiler sees that you've made an assignment to a value that the template is bound to, and it will add a piece of code that invalidates that. It will tell the component, this piece of state has now changed and we need to update the component. But what it does is it keeps track of which parts of the component this piece of state has now changed and we need to update the component but what it does is it keeps track of which parts of the component have changed so it doesn't re-render the entire thing and then put you through this fairly wasteful diffing process all it does is update the parts of the component that are affected by the state that has changed where i get confused starting to think about svelte now is like and what is that build time and what is that runtime?
Starting point is 00:32:47 So this is all accomplished at build time? As much as we can do at build time, we do at build time. Surely it can't, yeah, like the events can't fire at build time. Oh, my click handler keeps firing when I build my project. You know, a podcast is fundamentally the wrong medium to discuss this, because I really need to show you some code. Once people see the code,
Starting point is 00:33:12 they see the input and they see the output, it becomes very obvious how this works. There's no magic involved. It's not doing anything weird. It's doing very predictable and very obvious things, but it just frees you up from having to think about state management as something that you need to spend time doing. And it injects code that, it's more code instrumentation than code transformation. It instruments the code in such a way that you don't need to think about telling the browser
Starting point is 00:33:43 that a value has changed beyond just changing the value so it injects instrumentation code that watch is watching for value changes then and you just go ahead and change the value and you didn't have to actually wire any of that up or am i you don't have to wire it up the compiler wires it up for you okay um so if you do count plus equals one for example the next statement gets injected by the compiler and it calls a framework provided function called invalidate invalidate knows which property has been invalidated it knows what the new property is and so through that mechanism it's able to keep track of which parts of your state are clean and which which are dirty And if an update isn't yet pending, it will schedule an update for the next micro task. And then it will go through
Starting point is 00:34:29 and just surgically update all the little parts of the page that are affected by the change in state. Very cool. So has this yielded excellent runtime results then of page of DOM updates versus Svelte 2? I don't put a lot of stock in in benchmarks um personally that i i find that they're they're very rarely measuring the things that actually matter in an application um it does perform extremely well on benchmarks you know i need to just allay any doubt Svelte is extraordinarily fast.
Starting point is 00:35:07 Well, the question is you have to ask yourself, if you didn't have benchmarks, I agree, especially synthetic benchmarks are sometimes problematic. They can be misleading. Sometimes they're helpful. It's just a mixed bag. But the question is if all of this reworking of how this rendering happens is for performance sake because of the thrashing that was happening before,
Starting point is 00:35:27 and maybe there's features as well, but how else would you know that it's working? All your efforts for rewiring this entire thing to be reactive versus the way it currently is, if you don't have any sort of benchmarks versus the other, then it's kind of just going on a feeling, unless there are also features that you're yielding from this work?
Starting point is 00:35:44 There are features. I mean, the primary motivator for that change is the developer experience. It's really nice to write Svelte three components. You're incredibly productive. You need to write much less code than you do with other frameworks. And that's the selling point. Yeah.
Starting point is 00:36:00 Yeah. When it comes to performance, you know, a lot of it, I think we just need to rely a little bit more on common sense than on benchmarks. It stands to reason that if your update process consists of re-rendering your application
Starting point is 00:36:13 and then comparing the previous virtual DOM with the next virtual DOM and then finding out what's changed and then applying those changes in this kind of long-winded indirect process, obviously that's going to be slower than if you've got code that just directly updates the dom for you i would tend to agree assuming that the code works as desired right so one reason i at least have those benchmarks in place would be to see if you're doing doing it right and catch it catch it
Starting point is 00:36:40 not working the way that you just we have a We have thousands of tests in our test suite. So that's a pretty substantial change. Anything else not to belittle that change but anything else in Svelte 3 that's dramatically different than what you've produced so far like that? We have a new approach to cross-component state management which
Starting point is 00:36:59 is a lot more flexible. It's again a little bit hard to describe in the context of a podcast, but it moves away from having a single central global state atom and into having values that can be passed around in different components and composed in various ways. It's very flexible.
Starting point is 00:37:16 It allows for some really cool things like springing animations and all that sort of thing without a lot of developer effort. It's better at composition. We have some new composition primitives that just went in over the weekend, which will make it easy to build more complex compound components than has been possible before. There's probably a bunch of things that I'm just kind of blanking on at the moment,
Starting point is 00:37:43 but it's a huge release, and the changelog for this thing is going to be an absolute monster to write. We should make people drink when they see something like that, Jared. We should. Every time someone says the changelog, on the changelog. That's right. You win a free t-shirt. Little Inception, take a drink, get a t-shirt.
Starting point is 00:38:00 There you go. Where does something like CSS come into play? I know that one thing that you've talked about is just the importance of scoping CSS. There you go. Where does something like CSS come into play? I know that one thing that you've talked about is just the importance of scoping CSS. There's a lot of issues with that, like leakage. Is that a bigger picture of what you just mentioned in Svelte 3, or is there something you can cover kind of here in Svelte 2? No web application is complete without styles.
Starting point is 00:38:23 Right. CSS is a core part of any web app that you build. And yet some of our JavaScript frameworks don't include any primitives for styling. I think that a JavaScript framework that doesn't have styling built into it is incomplete. And Svelte has had that philosophy baked in from the start.
Starting point is 00:38:44 Because you write your components into an HTML file, you can just add a style tag and you can put your CSS in that style tag. And the compiler will compare your styles with your markup. It will see which classes are being used, which ones aren't being used. It'll dead code eliminate your unused styles. It will transform your class names so that they are scoped to that component so that you don't have style leakage throughout your application it does all of that stuff you can also use your favorite css in js library if you want to you can use plain old dot css files but svelte has pretty good css handling baked into its core it's not
Starting point is 00:39:22 perfect there are some things that we want to tackle after the version 3 launch, particularly around composing styles from different sources. But CSS, if you're familiar with CSS, if you're good at CSS, then you'll enjoy building applications as Svelte components because it's not an afterthought. It's not something that has been left to an ecosystem of third-party libraries.
Starting point is 00:39:45 It's baked into what the framework is all about. Sounds like you might have some pretty decent opinions about this great divide Chris Clear just actually talked about, which since I said that you may already have read the article. What are your thoughts on that? I skim-read it because everyone in my feed was going mad about it. I'm not going to offer any opinions because I will probably be basing those opinions
Starting point is 00:40:10 on other people's misinterpretations of what Chris was saying. Well, it was a long post, so easy to misinterpret. The more words you put in, the more things can be misread. And I know I definitely also skimmed it, didn't read it in detail because of the length and happened to be short on time. The part that I read, it seemed perfectly reasonable.
Starting point is 00:40:30 It seemed like it was identifying a thing that indisputably exists in the industry. People seem to be interpreting it as, let's encourage this great divide. Let's deepen it. And I'm not sure that's what i read into it but i'm less interested about the politics of it and more interested the practicality of it meaning that so well meaning that he just said you know no javascript framework is complete without you know the necessary for css so right with so many that don't just based on that bias alone means that there is in fact a divide and that his, his stance on the divide,
Starting point is 00:41:12 whether he says so or not in response to my question is just simply that he cares. So he thinks that it should be, I have a place that when you say here, you talk about Chris, you talk about rich, rich, rich.
Starting point is 00:41:23 Okay. Sorry. My, in all those cases, it was Rich, not quoting Chris at all. Because I'm the same. My skin is just like you guys did. And I sort of just saw this divide that I'm aware of, but based on what you just said with how you clearly think about styles in a JavaScript framework makes me think that, you know, you want to find common ground. I do. You know, I was, I was saying earlier that one of the great things about, um, the, the work that I do here is that I'm surrounded by people with different, but
Starting point is 00:41:49 overlapping interests. And, and that is, that is when things really start to sing is when you have people who, um, who can share knowledge and expertise across disciplines, but all be speaking the same common language and working towards the same common goals. And when we put ourselves in silos, when you think of yourself as a JavaScript developer or a CSS developer, then it becomes harder to do that. And so I'm all about ways of working that allow people who have expertise in one discipline to work right next to people who have expertise in another discipline and not enforcing arbitrary divisions between them. Yeah. Well, pulling somebody away from vanilla CSS or making somebody who's very familiar with that work in other areas
Starting point is 00:42:34 is a necessary learning curve for progress, but it sounds like you question, does it have to be that way? Yeah, I don't think it does need to be that way. If you're the team CSS expert, then don't go and sit in the corner and write CSS by yourself. Write the CSS in the context of the component that you're working on, and you will start to understand at a much deeper level how all of the different parts of the application fit together. And that will give you insights that pay dividends beyond,
Starting point is 00:43:09 I'm not articulating this very clearly, but you understand what I'm getting at. I think that the more holistic a view of a project each member of the team can have, the better the end result is every single time. I 100% agree. And that means breaking down the barriers. Well, now we kind of have a basis of your point of view. Can you talk about scoping and components as it relates to, say, styles and having no overlap or no leakage, as you say, in the blog post about it? Yeah, so the big problems that people have identified with CSS
Starting point is 00:43:36 and the reason that CSS in JS has become a thing, there's a couple of main problems. First of all, CSS is global, right? If you add a style sheet to a page, then you will affect everything on that page that happens to have the same classes. And so because of that, we've come up with these incredibly baroque naming conventions that are designed to prevent your styles from one component affecting the styles for another component. Things like BEM, that kind of practice. And the trouble with these is they make your style sheets incredibly wordy
Starting point is 00:44:12 and they don't actually prevent conflicts. It's just a convention. It's not enforced by anything that can actually stop styles from conflicting. If you want to do that, a computer needs to do it for you and it needs to happen as part of your build process. The other side to do that, a computer needs to do it for you. And it needs to happen as part of your build process. The other side of it is that a lot of people have experienced the phenomenon of the append only style sheet. It becomes really
Starting point is 00:44:34 difficult to delete a piece of CSS because you're never entirely sure what part of the application depends on it. And so what tends to happen is if you need to counteract the effects of a class that is stopping your element from looking the way that it needs to, you will just add another CSS rule. And people keep doing that, going back and forth. Eventually you get into the important wars
Starting point is 00:44:57 where you're just increasing the specificity of the selector, adding important to rules so that your styles are the ones that apply and not the previous styles which are quite possibly unused in your application. And so in that way, style sheets get bigger and bigger and bigger until your entire CSS is just an unmaintainable mess. Now Svelte basically solves both of those problems. It solves the first problem by scoping your css so that if you have
Starting point is 00:45:27 class equals foo on an element in your component and you have a dot foo style rule it will add another scoping class that's unique to that component and it's computer generated so it can't possibly conflict with anything else on the page. And that will ensure that your foo styles don't affect anything else on the page, even if you have another element with the same class name in a different component. It solves the other problem by analyzing your CSS in the context of your components markup and determining which classes are definitely not being used. And I say classes to mean all CSS selectors. It can look at all of your CSS rules and say, well, this active class, that's not being used anywhere. There's no element that at any point
Starting point is 00:46:11 could have that active class. So we can just remove that and not even emit it when we generate our style sheets. And it'll issue a warning. It'll tell you so that you can then remove the class yourself so you don't have it cluttering up your code base. But between those two things, you end up with these very compact style sheets because you're not using these these incredibly long naming conventions and you don't have styles that aren't being used in your application
Starting point is 00:46:36 and so it's it's good for the developer it's a nice developer experience but it's also good for the user because you're not shipping all this unnecessary CSS. At this point, I feel like just saying, shut up and take my money. Because that's awesome. What's interesting too is that a lot of this began with, say, particularly around CSS with preprocessors like SAS and others, kind of helping us know that CSS itself is not dynamic while SAS is. Yeah.
Starting point is 00:47:10 And doing a lot of this pre-processing, now it's graduated from, say, just a particular sliver of the overall thing you ship, which is HTML, CSS, and JavaScript to the browser to, you know, you're graduating it up to the framework level and doing it at compile time versus in just one area. And, you know, because SAS wouldn't solve these problems, right? It requires the kind of thought process you put into this vote because it needs to be at that level, not down at the just CSS only level. Fundamentally, the only way it works is if the styles are analyzed in the context of the markup.
Starting point is 00:47:41 Yeah. If you're not aware of, if the markup isn't aware of the styles and the styles aren't aware of the markup, then there's a limit to what you can achieve. And this idea of being able to statically analyze your application at build time is kind of the thing that everything in Svelte springs from. This episode is brought to you by our friends at Rollbar.
Starting point is 00:48:12 Check them out at rollbar.com slash changelog. Move fast and fix things like we do here at changelog. Catch your errors before you use this do with Rollbar. If you're not using Rollbar yet or you haven't tried it yet, they have a special offer for you. Go robot I comp slash changelog sign up and integrate roll bar to get $100 to donate to open source projects via open so rich you've talked a lot about developer experience as well as user experience but you said version 3 really is keying in on making the developer experience better. We haven't talked too much about what it actually looks like to use Svelte or to participate
Starting point is 00:49:10 with Svelte or whatever you call it. Use the framework. I assume it's a command line tool or there's some sort of build tool. A lot of us have current workflows. Does it integrate into web packs and other things? Tell us about how it integrates with other tools and how you use it to get started. At its heart, Svelte is just a compiler
Starting point is 00:49:31 that takes an HTML file in, or rather the contents of your HTML file, and spits out a JavaScript module at the other end and some CSS if your component has styles. That's quite low level. You wouldn't typically use the compiler directly. You would typically use it via an integration for Webpack or Rollup or Parcel or whatever your preferred build setup is.
Starting point is 00:49:57 Svelte has a plugin that will work for it. So the way that you use it is inside your application source directory. In the same way that you write JavaScript modules, utils.js, you would write these HTML components, app.html. Some people prefer to do app.svelte. It's really up to you.
Starting point is 00:50:19 And then you just import that. You import from that file, import app from.slash app.html. And then that is a component, a standalone component that has the Svelte API, const app equals new app. Same way that you would use a lot of other constructors. It's just a regular JavaScript class at that point. If people want to get started with Svelte more easily than having to rig rig up a whole build setup we do have some really easy to use starter templates and if you go to the website svelte. technology you can go into our repl start playing around with that and just click the download
Starting point is 00:50:55 button and you will have a project fully set up and ready to go with all of the optimizations and all of the bells and whistles very cool cool. You also have a companion project that looks to be higher level even than Svelte, which is called Sapper, the tagline military-grade progressive web apps. Which we're going to change. We're going to change, because some people don't like that tagline.
Starting point is 00:51:16 Is that right? Yeah, it was supposed to be a little bit tongue-in-cheek, because a lot of these frameworks have fairly kind of in my view slightly insipid and an unmemorable strap lines and we wanted to get something that was a little bit more evocative but some people really hate the military and so we're gonna change that because some some people have literally said I'm not going to use this framework because of that tagline so we're gonna change it but yes this is a higher level framework that sits around Svelte. If you think of Svelte as a component framework,
Starting point is 00:51:50 Sapper is the app framework that uses Svelte. Have either of you used Next.js? Heard great things, but I haven't personally used it. Yeah, same here. Okay, so Next is this amazing thing. The idea behind next is that you can have each page of your application is a react component and you put all of these react components inside a pages folder and next we'll turn that into a server rendered application so if you go to a page you get html and then at the end of it it will will load the client-side version of that application and seamlessly switch you into this modern native app-like
Starting point is 00:52:29 client-side navigation style app. Very sophisticated. It does all of the code splitting stuff out of the box, and it's just this really beautiful developer experience. And I wanted to have the same thing for Svelte, and Sapper is that thing. So is Sapper going to be updated alongside Svelte 3
Starting point is 00:52:48 is that a thing that people should hop in on right now, should they wait for Svelte 3 what's the situation with Sapper is it going to get broken or upgraded or is it safe to just use it right now and it'll be seamless I hate to say this but I would tell people to wait
Starting point is 00:53:04 I've been telling people to wait actually from diving into svelte full stop until svelte 3 comes out because there are going to be breaking changes um and people are building apps with svelte 3 right now in its pre-release state and we're getting loads of really helpful feedback from that from the community um but it's it's not bulletproof at this point so there's this unfortunate limbo that that happens when your previous version is not gonna survive that much longer but your new version isn't quite ready yet and so i'm sort of telling people just just wait a couple of weeks and then the and then we'll be ready for you come and dive in what else in terms
Starting point is 00:53:43 of community projects is Are there plugins? Are there extensions? Are there people building components that you can use with Svelte? Or are there other people working on Svelte proper? Tell us about the landscape of people participating with the project. We have a really nice community.
Starting point is 00:54:01 It's one of my favorite parts of working on Svelte. It's just a really nice group of people um we hang out on discord uh there's always people in there we've got people from all around the world um just comparing notes and uh and talking about the library talking about the apps that they're using, talking about ideas for the project's future development. It's not just me working on the project. I think we ran the numbers recently. There's something like 75 contributors to the project since it's been going. Obviously, some of those are people who've just done a drive-by pull request here and there.
Starting point is 00:54:43 It's a long tail, but there's a pretty active group of people working on it and the community itself is very active putting out components, putting out pre-processes that would enable you to use things like Sass and Less inside your components.
Starting point is 00:55:00 All that sort of thing. There's a lot of stuff going on. Since maybe Jared and I are hearing about this for somewhat the first time. Jared, you mentioned you heard about this a while back but hadn't really gotten into it i'm curious why why it seems like if if maybe i'm just an outsider and i'm i'm not aware like the visibility is felt to the greater community you know obviously it's growing but can you speak to maybe the sort of the underground movement with it it It seems like it's more underground and sort of ready to explode rather than have exploded in, you know, at kind of a react level, for example. Absolutely. People talk about it like a well-kept secret. I've, so this,
Starting point is 00:55:36 this isn't my first big open source project. I've been involved in a few different ones now. And the thing that I've learned is that it takes so much longer than you would imagine to gain the level of traction that you're talking about. People still talk about Vue as like the new shiny thing. It's been around since like 2013. It's six years old. There's nothing new and shiny about a lot of the projects that are only now reaching people's awareness. So Svelte is very much under the radar
Starting point is 00:56:07 for the vast majority of JavaScript programmers. People are starting to cut on to it. There was the state of JavaScript 2018 survey at the end of last year. And Svelte was the, for the front end framework section, it was the number one write-in answer to the question which framework are you using um it was ahead of you know aurelia and other frameworks like that um so it's slowly gaining traction um a little bit of anecdata i've noticed a sudden uptick in invitations to speak at conferences and things like that so i think people are kind of aware that this is a thing, but a lot of people are hesitant to dip their toes into a new technology stack because there is a very high switching cost. And so I guess our task over the coming months
Starting point is 00:56:58 is to try and persuade people that the cost of not switching is ultimately higher in the long term than the cost of um i confuse myself i was switching yeah not switching versus switching our task over the next few months or so is to try and convince people that the cost of um of not switching to a newer and more future-proof technology is uh higher than the cost of staying put. Sometimes you can't change until the pain that changes is so great that you are forced to change.
Starting point is 00:57:34 That's a terrible place to be in. It's nice to be maybe an earlier adopter in those regards, but sometimes the pain gets so great that you're like, I can't take this anymore. My foot hurts. I need a doctor. You certainly don't want to be in that position. No.
Starting point is 00:57:49 Nor do you want to be in a position of adopting something that isn't yet ready. And so I totally empathize with people who have been using Svelte 2 and they're going to have to do some work to upgrade to Svelte 3. And that's something that I regret because I'm one of those people. You're causing yourself pain here. So one of the things with adoption that
Starting point is 00:58:12 we've seen, Vue had great success with this. Even Elm had success when they blogged about the fact that you can dip your toe into the water with Elm. Evan wrote a great post about how, you know, Elm seems like the kind of thing that's all in, which a lot of frameworks historically have been. Ember is the kind of thing, maybe not anymore, but historically it was like, you've got to use it all and you've got to start with it, or you've got to switch to
Starting point is 00:58:35 something else. Is Svelte the kind of technology where you can say, hey, I'm just going to write my nav bar as a Svelte component and not use it anywhere else on my site, or do I need to dive into it a Svelte component and not use it anywhere else on my site or do I need to dive into it? Svelte is the perfect example. It's like the platonic ideal of a framework that you can adopt incrementally. And the reason for that is that it doesn't have this bulky library that goes along with it. You can't have an Angular app and say, oh, you know what? I'm going to
Starting point is 00:59:02 incrementally adopt Ember it just doesn't really work because then you've got two frameworks on the page at once which means that you've got all of that extra javascript that needs to be evaluated and passed whereas with svelte your minimum component size is it's like something like a you know a kilobyte or two so you can really easily dip your toes in and on on top of that, you can compile to the vanilla JavaScript class, or you can compile to a web component. So if you're in an environment where web components are supported, then you can use Svelte components that way. You get the nice authoring experience, but you also get the cross-platform,
Starting point is 00:59:44 cross-framework compatibility that web components are designed to have that's excellent i would definitely put that up front and center on your guides and marketing materials because that helps people you know bridge the gap right when the gap is much smaller than they think it is oh i can just dip my toe in i can just try this and if i't like it, it's not going to cost me very much. It's not like I have to completely abandon my current workflows or my current application to give it a try. I'm definitely going to think about that advice
Starting point is 01:00:13 because, honestly, marketing is not our strong point. That's kind of where I was getting at, too, is with that sort of direction we're taking the last few minutes is, you know, if it's not well-known, how do you make it more well-known? And, Jared, your point of dipping your toe in is a great example of how to begin to inch towards that execution because the easier you can give somebody an on-ramp to either contribute in open source, that's great too, or also be able to try or adopt. Like adoption is, you know, one of the hardest things of open source is how do you get market
Starting point is 01:00:46 share how do you get somebody to try it and the easiest way is like make it simple how you make it simple well just like jared said rebuild your navbar and use it just in that case and see how it works out for you and your team i'd actually write a blog post around that and make it a challenge you know like i challenge you to try it and see if this new way as you just said before like talking about the pain to change you know make it a challenge to to
Starting point is 01:01:09 to try one small thing in your application to initiate change yeah we should do that the Svelte challenge the Svelte challenge the other good way to market is to have a bunch of
Starting point is 01:01:18 synthetic benchmarks that all make yours look the best you know there's there are some benchmarks out there that we've taken path in. There was one recently that showed that Svelte was 35 times faster than React
Starting point is 01:01:34 and 50 times faster than Vue. And I'm just not a fan of using numbers like that in marketing materials because it's contextless. It is. And it doesn't help someone decide whether it's suitable for their application or not. No, but it sure, sure makes headlines. That's, that's the thing.
Starting point is 01:01:52 So yeah, that's the problem with, uh, I don't know if you call it integrity, but I'll just call it integrity is, is that when you, if you have integrity in the sense of, you know, there's an advantageous approach, but it violates a personal moral ethic, then you bypass certain opportunities that would otherwise arise, right? I think the other thing that I've realized lately is that people value developer experience more than they value that stuff anyway. I think so.
Starting point is 01:02:19 Yeah, people actually don't very often really do a deep exploration of the tools that they're using. Something that I've seen time and time again, people will opt for a really nice, easy developer experience, even if it comes at the expense of user experience, ultimately. And they'll come up with various kind of rhetorical justifications for, oh, you know, if the developer experience is better, then I can spend more time focusing on user experience, which is just so logically fallacious.
Starting point is 01:02:52 But people will buy into it because ultimately we want the thing that makes our job the easiest. And so that's why Svelte 3 is so heavily focused on improving the developer ergonomics, undoing some of the original design mistakes that we inherited from Reactive, and trying to do something that will appeal to people in, for example, the React community, who've looked at frameworks like Svelte and said, templates, I don't want to deal with templates and other specious justifications. I think that if people really give it an honest go, they'll really enjoy the experience of writing applications in this way. Well, I'll go on record to say when Svelte 3 comes out, let us know
Starting point is 01:03:41 and I will take the Svelte challenge. I will write a little bit of change.com with Svelte 3 and let everybody know and I will take the Svelte challenge. I will write a little bit of change.com with Svelte 3 and let everybody know what I think. Let's talk about the future then. I mean, the future seems bright. There's probably something on the horizon that maybe people don't know about. What's in the future for Svelte and maybe Sapper as well?
Starting point is 01:04:00 What's coming up? So more of the same, first of all, just trying to make the quality of the generated code as high as possible and as small as possible we want to make SAPR
Starting point is 01:04:10 the best development experience for an application that you could possibly have we want to take the best features from other frameworks like we want to do
Starting point is 01:04:18 something that's similar to React Suspense which is a nice way of allowing asynchronous data to not interrupt the flow of navigation around an app that's um something that we think is possible with the svelte 3 architecture and something that we'll probably do in the next few months um beyond that something that i've been thinking a lot about and something that I would really love to do is take the ideas from Svelte,
Starting point is 01:04:47 this idea of constructing what is essentially a graph of your application at a moment in time and then turning it into DOM manipulation code. I would like to do that, but turn it into WebGL code. I think it's possible to apply the same ideas and generate a WebGL code. I think it's possible to apply the same ideas and generate a WebGL application that is built around a scene graph and a camera and lights and materials and all of that sort of thing, but doesn't have all of the library code that you typically associate with WebGL apps.
Starting point is 01:05:20 You know how when you go to see a cool WebGL thing, there's often a loading screen. It takes like a minute or two before the progress bar finishes and you can actually experience the thing. I think we can do better than that. And I really want to explore that space once Svelte 3 and everything else that accompanies Svelte 3, including the documentation, which is going to take me forever, is out of the way. When it comes to kind of following along, I noticed that the blog is a bit dated in terms of like announcing Svelte 2. So what's the, aside from that, is it like Discord? Where are good places for people to keep up? Or obviously they listen to this podcast, they're probably tracking ChangeLog News and our newsletter, but what are other good sources for just keeping up with,
Starting point is 01:06:04 you know, latest, greatest bleeding edge stuff? Uh, you're right about the blog. It's not been historically something that we've been very good at keeping up to date. We do have a bunch of blog posts that are going to be released along with Svelte 3, but if people want to stay up to date with everything that we're doing, they should follow us on Twitter, uh, twitter.com slash SvelteJS, and they should come and hang out in our Discord chat room. There's a link to that on the website, which is Svelte.technology. Cool. We'll link it up in the show notes for sure.
Starting point is 01:06:33 Rich, thank you so much for taking the time to kind of do this deep dive with us. I know that you're busy and you've got lots of stuff to do. I mean, JavaScript journalist, I mean, that's the coolest title ever. But we really appreciate the time you spent with us today. Thank you. My pleasure. Thank you for having me. All right. That's it. Thank you for tuning into this episode of the change log. If you enjoyed this show, do us a favor, go into iTunes or Apple podcasts and leave us a rating or review, go into Overcast and favorite it. We to it share with a friend and of course want
Starting point is 01:07:05 to thank our sponsors digital ocean get prime and rollbar also thanks to fastly our bandwidth partner head to fastly.com to learn more we're able to move fast and fix things around here at changelog because of rollbar check them out at rollbar.com and we're hosted on linode cloud servers linode.com slash changelog. Check them out. Support this show. This show is hosted by myself, Adam Stachowiak, and Jared Santo. The edit, mix, and master was done by Tim Smith. And the music is done by the one and only Breakmaster Cylinder.
Starting point is 01:07:35 If you want to hear more shows like this, subscribe to our master feed at changelog.com slash master. Or go into your podcast app and search for changelog master. You'll find it. Subscribe. Get all of our shows in one single feed, as well as some extras that only hit the master feed. Thanks again for tuning in. We'll see you soon. I'm Tim Smith, and my show Away From Keyboard explores the human side of creative work.
Starting point is 01:08:08 You'll hear stories sometimes deeply personal about the triumphs and struggles of doing what you love. Jumping off into the abyss is kind of my skill. And so I'm not saying that it's not scary. I'm saying that perhaps my skill is just not being able to estimate how scary it will be. New episodes premiere every other Wednesday. Find the show at changelog.com slash AFK or wherever you listen to podcasts.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.