Projetos Práticos em Rust para Portfólio e Vagas
Aprender Rust só lendo sobre ownership, borrowing e lifetimes é lento. O salto acontece quando você constrói projetos pequenos o suficiente para terminar, mas realistas o bastante para mostrar como você pensa. Para quem busca vagas Rust, um portfólio com três ou quatro projetos bem documentados costuma valer mais do que uma lista longa de crates que nunca saíram do cargo new.
Este guia organiza ideias de projetos por nível e por sinal de carreira. A meta não é impressionar com complexidade artificial. A meta é provar que você sabe transformar Rust em software operável: código limpo, testes, README, tratamento de erro, CI, releases e decisões técnicas explicadas.
Se você ainda está começando, leia também o plano de estudos júnior e o guia de primeiro emprego em Rust. Se já tem alguns repositórios, use este roteiro junto com o guia de portfólio no GitHub.
O que faz um projeto Rust ser bom para portfólio
Um projeto de portfólio não precisa ser grande. Ele precisa ser avaliável. Um recrutador técnico deve conseguir abrir o repositório e entender rapidamente:
- Qual problema o projeto resolve.
- Como rodar localmente sem adivinhar comandos.
- Como os erros são tratados sem
unwrap()espalhado em caminho crítico. - Quais testes existem e o que eles cobrem.
- Quais trade-offs você escolheu e por quê.
- Como o projeto seria operado em um cenário real.
Em Rust, isso é ainda mais importante porque muita gente aprende a sintaxe, mas pouca gente mostra maturidade de produção. Um projeto simples com Result, logs, testes, documentação e release vale mais do que uma arquitetura enorme sem acabamento.
Projeto 1: CLI de produtividade com Clap
Nível: júnior a pleno
Sinal de carreira: fundamentos, I/O, ergonomia, tratamento de erros
Tempo realista: 1 a 2 semanas
Crie uma ferramenta de linha de comando que resolve um problema cotidiano. Exemplos:
- organizador de downloads por extensão e data;
- buscador de texto com filtros simples, inspirado em
grep; - conversor de CSV para JSON, Markdown ou SQLite;
- auditor de links em arquivos Markdown;
- resumidor de logs por nível, serviço e janela de tempo.
Use Clap para argumentos, thiserror ou anyhow para erros, serde quando houver formatos estruturados e testes de integração com arquivos de exemplo.
O README deve mostrar:
cargo install --path .
minha-cli --input exemplos/dados.csv --format json
cargo test
cargo clippy -- -D warnings
O diferencial é tratar casos ruins: arquivo ausente, formato inválido, permissão negada, diretório vazio e argumento contraditório. Isso mostra maturidade muito rápido.
Projeto 2: API Axum com PostgreSQL e SQLx
Nível: júnior avançado a pleno
Sinal de carreira: backend, async Rust, banco, deploy
Tempo realista: 2 a 4 semanas
Construa uma API pequena, mas completa. Não precisa ser uma rede social. Escolha um domínio simples:
- catálogo de livros técnicos;
- tracker de hábitos para estudos;
- API de vagas favoritas;
- controle de inventário pessoal;
- agenda de eventos de comunidade.
O importante é cobrir o ciclo de backend real:
- rotas HTTP com Axum;
- modelos com Serde;
- persistência com PostgreSQL e SQLx;
- migrations versionadas;
- configuração por variáveis de ambiente;
- health check;
- logs com
tracing; - testes de handlers ou camada de serviço;
- Docker Compose para rodar API e banco.
Conecte o projeto aos guias do próprio site: deploy Axum com Docker Compose e PostgreSQL, serviços resilientes com Tower e Axum e OpenTelemetry em produção. Para carreira em web backend, esse é um dos sinais mais fortes.
Projeto 3: Worker assíncrono com filas e retries
Nível: pleno
Sinal de carreira: sistemas distribuídos, confiabilidade, operação
Tempo realista: 2 a 4 semanas
Muita vaga Rust não é para criar páginas web. É para construir peças de infraestrutura: workers, consumidores de fila, processadores de eventos, indexadores e ferramentas internas. Um worker bem feito comunica isso melhor que um CRUD genérico.
Ideias:
- consumidor que lê eventos de uma fila e grava em PostgreSQL;
- indexador de feeds RSS com deduplicação;
- processador de imagens ou arquivos com fila de tarefas;
- coletor de métricas que agrega dados por janela de tempo.
Inclua timeout, retry com backoff, dead letter simples, logs estruturados e métricas básicas. Se usar broker real, comece com NATS ou RabbitMQ via Docker Compose. Se quiser simplificar, implemente uma fila em banco e explique a limitação.
Esse projeto conversa com Rust para mensageria com Kafka, RabbitMQ e NATS e com nichos de DevOps e infraestrutura.
Projeto 4: WebAssembly com Rust e TypeScript
Nível: pleno
Sinal de carreira: interoperabilidade, performance, produto
Tempo realista: 2 a 3 semanas
WebAssembly é uma das portas de entrada mais claras para Rust em produto. Escolha uma tarefa em que performance ou segurança de tipos faça sentido:
- parser de Markdown simplificado;
- validador de CPF/CNPJ em lote;
- compressão ou transformação de imagem;
- simulação visual pequena;
- motor de regras para formulário complexo.
Compile com wasm-pack, exponha uma API pequena para TypeScript e crie uma página demonstrando o uso. O projeto fica mais forte quando inclui benchmark simples comparando a versão Rust/WASM com uma implementação JavaScript ingênua.
Evite prometer que Rust sempre será mais rápido. Explique custo de serialização, tamanho do bundle e quando WASM vale a pena. Essa honestidade técnica ajuda em entrevistas.
Projeto 5: Crate pequena publicada ou pronta para publicar
Nível: pleno a sênior
Sinal de carreira: design de API, documentação, manutenção
Tempo realista: 2 a 6 semanas
Uma crate pequena e bem cuidada demonstra uma habilidade diferente: pensar em usuários. Pode ser:
- parser de um formato simples;
- biblioteca de validação de dados brasileiros;
- wrapper tipado para uma API pública;
- utilitário para normalização de texto;
- estrutura de dados didática com documentação.
Inclua documentação com exemplos executáveis, cargo test --doc, changelog, licença, versionamento semântico e CI. Se publicar no crates.io, seja conservador: escolha um nome claro, mantenha compatibilidade e responda issues. Se não publicar, escreva no README o que faltaria para publicar.
Para avançar, conecte com CI/CD para projetos Rust e boas práticas de error handling.
Projeto 6: Ferramenta de segurança para supply chain
Nível: pleno a sênior
Sinal de carreira: segurança, DevSecOps, maturidade corporativa
Tempo realista: 2 a 4 semanas
Empresas que adotam Rust em produção se preocupam com dependências, licenças, SBOM e vulnerabilidades. Um projeto nessa linha se destaca para vagas de plataforma, segurança e fintech.
Ideias:
- auditor de
Cargo.tomlque detecta dependências sem versão fixada; - wrapper que roda
cargo audit,cargo denye gera relatório Markdown; - gerador de inventário de crates por workspace;
- verificador de licenças com política configurável.
O valor está em transformar a saída em decisão: aprovado, aviso ou bloqueado. Mostre exemplo de política, saída em CI e como um time usaria isso em pull requests. Leia também o guia de supply chain com cargo-deny e SBOM.
Projeto 7: Sistema embarcado ou simulado
Nível: pleno a sênior
Sinal de carreira: baixo nível, memória, hardware, sistemas críticos
Tempo realista: variável
Se você quer seguir para sistemas embarcados ou programação de sistemas, um projeto nessa direção ajuda muito. Mesmo sem placa física, dá para começar com simulação:
- driver simples com traits para abstrair hardware;
- firmware para ESP32 ou Raspberry Pi Pico;
- parser de protocolo binário;
- ring buffer ou fila lock-free didática;
- telemetria de sensores simulados com serialização eficiente.
Documente o hardware usado, como reproduzir o ambiente e quais limitações existem. Se usar no_std, explique por que isso muda alocação, erros e dependências.
Checklist de acabamento antes de divulgar
Antes de colocar o projeto no currículo ou LinkedIn, rode este checklist:
cargo fmtaplicado;cargo clippy -- -D warningssem avisos relevantes;cargo testpassando;- README com instalação, uso, exemplos e decisões técnicas;
.env.examplequando houver configuração;- CI configurado;
- licença definida;
- issues ou roadmap pequeno para próximos passos;
- screenshots, GIF ou asciinema quando fizer sentido;
- release ou tag inicial para marcar estabilidade.
Se o projeto tem frontend, inclua link de demo. Se é CLI, inclua exemplos de entrada e saída. Se é backend, inclua OpenAPI, coleção HTTP ou comandos curl.
Como escolher o projeto certo para sua vaga-alvo
A melhor escolha depende da vaga que você quer:
| Vaga-alvo | Projeto mais forte |
|---|---|
| Backend Rust | API Axum + PostgreSQL, worker com fila |
| DevOps/Platform | CLI, auditor de supply chain, ferramenta de deploy |
| Segurança | auditor Cargo, parser seguro, ferramenta de análise |
| Embedded/IoT | driver, firmware, parser binário, simulação de sensor |
| WebAssembly | módulo WASM com demo TypeScript |
| Blockchain | indexador, parser de transações, smart contract didático |
| Júnior geral | CLI bem acabada + API simples + contribuição open source |
Não tente cobrir todos os nichos. Escolha dois ou três projetos coerentes com sua narrativa. Um perfil que diz “quero backend e plataforma” pode ter uma API Axum, uma CLI de operação e um worker. Um perfil que diz “quero segurança” pode ter auditor de dependências, parser binário e contribuições em crates relacionadas.
Como falar desses projetos em entrevista
Prepare respostas curtas para estas perguntas:
- Qual foi o bug mais difícil?
- Onde você usou ownership a seu favor?
- Que decisão você mudaria hoje?
- Como o projeto se comporta com erro externo?
- Como você testou?
- O que aconteceria com dez vezes mais tráfego ou dados?
- O que você faria antes de colocar em produção?
Responder bem importa mais do que ter usado a crate da moda. Rust recompensa clareza. Mostre que você entende invariantes, custos, limites e operação.
Próximo passo
Escolha um projeto pequeno e termine. Depois melhore o acabamento. Um repositório concluído, testado e explicado abre mais portas do que cinco ideias ambiciosas pela metade.
Se seu objetivo é emprego, conecte este guia com currículo para Rust, entrevistas técnicas e a página de vagas Rust. Se seu objetivo é crescer como autônomo, veja freelancing com Rust e transforme um desses projetos em estudo de caso.