Apresentando o Crom OmniFiles: um file manager moderno, client-side, que unifica seus arquivos locais e na nuvem numa interface única. Sem backend. Sem delay.

Você já parou para contar quantos cliques leva para mover um arquivo do seu computador para o Google Drive? Você abre o Explorer, abre o Chrome, navega até o Drive, espera carregar, arrasta, espera o upload...
Os gestores de arquivos web atuais caem em dois extremos: ou são demos simples demais que mal listam arquivos, ou são "monstros enterprise" com backends pesados, filas de processamento e uma complexidade desnecessária para o usuário final.
Eu queria o "caminho do meio": rápido como o Explorer nativo, mas acessível via URL. Algo que me desse soberania sobre meus dados.
Então eu construí o Crom OmniFiles.
O que é o OmniFiles?
É um "meta-gerenciador" de arquivos que roda 100% no cliente (client-side). Não há um servidor intermediário lendo seus dados. O navegador conecta diretamente à fonte:
- 📁 Sistema de Arquivos Local: Acessa pastas do seu PC diretamente via File System Access API.
- ☁️ Google Drive: Integração nativa via OAuth 2.0. Você vê seus arquivos da nuvem como se fossem locais.
- 💾 IndexedDB (Offline): Armazenamento persistente no navegador para uso sem conta, powered by Dexie.js.
- 🪣 AWS S3: Suporte a buckets S3 (arquitetura já implementada via
S3Provider).
Tudo numa interface unificada. Mover um arquivo da nuvem para o PC é tão simples quanto arrastar um ícone.
🔗 Teste agora (Sem login obrigatório)
- Demo Principal — omnifiles.crom.run
- Demo Alternativa — pasta.crom.run
- Código Fonte no GitHub - https://github.com/MrJc01/crom-omnifiles
Por baixo do capô: Decisões de Arquitetura
Para desenvolvedores, o "como" é mais interessante que o "o quê". Aqui está o motor do OmniFiles.
1. Velocidade não é feature, é requisito (React + Vite)
Escolhi React pela maturidade do ecossistema, mas o segredo da performance é o Vite. O Hot Module Replacement (HMR) é instantâneo e o bundle de produção é extremamente otimizado.
Para renderizar milhares de arquivos sem travar a thread principal, implementei virtualização usando react-window. O DOM só existe para o que seus olhos estão vendo.
2. Adeus Redux, olá Custom Hooks
Esta foi uma decisão filosófica: Zero gerenciadores de estado externos complexos. Nada de Redux, Zustand ou Jotai. O estado é gerido por uma coleção de Hooks desacoplados, facilitando a manutenção e os testes:
useFileSystem.js: O "cérebro" que gerencia CRUD e navegação.useGoogleAuth.js: Gerencia o ciclo de vida do token OAuth.useSelection.js&useDragDrop.js: Lógica complexa de interação visual isolada da lógica de dados.
3. O Padrão "Provider": A alma do projeto
O OmniFiles usa um Design Pattern de Strategy robusto. O núcleo da aplicação não sabe se está falando com o Google Drive ou com o HD do seu PC. Ele fala com uma Interface Abstrata.
Todo provedor (LocalFileSystemProvider, GoogleDriveProvider, S3Provider) implementa o mesmo contrato definido em FileSystemProvider.js:
// O contrato que todo serviço deve assinar
class FileSystemProvider {
async listFiles(folderId) { ... }
async createFolder(name, parentId) { ... }
async uploadFile(file, parentId) { ... }
async deleteFile(fileId) { ... }
// ...
}
Graças ao ProviderFactory, adicionar suporte futuro ao Dropbox ou IPFS é apenas criar uma nova classe. O resto da UI continua funcionando sem alterar uma linha de código.
UX: Detalhes que importam
Software que não dá prazer de usar, não é usado.
- Tailwind CSS: Design system consistente, modo escuro (Dark Mode) nativo e classes utilitárias para agilidade.
- Micro-interações: Uso do Framer Motion para que cada clique, cada abertura de pasta e cada modal tenha um feedback tátil e visual.
- Funcionalidades de Desktop na Web:
- Menu de Contexto (Botão Direito).
- Seleção múltipla com
ShifteCtrl+ Área de Seleção (Drag Box). - Breadcrumbs interativos para navegação rápida.
- Preview de arquivos (Imagens, Vídeos, Markdown, Código).
A Filosofia: Soberania Digital
O OmniFiles não é apenas um projeto de portfólio. Ele nasce de uma visão sobre controle. Suas ferramentas não deveriam depender de um backend proprietário que pode sair do ar ou mudar as regras.
O OmniFiles roda no seu navegador, usando as chaves de API que você configurar (se quiser rodar localmente), manipulando os seus arquivos diretamente na fonte.
Como rodar o código (Dev)
Quer ver como foi feito ou contribuir? É Open Source.
git clone https://github.com/MrJc01/crom-omnifiles.git
cd crom-omnifiles/app
npm install
# (Opcional) Crie um .env baseando-se no .env.example para o Google Auth
cp .env.example .env
npm run dev
O que vem por aí?
- 🔄 Sincronização Offline: Trabalhe no avião, sincronize quando pousar.
- 📱 Versão Desktop (Tauri): O mesmo código React, mas empacotado como app nativo.
- 📦 Novos Providers: Dropbox e WebDAV.
Se você curtiu a ideia de um gerenciador de arquivos que respeita seu tempo e seus dados, deixa uma ⭐ no GitHub e testa a demo!
— Juan Cândido / MrJ github.com/MrJc01
Nota: Este software é "Source Available". O código é aberto para estudo e uso pessoal. Para uso comercial ou revenda, consulte a licença no repositório.
☕ Apoie o Desenvolvimento Open-Source Nacional (Não falo só de mim aqui)
A revolução da "IA Soberana" e do "Local-First" não acontece apenas no Vale do Silício ou na Europa. Aqui no Brasil, através da organização Crom, também estou focado em construir e manter projetos que devolvem o controle ao desenvolvedor (além de trazer análises aprofundadas como esta para o TabNews e comunidade).
Manter o desenvolvimento de ferramentas open-source e a produção de conteúdo técnico denso exige tempo, dedicação e, claro, muito ☕ e 🍀. Se este artigo gerou valor para você, ou se você apoia a iniciativa de construirmos tecnologia de base independente por aqui, qualquer apoio é bem-vindo.
Sim eu uso IA, não como meu amigo ou faz tudo, mas como ferramenta, e recomendo o mesmo a você.
Estou idealizando ainda um módulo dedicado de donations na plataforma da Crom, mas enquanto ele não entra no ar, estou aceitando apoios via PIX para manter a infraestrutura rodando:
Chave PIX:
mrj.crom@gmail.com
⚠️ Importante: Se você realizar um apoio, por favor, envie o comprovante (pode ser apenas com seu user do GitHub ou TabNews no assunto/corpo) para o e-mail: mrj.crom@gmail.com.
O Futuro: Assim que eu lançar a implementação oficial de donate/invest da Crom, farei questão de migrar manualmente esses apoios, transformando-os em créditos, badges de early supporter ou garantindo os devidos agradecimentos na plataforma.
Muito obrigado por ler até aqui e pela força! 🗿🍷