npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

vault-rs

v0.1.0

Published

A secure CLI tool for managing encrypted secrets locally - a safe alternative to plain .env files

Readme

🔐 vault-rs

Rust License CI Crates.io Downloads

Uma ferramenta CLI moderna e segura em Rust para gerenciar segredos (chaves de API, senhas, tokens) de forma criptografada no disco local. Uma alternativa segura e robusta aos arquivos .env em texto puro.

✨ Características

  • 🔐 Criptografia de nível empresarial: ChaCha20Poly1305 (AEAD) com nonces aleatórios
  • 🔑 Derivação de chave segura: Argon2id com parâmetros otimizados para segurança
  • 🧹 Limpeza automática de memória: Dados sensíveis são zeroizados automaticamente
  • 🚀 Injeção transparente de variáveis: Execute comandos com segredos sem expô-los
  • 📦 Instalação global: Use vault de qualquer diretório após instalação
  • 🔍 Busca inteligente: Encontra vaults automaticamente em diretórios pais
  • 🛡️ Zero trust: Senha mestra solicitada a cada operação sensível

🚀 Instalação Rápida

Via NPM (Mais Fácil - Não Requer Rust)

npm install -g vault-rs

Via Cargo

cargo install vault-rs

Do Código Fonte

git clone https://github.com/lucasfiduniv/vault-rs.git
cd vault-rs
cargo install --path .

Requisitos

Para instalação via NPM:

  • Node.js 14+ (apenas para instalação, o binário é nativo)

Para instalação via Cargo:

  • Rust 1.70+ (edition 2021)
  • Windows: Visual Studio Build Tools ou MinGW-w64
  • Linux/Mac: GCC ou Clang

📖 Uso

Inicializar um Vault

vault init

Cria dois arquivos no diretório atual:

  • .vault - Arquivo criptografado com os segredos
  • .vault.salt - Salt para derivação de chave (não sensível sozinho)

Gerenciar Segredos

# Adicionar ou atualizar
vault set DATABASE_URL "postgresql://user:pass@localhost/db"
vault set API_KEY "sk-1234567890abcdef"
vault set JWT_SECRET "my-secret-token"

# Recuperar
vault get DATABASE_URL

# Listar todas as chaves
vault list

# Remover
vault remove DATABASE_URL

Executar Comandos com Segredos

# Injetar segredos como variáveis de ambiente
vault run -- npm start
vault run -- python app.py
vault run -- cargo build --release
vault run -- docker-compose up

Carregar Variáveis no Shell

Opção 1: Comando Simplificado (Recomendado)

vault load

Opção 2: Exportar Manualmente

PowerShell:

vault export | Invoke-Expression

Bash/Zsh:

eval $(vault export)

Depois disso, execute seus comandos normalmente:

npm start
python app.py
cargo build

Abrir Shell com Variáveis Carregadas

# Abre novo shell com variáveis já disponíveis
vault shell

# Especificar shell
vault shell bash  # Linux/Mac

📚 Exemplo Completo

# 1. Instalar
cargo install vault-rs

# 2. Inicializar vault no projeto
cd meu-projeto
vault init

# 3. Adicionar segredos
vault set DATABASE_URL "postgresql://localhost/mydb"
vault set REDIS_URL "redis://localhost:6379"
vault set JWT_SECRET "super-secret-key-123"
vault set STRIPE_API_KEY "sk_live_..."

# 4. Verificar segredos
vault list

# 5. Executar aplicação
vault run -- npm start

# Ou carregar no shell atual
vault load
npm start

🔒 Segurança

Criptografia

  • Algoritmo: ChaCha20Poly1305 (AEAD)
  • Nonces: Aleatórios para cada operação de criptografia
  • Tamanho da chave: 256 bits (32 bytes)

Derivação de Chave

  • Algoritmo: Argon2id (recomendado pelo OWASP)
  • Iterações: 15.000
  • Threads: 2
  • Paralelismo: 1
  • Tamanho do salt: 256 bits (32 bytes)

Gerenciamento de Memória

  • Dados sensíveis são limpos da memória usando zeroize imediatamente após uso
  • Senhas mestras nunca persistem em texto puro
  • Segredos descriptografados são zeroizados quando o processo filho termina

Boas Práticas Implementadas

  • ✅ Salt único por vault
  • ✅ Nonces aleatórios para cada criptografia
  • ✅ Limpeza automática de memória
  • ✅ Senha solicitada a cada operação sensível
  • ✅ Nenhum dado sensível em logs ou arquivos temporários

🏗️ Arquitetura

vault-rs/
├── src/
│   ├── main.rs      # CLI e lógica principal
│   ├── crypto.rs    # Criptografia e derivação de chave
│   └── vault.rs     # Estruturas de dados do vault
├── Cargo.toml       # Dependências e metadados
└── README.md        # Esta documentação

📦 Dependências Principais

| Crate | Versão | Propósito | |-------|--------|-----------| | clap | 4.4 | Interface de linha de comando | | chacha20poly1305 | 0.10 | Criptografia simétrica | | argon2 | 0.5 | Derivação de chave | | serde / serde_json | 1.0 | Serialização | | zeroize | 1.6 | Limpeza segura de memória | | rpassword | 7.3 | Entrada de senha sem eco | | anyhow | 1.0 | Tratamento de erros |

🛠️ Comandos Disponíveis

| Comando | Descrição | |---------|-----------| | vault init | Inicializa um novo vault | | vault set <KEY> <VALUE> | Adiciona ou atualiza um segredo | | vault get <KEY> | Recupera o valor de um segredo | | vault list | Lista todas as chaves armazenadas | | vault remove <KEY> | Remove um segredo | | vault run -- <COMMAND> | Executa comando com segredos injetados | | vault load | Carrega variáveis no shell atual | | vault export | Mostra comandos para exportar variáveis | | vault shell | Abre novo shell com variáveis carregadas |

⚠️ Avisos Importantes

  1. Nunca commite arquivos do vault: Adicione .vault e .vault.salt ao .gitignore
  2. Backup da senha mestra: Se você perder a senha mestra, os dados serão irrecuperáveis
  3. Permissões de arquivo: Mantenha os arquivos do vault com permissões restritas
  4. Ambiente de produção: Considere usar soluções gerenciadas para produção

🤝 Contribuindo

Contribuições são bem-vindas! Por favor:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Veja CONTRIBUTING.md para mais detalhes.

📝 Licença

Este projeto está licenciado sob os termos da licença MIT ou Apache-2.0, à sua escolha.

🙏 Agradecimentos

  • Comunidade Rust por ferramentas incríveis
  • Mantenedores das crates de criptografia utilizadas
  • Todos os contribuidores e usuários

📊 Status do Projeto

  • ✅ Criptografia robusta implementada
  • ✅ CLI completa e funcional
  • ✅ Gerenciamento seguro de memória
  • ✅ Documentação completa
  • 🔄 Em desenvolvimento ativo

🔮 Roadmap

  • [ ] Suporte para múltiplos vaults
  • [ ] Backup e restore de vaults
  • [ ] Migração de senha mestra
  • [ ] Autocomplete para shells
  • [ ] Integração com IDEs
  • [ ] Validação de formatos de segredos
  • [ ] Histórico de alterações
  • [ ] Expiração de segredos

📚 Documentação Adicional

📧 Contato e Suporte

🤝 Contribuindo

Contribuições são muito bem-vindas! Veja nosso Guia de Contribuição para começar.

📄 Licença

Este projeto está licenciado sob os termos da licença MIT ou Apache-2.0, à sua escolha.

Veja LICENSE para mais detalhes.


⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!

Feito com ❤️ em Rust