Tauri 2.0: Rust desktop aplikacijos

Kodėl Tauri kelia tokį susidomėjimą

Kai prieš kelerius metus pirmą kartą išgirdau apie Tauri, buvau skeptiškas. Dar vienas framework’as desktop aplikacijoms? Tikrai to mums trūko, kai turime Electron, Qt, ir visą būrį kitų įrankių. Bet po to, kai išbandžiau Tauri 2.0, supratau, kad čia vyksta kažkas tikrai įdomaus.

Pagrindinis Tauri privalumas – tai ne tiesiog Electron alternatyva. Tai visiškai kitoks požiūris į desktop aplikacijų kūrimą. Kol Electron’as pakuoja visą Chromium naršyklę ir Node.js runtime’ą į kiekvieną aplikaciją, Tauri naudoja jau sistemoje esančią webview biblioteką ir Rust backend’ą. Rezultatas? Aplikacijos, kurios užima 10-20 kartų mažiau vietos ir naudoja gerokai mažiau atminties.

Bet tai tik pradžia. Tauri 2.0 versija atneša tiek daug naujovių, kad verta išsamiau pasigilinti, kas čia įvyko ir kodėl tai turėtų rūpėti kiekvienam, kuris kuria desktop aplikacijas.

Kas naujo Tauri 2.0 versijoje

Antroji Tauri versija – tai ne tik paprastas update’as su keliais bug fix’ais. Tai fundamentalus framework’o perprojektavimas, kuris atneša mobilių platformų palaikymą, pagerintą saugumą ir daug geresnę developer experience.

Pirmiausia – mobiliųjų platformų palaikymas. Dabar galite tą patį kodą naudoti ne tik Windows, macOS ir Linux aplikacijoms, bet ir iOS bei Android. Tai reiškia, kad frontend’ą rašote vieną kartą su React, Vue ar bet kokiu kitu web framework’u, o Tauri pasirūpina, kad viskas veiktų visose platformose. Nereikia mokytis Swift, Kotlin ar kitų native kalbų.

Antra didelė naujovė – plugins sistema. Tauri 2.0 ateina su oficialiais plugin’ais failų sistemai, shell komandoms, clipboard’ui, notification’ams ir daugeliui kitų dalykų. Bet svarbiausia – galite kurti savo plugin’us ir dalintis jais su bendruomene. Tai labai primena Rust crates ekosistemą, kuri yra viena geriausių programavimo pasaulyje.

Trečias dalykas, kuris tikrai nustebino – IPC (Inter-Process Communication) našumo pagerinimas. Komunikacija tarp frontend’o ir Rust backend’o tapo žymiai greitesnė. Jei kuriate aplikaciją, kuri intensyviai naudoja backend’o funkcionalumą, pajusite skirtumą iš karto.

Rust backend’as: baugus, bet verta

Čia turbūt didžiausia kliūtis daugeliui web developerių. Rust nėra JavaScript. Rust turi ownership sistemą, lifetime’us, borrowing’ą ir visą krūvą kitų konceptų, kurie gali atrodyti bauginantys.

Bet štai kas įdomu – jums nereikia būti Rust ekspertu, kad pradėtumėte naudoti Tauri. Pradžiai užtenka suprasti pagrindus ir mokėti nukopijuoti bei pritaikyti pavyzdžius iš dokumentacijos. Tauri komanda padarė puikų darbą, kad Rust dalis būtų kuo paprastesnė.

Štai paprastas pavyzdys, kaip atrodo Tauri komanda Rust’e:

„`rust
#[tauri::command]
fn greet(name: &str) -> String {
format!(„Labas, {}!”, name)
}
„`

Tai tiek. Jūs tiesiog pridedate #[tauri::command] annotation’ą prie funkcijos, ir ji tampa prieinama iš frontend’o. JavaScript pusėje tai atrodytų taip:

„`javascript
import { invoke } from ‘@tauri-apps/api/tauri’;

const greeting = await invoke(‘greet’, { name: ‘Jonas’ });
console.log(greeting); // „Labas, Jonas!”
„`

Žinoma, kai pradėsite kurti sudėtingesnes aplikacijas, turėsite gilintis į Rust. Bet pradžiai to užtenka. O kai jau pradėsite mokytis Rust – atrassite, kad tai iš tikrųjų nuostabi kalba, kuri moko galvoti apie programavimą visiškai kitaip.

Saugumas kaip prioritetas

