Explorando o Tauri, depois de passar por Electron e Flutter! 💆🏻♂️
Eu já trabalhei em alguns projetos usando Electron pra criar apps de desktop.
Na maioria das vezes, usei junto com Angular e SQLite, mas teve um caso em que fui só de HTML, JS vanilla e localStorage...
Nesse contexto, acho que o projeto mais marcante em que me envolvi foi a criação de uma nova versão do antigo app desktop do GRAN, dada a grande quantidade de usuários, que eu já nem lembro quantos eram.
Na época, fiquei responsável por montar a arquitetura inicial da aplicação e apelidei o projeto carinhosamente de "app-desktop-remix", pra manter uma "conexão" semântica com a primeira versão, que era o "app-desktop".
Sempre curti essa ideia de ter apps pra Windows, Linux e MacOS com um único código. Era tão encantador que eu fazia vista grossa para uma chatices do Electron: o tamanho ENORME do build final. 😱
No caso do app do GRAN, se não me falha a memória, o executável final ficava na casa dos 200MB... meio frustrante, considerando que o build do Angular sozinho era bem mais enxuto, com uns poucos MB. 💆🏻♂️
Mais pra frente, dei uma brincada com Flutter Desktop e fiquei impressionado com o tamanho do build final: também só alguns MB! Juntando isso com a possibilidade de compilar pra mobile (Android e iOS), comecei a olhar pro Flutter com mais carinho... mas, no fim, nunca usei ele num projeto real de desktop. ☹️
Fiquei ali... só esperando a chance. 🕒
Recentemente, navegando por aí, vi alguém comentando sobre um tal de Tauri e fiquei curioso. Descobri que era tipo um Electron da nova geração... e segui minha vida.
De repente... pah!
Pintou a oportunidade de criar um app desktop: uma calculadora de calorias pra pessoas sedentárias! 🤣🤣
Um projetinho/brincadeira que resolvi tocar, embalado pela vibe de um hackathon de software inútil que descobri. 🤣
Como o lance era se "divertir", pensei: por que não testar algo novo? E lá fui eu mergulhar no tal do Tauri, tentando entender como esse troço funcionava enquanto colocava a ideia no ar... rsrs
E deu certo?! 🚀🚀🚀
Criei uma aplicação pra Windows usando Tauri e React, com um build final de apenas 3,1MB 🤯
E ainda com a possibilidade de rodar em Linux, MacOS, Android, iOS e etc... se vacilar, roda até em microondas!
Ainda não testei nada disso de portabilidade, então não sei o que me espera... mas tô animado com as possibilidades!
Como nem tudo são flores, alguma coisa tinha que dificultar minha vida. Nesse caso, foi o fato do "backend" precisar ser escrito em Rust (oi???) 🤨
Então agora ganhei um dilema novo pra vida (parabéns aos envolvidos!!!):
Na próxima vez que for fazer um app desktop, vai bater a dúvida: **Rust ou Dart?**💆🏻♂️
E eu não sou especialista em nenhum dos dois kkkk
Por hora, fiquei feliz com o resultado...
Me diz aí:
🔹 Já ouviu falar em Tauri? 🔹 Já testou a portabilidade dele?? 🔹 Devo esperar dores de cabeça???
Se quiser dar uma olhada no app que fiz com Tauri: ➡️ https://fitless.nerdlex.com/
Se quiser entender que história é essa de hackathon de software inútil: ➡️ https://www.tabnews.com.br/alexolidev/criei-um-meme-saas-so-por-diversao
Flw, vlw, bj... tchau!
Uma coisa importante: O Tauri não é um concorrente direto ou substituto do Electron.
As principais soluções que se usamos hoje em dia são:
- Nativo (as pessoas estão correndo dele no desktop, mas não no mobile, vai entender...) que dá a melhor experiência do usuário. E a "conversa" de que tem que fazer vários porque tem plataformas diferentes, não é um problema de fato porque tem soluções que abstrai todas as plataformas, mesmo que não fique muito bom, mas ainda pode ficar melhor que web. E mesmo que dê um pouco mais de trabalho. Web também para rodar em todos os navegadores, pode dar até mais.
- Browser - o usuário acessa no navegador dele e faz o que precisa com limitações. O funcionamento correto dependerá do navegador e a versão dele. Quando o usuário acessa seu site/app web de um navegador não (bem) homologado para ela, tudo pode acontecer, até mesmo nada.
- Webview - é parecido porque usa o renderizador do navegador padrão do sistema operacional ou outro em alguns casos. Se mudar a versão, sua aplicação pode quebrar também, e tem que "garantir" que vai rodar em todos os sistemas operacionais. Ele permite mais liberdade porque a aplicação pode ser considerada nativa, exceto a parte da UI.
- Renderização própria - aqui você usa uma parte de um browser como parte da sua aplicação e pode considerar a aplicação como nativa em muitos casos, exceto a UI. Você não precisa se preocupar em fazer funcionar em diversos navegadores e quando atualizar a versão dele, você pode homologar para essa versão e só atualizar o browser que sustenta a UI da sua aplicação quando você estiver seguro que não vai dar problema. É pesado em todos os sentidos.
Os dois últimos é o caso do Tauri e Electron respectivamente, portanto eles são soluções bem diferentes.
Usar o Tauri é bem válido porque pode atender uma demanda do projeto e ele traz muita coisa pronta que você não precisa se preocupar quando usa uma webview de forma direta. Mas saiba das dificuldades que ele traz.
O Electron elimina algumas dessas dificuldades, mas é um trambolhão que tem que mandar com sua aplicação.
Se considerarmos que rodar direto em um navegador padrão não atende necessidades de aplicações e tem uma outra pegada, sobra a opção do nativo que se a pessoa estudar o assunto verá que atende bem sem alguns os problemas de soluções baseadas em web, e sem ter novos problemas, quando se usa a ferramenta certa do jeito certo.
Vou reforçar: para quem sabe fazer, o nativo é muito mais fácil de lidar, de instalar (nem precisa) e dar manutenção, além de ter garantias que uma atualização de versão do engine não vai quebrar sua aplicação, se comparado com o ELectron e afins.
O mesmo pode ser dito para o Tauri e afins, embora aqui pode ser que não seja tão problemático, tem soluções que colocam pelo menos no mesmo patamar de dificuldade e resultado.
A solução em browser padrão tem uma ligeira vantagem, quase irrisória e tem diversas desvantagens, quando se compara com nativo, é bem melhor que o Electron e com Tauri depende. Claro que para sites ele passa ter uma vantagem enorme. Muitas vezes a pessoa só quer um site para ver ou consultar algo simples ou interagir de forma rápida e pontual.
O grande motivo para fazer uma aplicação com Tauri, Electron e outros produtos dessas duas vertentes é que quem vai programar só sabe ou só compensa fazer com HTML/CSS e mais uma linguagem de programação, grande parte das vezes será JS e eventualmente outra para o backend da aplicação (não estou falando do servidor).
Ainda estou fazendo uma simplificação, apesar de dar informações que olha para o todo.
S2
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).
Sobre a compatibilidade com outros sistemas, vale ressaltar que como o tauri depende do sistema de render web do OS do usuário você pode acabar tendo algumas surpresas, já que o seu aplicativo vai ser renderizado no Windows pelo blink (motor gráfico do Chrome, mas que o Edge usa tmb e por isso é usado nativamente no windows), porém no MacOS vai ser usado o webkit (do safari, navegador da Apple), já em desktops Linux é cada um por si.
Por exemplo, no meu desktop linux mesmo eu baixando diversas bibliotecas recomendadas pelos devs do tauri, ainda, sim, aplicativos feitos usando tauri praticamente não conseguem interagir corretamente com o sistema, por exemplo, se um aplicativo tenta abrir um link no navegador padrão (para autenticação, por exemplo), nada acontece, assim como o aplicativo não identifica se o sistema é tema claro ou escuro.
Já em dispositivos da Apple (que utilizam obrigatoriamente o WebKit), embora o seu aplicativo consiga interagir melhor, você pode ter problemas de layout já que o css da página da sua aplicação é interpretado diferente. (se você já tiver costume de desenvolver websites compatíveis com os principais motores, não é tão grande o problema, mais ainda sim é meio chato saber que uma certa feature css não pode ser usado porque em computadores Apple mais antigos o safari não renderiza direito).
Então esse peso menor do tauri é uma faca de dois gumes, onde você perde a confiança de que o aplicativo vai rodar bem em todas as plataformas, mas ganha um binário mais leve para ser distribuído.
O que não gosto do Rust é toda primeira "sincronização", digamos assim, que ele tem que fazer. É rápido após esse processo. No entanto estou acostumado com velocidade que se propaga de um React por exemplo. Ele é unico que conheço que vale a pena construir desktop usando Tauri. Electron, é justamente criticado por isso, pois o build dele é praticamente um browser instalado e 2x maior que o próprio Chrome! Usuário final pode não entender isso ou não se importar, mas para quem é Dev, cada espaço é valioso ocupado.
Decidi testar o Tauri faz dois dias, por causa da documentação acabei caindo no framework Leptos que é o NextJS do universo Rust, comecei um novo projeto e acho que vou postar sobre nos próximos dias, Leptos é um framework que cria SPA (igual o React) só que sem usar JS, usamos Rust para gerar código Webassembler que conversa diretamente com o navegador, ele não utiliza virtual DOM e consegue rerenderizar o InnerHTML da tag sem tocar na tag de fato.
Minha idéia é criar um app de finanças para substituir minha planilha perfeita que uso à quase 3 anos (mas que é muito manual).
Muito legal seu post! Quanto mais conteúdo sobre tauri, melhor!
Mas sobre a parte de rust, o quanto ele é necessário?? Porque no caso do electron, eu acho que o backend é c++, mas a menos que você esteja sendo muito hacker, não deve precisar usar muito. É uma falta de APIs em JS na parte do tauri??
Já explorei o Tauri também mas nunca cheguei a fazer nada com ele, no momento estou estudando o Wails que tem a mesma ideia mas com base em Go. Para os projetos que queremos lançar aqui na empresa, pode ser que o Wails faça mais sentido.
aplicacao desktop com javascript
Se quiser dar uma olhada no app que fiz