Fullstack Rust med Dioxus
Av Anders C. Sørby
- -Er Rust egnet til å utvikle fullstack-apper? Etter å ha sett på RustConf 2025 bestemte jeg meg for å prøve ut det delvis uferdige rammeverket Dioxus som lover å kunne lage fullstack-apper til både web, desktop og mobil med ren Rust-kode. Rust har fordelen av å være et kompilert språk som ikke bruker garbage collection og er minnesikkert. Ambisjonen er at man skal klare å ha et språk som både er best på ytelse, men er ergonomisk, brukervennlig, typesikkert og ikke minst minnesikkert. Stadig flere er overbevist om at Rust har klart dette og Rust blir omfavnet av store tekselskaper og skal erstatte rollen til C/C++. Linux-kernelen og Windows har også begynt å integrere Rust i stadig større grad. Og stadig flere, f.eks. NSA, anbefaler at eksisterende kode skrives om til minnesikre språk som Rust.
Rammeverk som Next.js tilbyr også fullstack skrevet i samme kodebase med JavaScript eller TypeScript. Altså at typiske frontendspråk blir brukt til backend. Dioxus tar motsatt tilnærming og bruker et lavnivå backendspråk til frontend.
Men egner Rust seg egentlig til frontend?
Når man har masse lavnivåfunksjoner som borrowing, ownership, eksplisitt kloning og lifetimes er kan det komme i veien for å utvikle effektivt, vedlikeholdbart og lesbart. Overraskende nok er ikke dette noe stort problem er min konklusjon. Rust tvinger utvikleren til å ta informerte valg om ressursbruk som fører til bedre kode. I Dioxus trenger man sjelden å tenke på disse mer kompliserte delene av språket og det er enkle makroer som gjør de tunge løftene slik at koden blir lett og konsis.
Dioxus henter mye inspirasjon fra React. Funksjonsnavn, mønstre og metodikk vil være velkjent for de som har jobbet med React før. UI-et bygges som i React opp fra komponenter som håndterer sin egen tilstand. En komponent er bare. Som erstatning for Reacts JSX-syntax har man rsx-makroen. Den støtter det man trenger av markup, if og for-statements.
Dioxus genererer først siden på backenden (SSR) før den sendes til klienten. Påfølgende oppdateringer av UI skjer så via den samme Rust-koden kompilert til Web Assembly kjørende i nettleseren. For mobil- og desktop-plattformene skjer dette native.
Server-funksjoner er første-klasses inne i koden og oversettes til http-kall i bakgrunnen der objekter serialiseres og deserialiseres som JSON. Server og frontend kompileres fra samme kodebase og funksjoner som bare kan kjøre i backend, feks database og autentisering, skilles ut med “feature”-funksjonen i Rust. Det gjør det veldig enkelt å sette opp en app uten å måtte lime sammen masse boilerplate.
Dioxus sitt eget verktøy støtter hotreloading og raske bygg slik at man får samme utviklerflyt man er vant til fra andre rammeverk.
Rust sine feilmeldinger kan være skumle i begynnelsen, men de kommer ofte med et forslag til hva man bør gjøre for å fikse feilen.
Som database prøvde jeg ut SurrealDB som støtter alt du ønsker deg og mer. Du får blant annet relasjon, graf, tidsserie, dokument, skjemaløs og med skjema i en og samme database. Dette gjorde det enkelt å komme i gang med utviklingen av appen uten å måtte bruke tid på å sette opp migrasjoner og tabeller.
Konklusjon
Dioxus virker som et lovende rammeverk, men jeg ville ikke satset for mye på det før versjon 1.0 er lansert. Men det kan også være starten på en ny æra i app-utvikling der Rust blir selvsagt for fullstack-utvikling.