A Legendary Web Framework is Reborn... In Rust
ฝัง
- เผยแพร่เมื่อ 5 ต.ค. 2024
- 👉 To try everything Brilliant has to offer for free for a full 30 days, visit brilliant.org/... You’ll also get 20% off an annual premium subscription. They have courses on LLMs and Quantum Computing!
A quick look at the Loco.rs Rust crate, which aims to recreate much of the "magic" that made Ruby on Rails so well loved.
Dotan Nahum's article "Introduction to Loco" - / introduction-to-loco-t...
Keyboard: Glove80 - www.moergo.com...
Camera: Canon EOS R8 amzn.to/4gSpivt
Monitor: Dell U4914DW 49in amzn.to/3MJV1jx
Microphone: Sennheiser 416 amzn.to/3Fkti60
Microphone Interface: Focusrite Clarett+ 2Pre amzn.to/3J5dy7S
Tripod: JOBY GorillaPod 5K amzn.to/3JaPxMA
Mouse: Razer DeathAdder amzn.to/3J9fYCf
Computer: 2021 Macbook Pro amzn.to/3J7FXtW
Lens: Canon RF50mm F 1.2L USM amzn.to/3qeJrX6
Caffeine: High Brew Cold Brew Coffee amzn.to/3hXyx0q
More Caffeine: Monster Energy Juice, Pipeline Punch amzn.to/3Czmfox
Building A Second Brain book: amzn.to/3cIShWf - วิทยาศาสตร์และเทคโนโลยี
As mentioned in the video, I'm currently working my way through a Quantum Computing course on Brilliant. Highly recommend the course and Brilliant in general. They have courses on programming, LLMs, and other domains as well.
👉 To try everything Brilliant has to offer for free for a full 30 days, visit brilliant.org/CodetotheMoon/ You’ll also get 20% off an annual premium subscription.
Rust on Rails = Railway
Railgun
@@Дмитрий-о8м9с - Rusty Rails
😂 Isn’t railway a cloud service tho?
Ooh I love this name!
Railrust. Oxidized to the core 😂
This is surreal seeing how I started programming (Ruby, vaguely in 2013-2025, using RPG Maker, never rails….then seriously again in 2021-2022 with Rails.) getting to witness two paths merge together.
Rust is really unstoppable. I was already kind of sold with Bevy, although I havent built anything big yet.
Anyway, back to the video.
I've been programming since before the web, and when Rails emerged its community felt to me like a specific type of cult. Once Rust gained a following, it community felt to me like the same type of cult as if it was the Ruby cult reincarnated. Now that Rails had made it to Rust I think my gut feelings about the two communities have been validated. 😳
yeah, pretty much. look up Steve Klabnik
@@knowledgedose1956 - Yeah, no need. That was exactly one of the cult members I was thinking of. 🤷♂
The first time I used Rails I remember thinking « we need that in rust », anyways great video
Thanks glad you liked it!
Problem with Tera: `{{` and `}}` expressions cannot be changed. This means that it will clash with Vue/React templating. Askama allows the use of custom delimiters.
Bro what the fuck are you even doing?
In Vue you can change the “delimiters” property to something else like [[ ]].
Loco supports multiple view engines, and it's extremely easy to add others (because of how Rust made us do this integration).The Tera one comes out of the box, we'll add more as we go along.
Rust in Rails
🦀 🚂
i was confused about what this is at first but then when the code came on the screen i knew what's happening.
i have used **Jinja2 for Python** to write html templates and then autogenerate them into static websites,
and i can immediately recognize that is the same design pattern but now in rust, that's awesome
Rusty Rails 😊
Thanks for this video! Really well done, you managed to capture the essence of what we're trying to do with Loco. Appreciate the coverage of the back story because that's been an important driver of the features and maturity of the framework. Thanks! 🚂♥
Rust in Rails?! I'm not getting into any train going through that!!!
😂 fair enough!
Man, this is pretty cool. I got REALLY into Ruby on Rails when it first showed up around 2006, and it was my primary work environment from 2007 to 2013. I kind of burned out on web development after that and ended up mostly doing back end stuff, so I haven't really kept up on the space since then, but I'll keep my eye on Loco.
A lot of the value in Rails *is Ruby*, in that it enables very rapid slop / prototyping.
Tried loco myself, i don't really like the fact that its opinionated and since the base is done without any input its hard to grasp your own project at first.
Opinionated is best for fast productivity
@@vectoralphaSec Agreed. I'm tired to reinvent the wheel. Just use the common one even it's not perfectly match.
I can totally understand this perspective! The approach is definately polarizing.
Highly recommend Leptos if you haven’t tried it already 😎
@@vectoralphaSec If you think about it, ofc. But here its based on someone else opinions. I've made my own templates for this exact reason. Granted is more manually intensive than using loco but i feel like devs have a lots to gain by picking themself the tools they want to work with.
@@codetothemoon I've made multiple projects using Leptos! My last one is a website that download youtube video, convert them to mp3 and put them in my navidrome library. Its was really easy to do with Leptos, so much so that i've lost way more time on the styling than the backend. Can also recommend without any doubt.
I would prefer just SQLx instead of an ORM...
Understandable, that is typically my preference as well
This was a major factor for deciding to go with SeaORM - it is sqlx based. I had initially approached with caution, saying to myself "if anything, I can always grab a db connection and go with sqlx". Turns out SeaORM is really great -- it's lightweight even though it's feature packed (much thanks to Rust being... well... Rust). And because we chose to pass a connection explicitly with every DB operation (and not keep it globally somewhere) you can always mix-n-match Sqlx and SeaORM anywhere you want.
Granted, we do generate code for SeaORM.
@@jdot Hmmm, interesting. I think I will have to try it out! I actually never used SeaORM. I have a negative view of ORMs since I work with Django and oh my, sometimes it makes me struggle.
I find it hilarious how he tried to build ruby in node and updates always broke his project. I feel that’s the big problem with react is that nothing is stable and your build always breaks as they just have breaking changes all the time and because everything runs client side you have to keep up to maintain the security updates and there is just this constant maintenance cost with JavaScript. To me that is the appeal of rust as a compiled language it will have way less breaking changes and way more stability
Not only that, but the tools broke too. And then, you have this peer pressure -- should you stay with Wepback although everything moves on to Vite? (and then to the next tool in the future?). Every such migration is a "break the world" event. It made me unhappy, unwanting to open the project.
With Loco, every feature request -- I get this excitement, and can't wait to dive in and implement. I know Rust and the tools will always be stable, and that things I left there will stay the same.
Uhm rust does have dependencies as well??????
Damn what a coincidence. I was looking into loco like 4 days ago lol!
Nice!
Rust on Rails, alias Hungarian State Railways (MÁV)
I would just use Elixir/Phoenix and use Rust only if needed, with the help of Rustler.
Heard amazing things about Phoenix, can’t wait to try it myself. Hadn’t heard of Rustler, will look into that as well!
Isn't that what Gleem is supposed to be? A rust-esque language in the Erlang-VM space.
@@gljames24 Yeah, Gleam is ML-inspired, as is Rust. But the ecosystem isn't ready yet, IMO. So I'd stick to Elixir.
But is the phoenix performance as good as loco ?
@@julienv7031 No, Elixir and the BEAM (the VM it runs on) are fast - at least compared to Ruby - and keeps on getting faster, but they're clearly not as fast as Rust can be. There are many reason for that: running on a VM instead of being native, immutability, fair scheduling, ...
But usually that's not the point. Being fast is nice but being fault-tolerant is generally what you want, at least most of the time.
And in this area the BEAM is unbeaten. It offers tools like actors, supervision tree, fair scheduling, ... so your operations keep on running under unusual circumstances. Instead of crashing directly, it smoothly runs in degraded mode, but still trying to recover.
If you really want speed you can optimize the parts of code that are slow and code them in another language: C, C++, Rust or Zig are the most used ones.
Randomly brings up quantum computing 😂
Today it might sound random, in 5-10 years maybe not!
Being an early user of django (which is around the same age, and I did select it over ruby/rails, while both of them were more obscure, and did not know it would be a career defining decision), I also tried around to make my own rust stack (axum, htmx, minijinja, seaorm), so loco is really on the top of my list to try working through a larger/medium project as well. However, I am not yet entirely sold, I rather like the "make it easy to code" approach django has, where I often write my models as code, over the code generation I have to use from the command line.
I am also not quite happy yet with seaorm, as it sometimes feels more work with it, than simply using SQL (something you cannot say if you work a lot with django's orm), I guess the DDD focus has upsides and downsides there.
I do admit, using one for years does make a skill gap, so this is just my butt feeling.
I am always also a bit perplexed, why ORMs do not focus on being more focused on code as a source of truth, and instead forces one to write SQL migrations. Every time someone says he hates ORMs, but uses one, it turns out, it is one of those, that has no migration system. I do not see the point in an ORM, that does not make my code the source of truth, even if I model my system around an already existing db. I do see that at least loco tries to solve this issue in a way, but I am not sure if I like the way.
what is the problem with scaffolding though? you can easily do everything yourself if wish so, or you can just scaffold all/part. even when code is generated you will definitely touch it at one point and change it
Unike Ruby, Rust forced us to make all the magic "in the open". Because it's statically typed, and because it's safe, most of the magic is explicit. So you do have ways to start from code, no problem with that. In fact, the longer guide on the website takes the "under the hood" approach teaching you how to do manually, everything the generators does automatically. Sounds like you're a person that can join us by contributing :)
Ok, I wasn't expecting this to be honest, this is great
Glad you liked it!
perfect timing after Rails conf and Rails 8 announcement
Hopefully loco drops the external crates and decides to incorporate their own versions of their own services to not have the same issues like in JS ecosystem.
For very stable crates -- we take external ones. We read the code of external crates and we're very mindful of what goes inside. For other cases, we definitely implemented our own.
@@jdot this is awesome. i can see this becoming something you migrate to when costs/latency become bottlenecks.
eventually it'll be something you use like rails/laravel for everything when you become fast at rust.
i'm noob in rust and loco
coming from laravel web framework.
today testing loco web framework in API Rest mode, so much need to be add, especially on validation message and auto generate api doc, but so far this framework is promising
i hope you will cover more loco web framework tutorial
Yo carlitos, this framwork is loco man!
Ahahah 😂
I've been meaning to work on something like Symfony in Rust, but honestly this seems more promising.
soooo Rusty Rails got it
Loco has the advantage of building a template engine while looking at many other templating engines and seeing what works and what doesn't after many years of experience, and it does the same with all the other things that are just expected out of the box
This is great, now I will wait till everyone complains on how bloated this is and Rust Sinatra comes out using just Axum, SQLX and Maud
I feel like using Rust as Rails is the same as using CBR on a track without turns. Rails itself hasn't had the goal to imitate Rails, and I guess that any Rails like project fall into the success trap. Futhermore when you use ruby with magic it is okay, but using rust with magic? How far you will go? What can you achieve for yourself and in general relying on miraculous rails? This MVC scaffolding really the thing after you come to rust?
Please check SpringRS is very new but looks great. A real alternative of Spring of Java compatible with Axum and Tower middlewares.
Thanks for putting this on my radar, hadn’t heard of it!
Thank you for the video!
My pleasure!
I’ll stick to ol’ reliable Ruby on Rails, no need to replace the first part of that.
Fair enough, seems like the Loco author would approve!
This is really cool, but I would love to see a framework like this that uses rust to run on the client instead of using a template engine.
Check out Leptos!
@@codetothemoon Well I mean like this plus Leptops, this seems to give you a ton of quality of life over Leptos on the backend "batteries included".
A love child of Leptos and Locco.
@@codetothemoon Yeah, I was thinking like a love child between this and Leptos where you get the "batteries included" server features of Locco, but the client-side reactivity of Leptos.
So, is this the first web framework in Rust that includes batteries?
Missed chance to name it RustyRails
I think at one point at least there was a project called "Rust on Nails"
😂
@@killersquirel11 Indeed, Rust on Nails was a kind of a blog post
It was actually called that way. That's why, for example, our code generation framework which we built especially for this, is still called "rrgen" (rusty rails gen). But then I looked for a 4 letter word, that would flow out of your fingers, that would also connect with a Locomotive / Rails / etc. 🙂
Ow I was thinking about a full fledged web framework for very long time I am happy some people are making it a reality
Interesting video. However, looking slightly away to read your script is distracting (for me at least), either make it more deliberate i.e. completely turn your head to read another screen or memorise what you're going to say and look directly at the camera.
Thanks for the feedback, I was experimenting with something new for this video, so this is exactly the sort of thing I need to hear!
Time to build != performance, in most cases critical performance areas could be optimised and most of them are DB queries and not Meta layers. Rust is nice language but for fast and efficient development is not the best choice. On each change you will wait a lot of time to check all memory safe stuff while in runtime you need to check less, paradoxical thing that yet to find by those who will try to chose this tech.
From my experience only with Loco (I have other Rust experience in bigger, more complex projects) -- everytime we needed to do a major refactor -- which would have been super scary, super insane in other languages -- it's been a safe journey in Rust.
The idea of the compiler checking stuff out for you, is real. Even when you have great test coverage, with major refactoring you'll get bit by stuff you didn't see because you're living in three worlds -- the modeling of a problem before refactor, the in-between work (which is where you'll do a lot of mental gymnastics), and the final and refactored modeling. Rust is fantastic for reducing that mental fatigue, I'm willing to pay some compilation time for that.
haven't seen your channel in ages man and i love the beard on you very good look
Hey @codetothemoon - which IDE and plugins do you use for the RUST ? Thanks
DOOM Emacs 😎
Thanks @@codetothemoon
There is Phoenix, no need for RUST RAILS.
IMO, no more template. Reason: the amount of time used to learn templates can be used to learn vuejs (simpler than Angular and React, IMO).
Vue has templates too, doesn’t it?
@@codetothemoon correct 😊
HTMX
What’s the difference between this and something like C# and razor? Speed wise
Good question - razor is a frontend wasm framework right? In that case it might be apples and oranges because loco is server side. Leptos, yew and Dioxus might be more comparable
Rubyists are going to ragequit
Like Dotan, I say if you enjoy Ruby and cloud compute costs aren’t an issue, stick with it!
Just embed Ruby into your Rails application. 😂
Also, we never rage. We are all serene like a well balanced painting until we see a Python developer in the wild. ❤ 🐍
Rusted rails... stay safe out there 😂
Those two templates you show at the start are not really the same. For one the b is not the same as strong
They are definately different! They are both used as examples for their respective frameworks. For example on the rails site DHH walks through building this “posts” app in Rails. Though I think he goes a bit deeper than we did in this video
Classic Ruby RoR devs will cry, when them will meet trait bounds...
20 years and people still completely misunderstand what made Rails great.
Let us in on it! Part of my goal here was to understand the rails mindset in general. If there’s something I missed please let me know!
Rust has become the new Linux meme; this will be the year of Rust on the web. It's a great systems language but a terrible choice for writing backends. Go is right there, and I can pretty much guarantee that the server I'll write in Go in 10 minutes will be faster than the one you'll write in an hour in Rust.
Go is a forced meme by Google. Learn lisp. Clojure is a bliss. Common Lisp is fantastic because of its interactive experience.
Honestly, I doubt anyone enjoying Rails would want to write in Rust. One is fun, the other is just tedious.
Now all I need to see is an AI or ML framework like PyTorch/TensorFlow & we also need to move into the mobile app dev scene as well
But in RUST
We already have a Rust-based Game engine called Bevy
Re torch/TF we have Candle 😎 mobile is a bit of a void though, Dioxus might be the current leader there!
i do love Ruby
I wonder how the machine code differs between Ruby and Rust? :/
missed opportunity to not call it Railgun
😂 agree 💯
Seeing the templating reminded me of how much I dislike templating. You don't know what variables to expect in the controller and you don't know what variables are provided in the template. It's pretty awful in my opinion.
An order of magnitude in CS is 2, so if half as fast would be the same as ruby and NOT at all impressive.
I’m referring to a base 10 order of magnitude, which would be a factor of 10
Why is Elixir not mentioned here?!
Love what I’ve seen of Elixir so far, which is admittedly very little - was there something here that was ripe for comparison to it?
@@codetothemoon Elixir and Phoenix is an answer to ROR performance that is mature and used by companies like Discord, Pinterest, PepsiCo, Apple.
It comes from the same premises that you lay down in your intro: combining the devx of Ruby and Rails with something (way) more performant and reliable.
I think Loco is sufficiently similar to be compared with Elixir, just for the general knowledge of your viewers :)
Thank you for your videos BTW
@@codetothemoon Not really, it's just another competitive web-focused framework that always pops up whenever you mention non-JS frameworks, along with things like C# frameworks.
Now can he do that for V too?
this framework looks really interesting, just gonna ignore the React part though
Ooc what would you use in place of React?
@@codetothemoon i would love to use Vue or Svelte more, they're so simple to work with
Ruby doesn't perform well - Ya thats true HM GITLAB!!
Checkout sycamore when you can
Checked it out awhile ago, I don’t remember a ton but I don’t think I was ultra impressed. Didn’t seem to be on the same level as Leptos and Dioxus. Would love to be proven wrong though!
Rusted Rails
will it help me write ecommerce shops? if not its useless.
Why wouldn't it?
@@ilmuoui there are bazillion website frameworks, and like 2 viable eCommerce frameworks - wordpress & shopify (very expensive). plus you can do 100% what all the other web frameworks do with php + html + js + css. php is not that slow mind you, i doubt rust would offer any meaningful performance improvements.
I don’t think Loco would be the first thing I’d reach for when building an e-commerce site. But I don’t think that makes it “useless”….
Coming from the Django side of the force, I don't know if I would like to use something that opinionated. Django sometimes disappoints me for forcing too much opinions and rigidity on how to do stuff (specially authentication!). I don't know if that happens with Loco. However, I really like how easy it is to do some common stuff (like integrating files with S3, or using emails, etc). I saw some good Rust crates that are based on Django features: axum-login and axum-messages come to my mind, both by the same guy, which also wrote tower-sessions. I really liked using those, specially tower-sessions inside my Axum projects. But, as I said, I like using HTML templates on the server and, nowadays, augmenting them with HTMX.
The way Rust made us build Loco -- it's hard to do that magic glue that's hard to reason with (which Django and Rails has). You can visually see where things connect, because Rust has to be statically typed, explicit, and safe.
So, for example, if you don't like how we're doing auth, you just delete that module from your app.
If you don't want to use our Cache submodule, don't use it -- you'll pay virtually nothing for it (Rust zero cost abstraction policy).
You can also compile-out the database in Loco, having a stateless service. As we move forward, we'll offer more feature flags to compile out pieces you don't need.
@@jdot Nice!! Thanks for the explanation.
Rust and good developer experience are going two opposite ways, you can't combine them
The issue is getting people to learn rust
Holy shit
I like rust. But I think rust is way too verbose for this level of abstraction. I mean ruby reads like plain English in the controller. Simple. But the rust syntax cares about whether I have an 32 bit integer or a 64bit integer. And all those other types, that don't add much information to the expressiveness of my code in the controller.
For some reason the way you read from the prompt is distracting af.
Not to s**t on anyone's fun, but a compiled language will never be as fun as a dynamic language period. The reason rails is so good is because any changes you make are automatically shown without restarting the server. You add controllers, models, etc... but you don't restart the server, it's automatically discovered and included within the web routes. It's a simple thing, but for a big project this could speed up your workflow by thousands of hours.
It's good that projects like this pop up in compiled langauges, because go for example have only micro frameworks, it's not ideal for anything big. Makes the whole "compiled" language thing irrelevant because there's no framework to begin with. But this could at least make things doable with a compiled langauge, I just wish something like this is available in go.
I don't see the connection there.
Not sure about ruby, but python and js don't have a native automatic restart either, both of them use some tool or library to do that.
And those are not exclusive to dynamic languages either: go has air and wgo for example, rust has cargo-watch etc.
And about go not having bigger frameworks like that, there is one called beego, never used it but it seems pretty complete.
Rails is and has always been dog shit
What’s your go to stack?
Rust have performance or safety, not both.
performance looks like
unsafe {
fn main()
}
I am sorry.
while there are undoubtedly some scenarios where you'd need to use unsafe to get optimal performance, i don't think it's fair to say that Rust makes you choose between performance and safety. I think in the vast majority of cases you can have both.
@@codetothemoon It's obviously a troll 🤣. 💓u for being responsive tho lol
Why imitate a shitty framework?
It's better than any JS framework though.
Many people like it?
For the record, rails have been used to build the biggest sites such as github, shopify, spotify, and airbnb.
@@lazyh0rse that’s because it was the hot new thing at that time. And also much better than spring (didn’t require much configuration)
The same thing is happening with using rust at aws, azure, android, etc.. it is the hot new thing that is much better than c++ (in memory safety at least)
Lots of things have changed in the last 20 years. But rails is still just as slow as it was all those years ago.
@@zahash1045 No it's not the same, tell me one big site that's built with go or rust? Even google have not yet replaced python with golang for youtube.
The thing that sold people on rails is the developer experience, not how fast or better it's for the consumer.
rails is fucking awful, with a terrible design, why model anything after it?
despite what you or I might think, many folks love it!
@@codetothemoon I'm sure they do. It's because they don't know any better.
@@conundrum2uWhat is the better option? I am assuming you don't mean anything related to web dev?