
Gerenciador de apps Linux sob demanda: Flatpak, APT e fwupd num só app
Eu construí o Vekt, um gerenciador de apps sob demanda para Linux que unifica Flatpak, APT e firmware (fwupd) sem daemons em background. O núcleo é Tauri 2 com backend Rust e UI Preact: o frontend só chama comandos tipados, e processos longos emitem logs e progresso em tempo real. Fora do escopo: Snap, AppImage e serviços de sistema.
Contexto técnico
Modelei o Vekt como app desktop Linux sob demanda, no espírito do KDE Discover, mas sem serviços em background: Flatpak (catálogo Flathub via AppStream), APT (repositórios do sistema) e fwupd (firmware) só rodam enquanto a janela está aberta. Escolhi Tauri 2 para isolar o shell no backend Rust e deixar a UI em Preact/TypeScript com Vite, estado por módulos e roteamento próprio. O front só fala via invoke e escuta eventos de tarefa; o Rust valida argumentos, dispara flatpak, apt-get, fwupdmgr e elevação com PolicyKit, e mantém catálogos em memória com cache em disco.
Desafios de engenharia (como e por quê)
- Superfície de comando fechada: o TypeScript nunca monta shell. IDs de app, pacote APT, remote e device fwupd passam por regex e limites de tamanho antes de virarem argv; capabilities do Tauri ficam no mínimo (core e eventos).
- Fila de tarefas com stream: um
TaskManagerfaz spawn de processos longos, emitetask-logetask-progress, guarda até 500 linhas de log e cancela com flag atômica maiskilldo filho. Progresso vem do parse do stdout por tipo de tarefa. - Atualizar tudo em cadeia:
update_everythingenfileira APT (dist-upgradeviapkexecnuma chamada só), depois Flatpak e fwupd, esperando estado terminal com timeout. Se o lock do APT estiver ativo (fusernos locks do dpkg/apt), pulo o APT com tarefa marcada e sigo Flatpak e firmware. - Catálogo AppStream local: baixeo o XML do Flathub, descompacto, parseio, filtro e gravo em
~/.cache/vekt/com TTL e versão de filtro. Busca e categorias rodam no backend com score por nome, id e summary, sem varrer o front. - APT ao lado do Flatpak: inventário a partir dos
Packagesdos repos, cache próprio e busca pontuada; na Explore, pacotes APT entram depois dos apps Flatpak. Detalhes unificam metadados, permissões Flatpak, screenshots e reviews anônimas do ODRS quando háapp_idcompatível.
- Tauri
- Rust
- Preact
- TypeScript
- Flatpak
- APT
- fwupd