Vienas dalykas, kurio Electron aplikacijos dažnai neturi – tai tikras saugumas. Electron’e labai lengva sukurti saugumo spragų, ypač jei naudojate nodeIntegration ar contextIsolation neteisingai. Daugelis developerių tiesiog išjungia šias apsaugas, nes taip lengviau.

Tauri čia elgiasi visiškai kitaip. Default’u viskas yra užrakinta. Jūsų frontend’as negali tiesiogiai pasiekti failų sistemos, paleisti shell komandų ar daryti bet ko kito potencialiai pavojingo. Viskas vyksta per aiškiai apibrėžtą API, kurį jūs kontroliuojate.

Pavyzdžiui, jei norite, kad jūsų aplikacija galėtų skaityti failus, turite tai eksplicitiškai leisti tauri.conf.json faile:

„`json
{
„tauri”: {
„allowlist”: {
„fs”: {
„readFile”: true,
„scope”: [„$APPDATA/*”]
}
}
}
}
„`

Čia matote ne tik leidimą skaityti failus, bet ir scope’ą – aplikacija gali skaityti tik failus iš savo duomenų direktorijos. Tai labai panašu į tai, kaip veikia mobiliosios platformos, ir tai puiku.

Dar vienas svarbus aspektas – Tauri naudoja Rust, kuri yra memory-safe kalba. Tai reiškia, kad dauguma klasikinių saugumo problemų (buffer overflow, use-after-free ir pan.) tiesiog neįmanomos. Tai ne 100% garantija, kad jūsų aplikacija bus saugi, bet tai tikrai geras startas.

Realus našumas ir dydžio palyginimas

Teorija teorija, bet kas realybėje? Padariau paprastą eksperimentą – sukūriau tą pačią „Hello World” tipo aplikaciją su Electron ir Tauri. Rezultatai kalbėjo patys už save.

Electron aplikacija:
– Installer dydis: ~120 MB
– RAM naudojimas tuščiai aplikacijai: ~150 MB
– Paleidimo laikas: ~3 sekundės

Tauri aplikacija:
– Installer dydis: ~3 MB
– RAM naudojimas: ~30 MB
– Paleidimo laikas: <1 sekundė Skirtumas akivaizdus. Žinoma, tai labai paprasta aplikacija, bet proporcijos išlieka ir sudėtingesnėms aplikacijoms. Mano darbo projektas, kuris Electron'e užėmė apie 200 MB, Tauri versijoje tilpo į 8 MB. Bet čia svarbu suprasti niuansus. Tauri naudoja sistemoje esančią webview biblioteką. Windows'uose tai WebView2 (Chromium bazėje), macOS'e WKWebView (WebKit), Linux'e webkit2gtk. Tai reiškia, kad: 1. Jūsų aplikacija gali atrodyti šiek tiek skirtingai skirtingose platformose 2. Turite testuoti visose platformose, kurias palaikote 3. Kai kurios naujausios web funkcijos gali neveikti senesnėse sistemose Praktikoje šios problemos nėra tokios didelės, kaip gali atrodyti. Moderniose sistemose webview'ai yra pakankamai vienodi, o jei naudojate populiarius frontend framework'us ir build tools, dauguma suderinamumo problemų išsprendžiamos automatiškai.

Developer experience ir tooling

Vienas dalykas, kurį Electron daro gerai – tai developer experience. Hot reload, Chrome DevTools, paprasta setup’o procedūra – visa tai veikia iš dėžės. Kaip su tuo Tauri?

Geros naujienos – Tauri 2.0 čia labai pasistūmėjo į priekį. CLI įrankis yra puikus:

„`bash
npm create tauri-app
„`

Ši komanda paleidžia interaktyvų wizard’ą, kuris leidžia pasirinkti frontend framework’ą (React, Vue, Svelte, Solid, arba vanilla JS), package manager’į ir kitas opcijas. Po poros minučių turite fully functional projektą.

Hot reload veikia puikiai. Keičiate frontend kodą – matote pakeitimus iš karto. Keičiate Rust kodą – aplikacija automatiškai perkompiliuojama. Tiesa, Rust kompiliacija užtrunka ilgiau nei JavaScript, bet debug build’ai yra pakankamai greiti kasdieniniam darbui.

DevTools? Taip, galite naudoti įprastus browser DevTools. Tiesiog dešiniuoju pelės mygtuku spustelėkite aplikacijoje ir pasirinkite „Inspect Element”. Veikia viskas, ką įpratę naudoti – console, network tab, elements inspector.

