Executando verificação de segurança...
5

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!

Carregando publicação patrocinada...
5

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.

1

Cara, isso faz total sentido biológico!

E é um baita balde de água fria em... rsrs

Me poupará um bom tempo em um eventual caso onde eu esteja considerando em usar o Tauri em um projeto sério! Obrigado!

Mano, sem querer abusar, vc parece ter um entendimento valioso sobre o assunto, me deixa entender um pouco melhor como vc enxerga isso:

Se fosse fazer um app hoje que precisa rodar 100% bem em Windows, Mac e Linux... ainda escolheria Tauri? Ou iria pra outro stack? Hoje descobrir o Wails tambem, tu conhece? Ve como opção melhor que o Tauri?

3

Uma coisa importante: O Tauri não é um concorrente ou substituto do Electron.

As principais soluções que se usa h oje 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 homologado, 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.

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 tranmbolhã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.

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, quase sempre 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).

3

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.

2

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).

2

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.

1

Caramba, mano...

É muito difícil acompanhar esse mundo... acabei de conhecer o Tauri e já surgiu outra opção kkkk

Vou fazer a mesma coisa aqui, vou deixar esse Wails anotado para uma eventual nova oportunidade!

Poderia me explicar por alto qual tipo de projeto combina mais com Go?

E por que o Rust não seria uma boa opção?

6

Para te dar uma boa resposta, primeiro preciso descrever mais ou menos o que fazemos.

No nosso caso aqui, trabalhamos com integrações e rotinas customizadas para estender funcionalidades de ERPs.

Por exemplo, sua empresa tem um ERP da TOTVS, faz quase tudo, mas tem um processo/operação/integração que o ERP não faz e não é de interesse da TOTVS implementar no produto. É aí que a gente atua, criando uma rotina/programa para cobrir essa operação.

O que desenvolvemos não são produtos nossos, fazemos software sob medida. O código-fonte fica com o cliente, assim como a responsabilidade de mantê-lo no ar, e se ele quiser pode contar com o time interno dele para ampliar e dar manutenção no projeto.

Na maior parte dos cenários, é necessário que sejam aplicações desktop, por alguns motivos:

  • Esses clientes não tem expertise para manter ambientes web, seja on-premise ou cloud;
  • Esses grandes ERPs são muitas vezes desktop e colocar um processo web no meio do caminho pode dificultar para os usuários.
  • Existem restrições de acesso a rede externa por conta de várias políticas.
  • É necessário interagir com o hardware como balanças e impressoras.

No passado usamos muito Delphi para fazer isso, ainda usamos para alguns casos em que ele encaixa bem (muito por conta do projeto ACBr). Também usamos C# para projetos recentes.


O problema é que por mais que tenhamos projetos desktop no cenário que comentei, a maior parte dos projetos é web, e se pudermos usar tecnologias web para criar essas aplicações eu poderia otimizar o trabalho do nosso time aqui.

Já tentamos usar Electron aqui, mas o build, o tamanho dos artefatos e o consumo de memória nunca foram satisfatórios. Também tentamos Flutter, mas o time no geral não curtiu o Dart e a comunicação com as balanças no Flutter sempre foi um parto.

Para aplicações web a gente já usou PHP no passado, mas passamos a usar Node de alguns anos para cá. O Node tem atendido bem, mas dependendo do cenário o deploy não é tão simples por conta da estrutura do cliente. Foi por conta disso que comecei a estudar Go, que dentre várias vantagens ele gera um único executável, isso torna o deploy muito simples, além de podermos embutir as dependências como bibliotecas externas (dlls por exemplo), assets e etc dentro do próprio executável com embed.FS.

E se Go pode ser uma alternativa para nós para aplicações web, com o Wails pode também ser uma alternativa para o desktop, mas ainda estou estudando sobre isso.


E por que o Rust não seria uma boa opção?

Montar bons times que usam Rust custa caro!

2

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??

2

Vlw mano!!!

Então, acho que no Electron uma aplicação tem 3 "camadas":

A primeira seria o "frontend", onde podemos criar aplicações usando JS e seus frameworks.

A segunda seria um "backend local" daquela aplicação, onde você programa em NodeJS e onde vc pode interagir diretamente com recursos da máquina, disponibilizados pelo "core" do Electron, que seria a terceira camada.

Eu particularmente nunca precisei ir nessa terceira camada, só trabalhei nas duas primeiras.

Fazendo um paralelo com o Tauri, baseado nessa minha primeira experiência, estou entendendo que a primeira camada é igual à do Electron, foi onde usei React pra criar meu app.

Já a segunda camada é diferente... para interagir com a máquina, vc precisa programar em Rust.

E eu precisei trabalhar nessa camada pq o contador de calorias precisava ser capaz de ouvir todos os eventos do teclado e do mouse da máquina, mesmo os que acontecem fora do app, ou seja, eu precisava conversar diretamente com a máquina.

Mas assim: essa parada foi nova pra mim, posso ter entendido errado algumas coisas! kkkk

-3

Teu problema é que você fica criando post aqui no Tabnews para o mesmo assunto !

Você já tem outro aqui que acabei de ver é que é do mesmo app !!

1

Cara, fiz isso mesmo...

Mas eu gostaria de lhe convidar a olhar por outro ângulo.

Na minha primeira postagem, eu apenas compartilhei as informações sobre a ideia do projeto em si... suas motivações e o resultado.

Uma experiência diferente de criar algo "engraçado" e sem propósito... sem nem falar sobre os recursos técnicos envolvidos.

No entanto, esse trabalho também me rendeu novas experiências técnicas, então achei que valia outra postagem falando apenas da tecnologia. Por isso eu escrevi este post aqui.

Me parece que o Tauri ainda não é amplamente conhecido, e pensei que essa nova postagem poderia entregar valor para as pessoas que não conhecem.

Do meu ponto de vista, são duas experiências independentes que tive trabalhando em um único projeto, o que justificaria duas postagens que entregam valores diferentes.

Longe de mim querer criar "spam", até pq gosto deste ambiente e quero contribuir para que ele continue gerando valor.

🫶