Viena problema, su kuria susidūriau – debug’inimas Rust kodo. Tai nėra taip patogu kaip JavaScript. Galite naudoti println! macro arba proper debugger’į kaip lldb ar gdb, bet tai tikrai ne taip smooth kaip įprasta web development. Tačiau Tauri komanda dirba prie geresnių debugging įrankių, tad situacija gerėja.

Kada verta rinktis Tauri, o kada ne

Tauri nėra silver bullet. Yra situacijų, kai jis puikiai tinka, ir situacijų, kai geriau rinktis ką nors kita.

Tauri puikiai tinka, kai:

– Kuriate naują aplikaciją nuo nulio ir galite sau leisti išmokti Rust pagrindus
– Aplikacijos dydis ir našumas yra svarbūs (pavyzdžiui, planuojate platinti per internetą)
– Norite palaikyti ir desktop, ir mobile platformas su tuo pačiu kodu
– Saugumas yra prioritetas
– Jūsų aplikacija naudoja daug native funkcionalumo (failų sistema, system tray, etc.)

Geriau rinktis ką nors kita, kai:

– Turite esamą Electron aplikaciją ir migracija būtų per brangi
– Jūsų komandoje niekas nenori mokytis Rust
– Reikia labai specifinio Chromium funkcionalumo, kurio nėra standartinėse webview bibliotekose
– Kuriate aplikaciją, kuri turi veikti labai senose sistemose
– Deadline’ai yra labai griežti ir neturite laiko eksperimentuoti

Asmeniškai manau, kad 2024-aisiais bet kokiam naujam desktop projektui verta rimtai apsvarstyti Tauri. Taip, yra learning curve, bet privalumai tikrai to verti.

Praktiniai patarimai pradedantiems

Jei nusprendėte pabandyti Tauri, štai keletas patarimų, kurie man būtų pravertę pradžioje:

1. Pradėkite nuo dokumentacijos

Tauri dokumentacija yra tikrai gera. Nepralenkite jos ir nešokite tiesiai į kodą. Perskaitykite bent jau „Getting Started” ir „Core Concepts” sekcijas. Tai sutaupys jums daug laiko vėliau.

2. Naudokite TypeScript

Tauri API yra pilnai typed, ir TypeScript padės išvengti daugelio klaidų. Ypač kai dirbate su IPC – TypeScript užtikrins, kad perduodate teisingus parametrus į Rust funkcijas.

3. Mokykitės Rust palaipsniui

Nereikia tapti Rust ekspertu prieš pradedant. Pradėkite nuo paprastų komandų, o kai reikės sudėtingesnio funkcionalumo – ieškokite Rust crates, kurios tai jau daro. Rust ekosistema yra labai turtinga.

4. Naudokite Tauri plugin’us

Prieš rašydami savo native funkcionalumą, patikrinkite, ar nėra oficialaus plugin’o. Yra plugin’ai failų sistemai, SQL duomenų bazėms, notification’ams, clipboard’ui ir daugeliui kitų dalykų.

5. Testuokite visose platformose anksti

Nelaukite, kol užbaigsite aplikaciją. Testuokite skirtingose OS anksti ir dažnai. Webview skirtumai gali būti subtilūs, bet kartais labai svarbūs.

6. Sekite Tauri Discord ir GitHub

Bendruomenė yra labai aktyvi ir draugiška. Jei užstrigsite – greičiausiai kas nors jau susidūrė su ta pačia problema. Discord serveris yra puiki vieta gauti greitą pagalbą.

Ateitis atrodo šviesiai

Tauri 2.0 yra brandus, production-ready framework’as. Jau dabar yra nemažai aplikacijų, kurios jį naudoja – nuo mažų indie projektų iki didesnių komercinių aplikacijų. Ir tai tik pradžia.

Kas man labiausiai patinka Tauri – tai ne tik technologija, bet ir filosofija. Komanda tikrai rūpinasi saugumu, našumu ir developer experience. Jie nekopijuoja Electron, o kuria kažką naujo ir geresnio.

Ar Tauri pakeis Electron? Greičiausiai ne visiškai. Electron turi milžinišką ekosistemą ir daug esamų aplikacijų. Bet naujiem projektam? Tauri tikrai yra rimtas kandidatas. Ypač jei jums svarbu, kad aplikacija būtų greita, maža ir saugi.

Jei dar neišbandėte Tauri 2.0 – rekomenduoju skirti savaitgalį ir sukurti bent paprastą projektą. Gali būti, kad tai pakeis jūsų požiūrį į desktop aplikacijų kūrimą. Man tikrai pakeitė.

Daugiau

Python Typer: CLI aplikacijos