DBine

Gerenciador de banco de dados desktop gratuito e de código aberto para 130 engines (PostgreSQL, SQL Server, Oracle, MySQL, MongoDB, Redis, Snowflake, BigQuery e outros) que funciona como um servidor MCP local para Claude Code, Claude Desktop, Cursor, Codex, VS Code e Windsurf. Níveis de acesso por conexão (nenhum, estrutura, leitura, escrita), conexões de produção limitadas a somente leitura, toda escrita requer sua aprovação, tokens revogáveis por cliente e um log de auditoria local.

Documentação

DBine

DBine é um gerenciador de banco de dados desktop multi-mecanismo da AddLayer. Um único aplicativo funciona com bancos de dados relacionais, analíticos, de documentos, chave-valor, grafos, séries temporais e de busca. Ele roda em Windows, macOS e Linux.

Ele é construído com Tauri 2, um núcleo em Rust e uma interface Vue 3 + Element Plus. A interface é um workbench no estilo VS Code. Cada mecanismo é um crate próprio e as consultas são organizadas dentro de cada banco de dados.

O que ele faz

Explorer e conexões

  • Árvore por conexão e por banco de dados. O primeiro nó de cada banco de dados é Consultas, com as consultas salvas daquele banco. Assim, abas soltas não se acumulam. Abaixo vêm os objetos próprios do mecanismo: tabelas, views, rotinas, coleções, índices, chaves, nós…
  • Cache do Explorer. Quando uma conexão abre, bancos de dados, objetos e colunas aparecem instantaneamente com o que havia da última vez, e o servidor os atualiza (o servidor sempre vence). Ele armazena apenas nomes e estrutura. Detalhes: docs/explorer-cache.md.
  • Pastas e grupos, por exemplo, por cliente ou por ambiente. Elas podem ser aninhadas e coloridas, e os servidores são movidos entre elas por arrastar e soltar.
  • Importar conexões do DBeaver, DbGate, DataGrip / JetBrains, Azure Data Studio e SSMS, ou colando URLs de conexão. O DBine lê os arquivos dessas ferramentas, mostra o que encontrou e salva as que você escolher. Senhas vão direto para o chaveiro do sistema, sem passar pela interface. Do DBeaver e do DbGate, o túnel SSH vem junto.
  • Túneis SSH: qualquer conexão a um mecanismo de rede pode passar por um servidor SSH, até mesmo por uma cadeia de bastiões, com senha, chave privada ou o agente SSH. A impressão digital de cada servidor é verificada contra known_hosts ou confirmada na primeira vez. A senha e a frase secreta da chave nunca vão para o arquivo de estado nem para os logs. Tudo o que é aberto em uma conexão compartilha um único túnel, que se reabre sozinho se cair. Detalhes: docs/ssh-tunnels.md.
  • Menu de contexto do banco de dados:
    • nova consulta, nova tabela com um designer (e modificar uma existente), novos objetos a partir de modelos;
    • diagrama ER, gerar script, exportar ou importar o banco de dados, executar um arquivo de script;
    • comparar esquemas, migrar, clonar ou sincronizar, e Profiler;
    • criar ou excluir o banco de dados, copiar seu nome ou o do servidor;
    • criar um banco de dados com as opções avançadas de cada mecanismo (collation, arquivos, réplicas, retenção…), com o script à vista. Detalhes: docs/create-databases.md.
  • Criar e excluir esquemas, com seu proprietário e permissões no mesmo script, que é revisado antes de executá-lo. Detalhes: docs/schemas.md.
  • Conexões somente leitura: o DBine bloqueia tudo o que não for uma leitura.

Monitor e Profiler

  • Monitor do servidor, clicando com o botão direito na conexão: CPU, memória, sessões e atividade, nos mecanismos que os expõem.
  • Processos, no Monitor: a lista ao vivo de sessões e consultas em execução, com filtros, bloqueios destacados e a opção de cancelar uma consulta ou encerrar uma sessão. Detalhes: docs/processes.md.
  • Profiler, clicando com o botão direito em um banco de dados: uma aba com todas as consultas que qualquer cliente executa naquele banco, ao vivo, como o Profiler do SQL Server. Para cada uma, ele mostra o horário, a duração, o texto, o banco de dados, o usuário, o cliente, as linhas e o erro, com filtros e a opção de abri-la em uma consulta.
    • Se o mecanismo registra todas as consultas (Extended Events no SQL Server, system.profile no MongoDB, históricos de consultas ou logs), o DBine lê o que há de novo a cada segundo. Se ele mostra apenas o que está em execução no momento, ele faz amostragem a cada 100 ms, e a aba avisa que consultas mais curtas podem não aparecer.
    • Se o mecanismo precisar de algo habilitado para capturar, o DBine habilita na inicialização, mostra em amarelo e restaura na parada ou no fechamento. Em conexões somente leitura, ele não altera nada no servidor.
    • CPU, leituras e gravações de cada consulta, nos mecanismos que relatam esses números e em sua própria unidade (páginas, blocos, linhas, bytes, documentos ou chaves). Quando consultas idênticas são agrupadas, a média, o mínimo, o p95 e o máximo são mostrados, e eles também podem ser usados para filtrar.
    • Detalhes por mecanismo: docs/engine-support.md.

Editor e resultados

  • Consultas salvas. Elas se salvam enquanto você digita. Cada aba tem sua própria sessão, então SETs, tabelas temporárias e transações persistem entre execuções.
  • Abas de visualização, como no VS Code. Clicar duas vezes em uma aba mostra sua consulta ou objeto na árvore, e "Ir para o banco de dados" abre o menu daquele banco.
  • Várias janelas na mesma instância, a partir do Dock, da barra de tarefas ou do menu. Elas compartilham conexões, consultas e configurações. Detalhes: docs/windows.md.
  • Editor CodeMirror 6, com o dialeto de cada mecanismo e autocompletar de tabelas e colunas. Ele executa a seleção ou a instrução sob o cursor, e pode ser cancelado com o mecanismo nativo de cada mecanismo.
  • Execução de scripts em todos os mecanismos: o script é dividido instrução por instrução respeitando os terminadores de cada mecanismo, as mensagens do servidor chegam ao vivo e em ordem, erros vêm com seu código e linha, há transações manuais por aba onde o mecanismo as tem, e cancelar mantém a sessão. Detalhes: docs/script-execution.md.
  • Edição de células: quando uma célula é modificada, o código de atualização é gerado na linguagem do mecanismo. O DBine não o executa: ele o anexa à consulta e você decide.
  • Adicionar linhas e documentos: novas linhas são adicionadas às alterações pendentes junto com edições e exclusões, e o código de inserção sai na linguagem de cada mecanismo (SQL, comandos Redis, insertMany, Cypher…). Mecanismos de documentos adicionam um ou vários documentos a partir de um editor JSON, também em coleções vazias.
  • Grade virtualizada com vários resultados por execução, mensagens e um visualizador de células (com JSON formatado).
  • Filtros de coluna nos dados de uma tabela (valores, intervalos, nulos, texto). Eles são aplicados no servidor, com o filtro próprio de cada mecanismo.
  • Copiar resultados em 10 formatos: com ou sem cabeçalhos, CSV, JSON, JSON Lines, YAML, INSERT, UPDATE, inserts do Mongo… O formato padrão para ⌘C é configurável.
  • Exportar resultados para CSV (com ,, com ; ou para Excel), TSV, JSON, JSONL, SQL, XLSX e XML. A exportação reexecuta a consulta completa em streaming, então não é limitada às linhas na tela.
  • Gráficos de resultados com Apache ECharts.
  • Visualização em árvore JSON dos resultados, projetada para bancos de dados de documentos e disponível em todos os mecanismos: ela desdobra campos aninhados e colunas JSON, com busca em chaves e valores, tipos por campo e grandes matrizes agrupadas.
  • Planos de execução gráficos, no estilo do Management Studio: estimado, real ou ambos, com zoom e pan.
  • Pesquisar no banco de dados: um texto em nomes de objetos, nomes de colunas e no código de views, rotinas e triggers, com resultados conforme avança. Detalhes: docs/search.md.
  • Executar em vários bancos de dados: o código do editor em vários bancos de dados de uma conexão de uma só vez, com os resultados juntos em uma única grade com uma coluna base. Detalhes: docs/multi-database-queries.md.
  • Qualidade de código: o editor sinaliza consultas lentas, resultados que provavelmente não são os esperados e alterações que afetam mais linhas do que o pretendido, com as regras de cada família de mecanismos, sem consultar o banco de dados. Detalhes: docs/code-quality.md.
  • Construtor de consultas: constrói um SELECT (ou seu equivalente CQL) em uma tela com tabelas, junções, agregações, ordenação e filtros, com o SQL do mecanismo. Detalhes: docs/query-builder.md.
  • Otimizar consulta: reescritas equivalentes por regras e por IA, índices sugeridos a partir do plano e uma comparação somente leitura de tempos e resultados. Detalhes: docs/query-optimizer.md.

Design e estrutura

  • Designer de tabelas adaptado a cada mecanismo. No Mongo, ele projeta coleções, com validação; em cada mecanismo, ele usa seus próprios tipos, identidades, índices e chaves.

  • Diagrama ER do banco de dados:

    • com relacionamentos, busca e filtragem por um ou vários esquemas;
    • com um modo "somente chaves", minimapa e exportação para SVG ou PNG;
    • com layout automático que lida com centenas de tabelas.
  • Gerador de scripts para o banco de dados, escolhendo o que incluir: DROP, CREATE, índices, chaves estrangeiras, views e rotinas, dados e triggers. Ele sai na ordem correta para restauração, com os ajustes de cada mecanismo (por exemplo, IDENTITY_INSERT no SQL Server ou ressincronização de sequências no PostgreSQL).

  • Migrar, clonar e sincronizar bancos de dados: "Migrar…" no menu de um banco de dados move suas tabelas e dados para outro banco de dados, até mesmo de outro mecanismo. Apenas os modos que funcionam para esse par de mecanismos são habilitados:

    • Migrar (converter), entre qualquer par de mecanismos: converte tipos, valores padrão, chaves, índices e nomes, mostra um relatório de cada alteração e copia os dados.
    • Clonar, entre bancos de dados do mesmo mecanismo: deixa o destino idêntico à origem, com esquemas, tipos, partições, índices, restrições, sequências, views, rotinas e triggers. No SQL Server e Azure SQL, e no PostgreSQL, TimescaleDB, KingbaseES, AlloyDB, Cloud SQL, Aurora, EDB e Fujitsu.
    • Sincronizar, em tabelas que já existem no destino: compara por chave e insere, atualiza e exclui apenas as linhas que diferem, em uma transação por tabela. No SQL Server e Azure SQL, e no PostgreSQL, TimescaleDB, YugabyteDB, KingbaseES, AlloyDB, Cloud SQL, Aurora, EDB e Fujitsu, com PostgreSQL 11 ou posterior.
    • A cópia usa o carregamento em massa nativo de cada mecanismo (INSERT BULK, COPY binário, LOAD DATA, Appender do DuckDB…) ou INSERT em lote onde não houver. Ele move várias tabelas de uma só vez com memória limitada e mostra o progresso e linhas por segundo de cada uma. A origem é aberta somente leitura e os dados chegam sem perda.
    • Se o aplicativo fechar no meio, a execução é retomada depois sem copiar novamente as tabelas já concluídas.
    • Migrações salvas: cada banco de dados tem um nó "Migrações" com as iniciadas a partir dele. A configuração se salva e viaja com a sincronização em nuvem, e cada execução é mantida em seu histórico para que possa ser reaberta, retomada ou repetida.

    Detalhes: docs/migration.md.

  • Comparar esquemas: "Comparar esquemas…" no menu de um banco de dados mostra dois bancos de dados lado a lado, no estilo do WinMerge. Eles podem estar em conexões diferentes, e até mesmo em mecanismos diferentes.

    • Ele compara tabelas, views, procedures, funções e triggers. Ele destaca o que difere em colunas, índices, chaves estrangeiras e a chave primária, e as linhas de código que diferem.
    • Com as setas → e ←, as alterações são passadas de um lado para o outro, por objeto ou por coluna, com desfazer.
    • Um objeto também pode ser excluído de um lado sem passá-lo do outro, e antes de executar você vê o que depende dele.
    • "Sincronizar" gera o script do mecanismo daquele lado (CREATE, ALTER, DROP) na ordem correta, e avisa se algo pode perder dados ou falhar. Ele abre como uma consulta ou executa com confirmação. Detalhes: docs/schema-compare.md.
  • Comparar dados: compara as linhas de duas tabelas ou coleções, na mesma conexão, em conexões diferentes ou em mecanismos diferentes. Ele as emparelha pela chave primária, ou pelas colunas que você escolher, e compara os valores pelo que valem e não por como cada mecanismo os retorna.

    • Mostra as linhas que diferem, com cada valor marcado, e as que estão apenas em um dos lados. Para cada linha, você escolhe o que fazer: atualizar, inserir ou excluir. Exclusões nunca são escolhidas automaticamente.
    • Gera um script por lado que muda, no idioma do mecanismo, que pode ser copiado, aberto em uma consulta ou executado. Depois, compara novamente.
    • Avisa se as duas tabelas não são iguais, se há chaves duplicadas ou se uma excede 200.000 linhas. Conexões somente leitura rejeitam o script.
    • Compara em todos os mecanismos. Aplicar as alterações depende do que o destino permite gravar: Drill, por exemplo, não tem INSERT, UPDATE ou DELETE.

    Detalhes: docs/data-compare.md.

  • Clonar tabela: no explorador, uma tabela, coleção ou índice é clonado ao lado do original, com um nome que carrega a data e a hora que pode ser alterado.

    • Copia colunas, chave primária, restrições, índices e chaves estrangeiras, e os dados com o mecanismo de transferência, preservando identidades. Também pode clonar apenas a estrutura.
    • O clone sai exato ou não é criado: se algo não puder ser copiado de forma idêntica, ou se você interromper, o que foi criado é excluído. A tabela original nunca é tocada.
    • Está disponível em todos os mecanismos com tabelas ou coleções que tenham linhas próprias. Não em mecanismos de grafo ou chave-valor, ksqlDB, CouchDB ou InfluxDB 2 e 3. Detalhes: docs/engine-support.md.
  • Importar CSV, TSV, JSON, JSONL, XLSX e XML para uma tabela nova ou existente, com mapeamento de colunas.

  • Executar um arquivo de script grande em partes, por exemplo, para restaurar um dump.

  • Dados de teste: preenche uma tabela com linhas fictícias, mas plausíveis, respeitando chaves, tamanhos e chaves estrangeiras. Detalhes: docs/test-data.md.

  • Documentar o banco de dados: um dicionário de dados em HTML ou Markdown, com tabelas, chaves, índices, código de rotinas, dependências e um diagrama entidade-relacionamento. Detalhes: docs/database-docs.md.

  • Subconjunto de dados: copia algumas linhas de uma tabela para outro banco de dados, com as linhas pai necessárias, e mascara dados pessoais. Detalhes: docs/data-subset.md.

Administração

  • Usuários e permissões: uma aba com os usuários e papéis do servidor (ou do banco de dados, onde são por banco). Para cada um, mostra seus papéis e suas permissões, diretas ou herdadas de um papel, incluindo as negadas.

    • Usuários e papéis são criados, senhas são alteradas, login é habilitado ou desabilitado, e permissões no banco de dados, em um esquema ou em um objeto são concedidas ou revogadas.
    • Cada alteração vira um script do mecanismo que é revisado antes de executá-lo. A senha não aparece na pré-visualização e esses scripts não são mantidos no histórico.
    • Está disponível na grande maioria dos mecanismos. Os que não têm usuários próprios não o possuem, como SQLite, DuckDB ou DynamoDB. Detalhes: docs/users-and-permissions.md.
  • Ações de acordo com as permissões do usuário: antes de oferecer backups, restaurações, o Profiler, encerrar sessões, criar ou excluir bancos de dados ou gerenciar usuários, o DBine pergunta ao servidor se o usuário conectado pode fazer isso. Se não puder, a ação aparece desabilitada e diz qual permissão está faltando. Se o mecanismo não permitir saber com certeza, ela permanece habilitada.

  • Backups, em uma aba por banco de dados:

    • O DBine copia em todos os mecanismos: um script local com a estrutura e, se você quiser, os dados, com seu histórico nesta máquina, que é restaurado no mesmo banco de dados ou em outro;
    • backups do servidor onde o mecanismo os possui (SQL Server, Oracle, SAP HANA, ClickHouse, Snowflake, BigQuery, Elasticsearch, Redis, entre outros), com seu histórico e o script para criar, restaurar ou excluir um backup, que é revisado antes de executá-lo.

    Detalhes: docs/backups.md.

  • Tarefas agendadas: scripts, exportações, comparações de esquema, backups, documentação de banco de dados e e-mails que são executados sozinhos com o DBine fechado, com notificação do sistema, histórico e aprovação prévia de qualquer coisa que altere dados. Detalhes: docs/scheduled-tasks.md.

  • Verificação de integridade: revisa um banco de dados e lista o que merece atenção por gravidade, com verificações próprias de cada mecanismo e scripts de correção que são revisados antes de executá-los. Detalhes: docs/health-check.md.

  • Propriedades do banco de dados: mostra o que o mecanismo relata sobre um banco de dados e altera o que ele permite, com o script e os avisos à vista. Detalhes: docs/database-properties.md.

Biblioteca de scripts

Os scripts reutilizáveis de um DBA ("Reindexar uma tabela", "Sessões bloqueadas"…) são mantidos em sua própria visão, com o ⭐:

  • Por mecanismo, não por banco de dados: cada script pertence a um ou mais mecanismos, então um script do MongoDB não se mistura com um do SQL Server.
  • Ao abrir, é copiado para uma consulta do banco de dados ativo e pede seu {{parameters}}, com sugestões das tabelas desse banco de dados.
  • Organização: pastas e pesquisa.
  • Importar e exportar: traz a pasta de arquivos .sql que você já tem de uma vez, e exporta da mesma forma.

Detalhes: docs/library.md.

Sincronização na nuvem

Um backup de conexões, pastas, consultas, preferências e senhas. Ele é armazenado criptografado de ponta a ponta com uma frase secreta escolhida pelo usuário (XChaCha20-Poly1305 + Argon2id) e fica na conta do próprio usuário:

  • Google Drive, na pasta privada do aplicativo;
  • OneDrive, na pasta do aplicativo;
  • ou qualquer pasta, como iCloud ou Dropbox.

Ele sincroniza sozinho, resolve conflitos sem perder dados e permite recuperar tudo em outra máquina. A AddLayer não tem servidores para isso e nunca vê os dados. Detalhes: docs/sync.md.

Assistente de IA

Um chat na barra lateral direita (⌘I). Ele escreve consultas, explica ou corrige a do editor e responde sobre a estrutura do banco de dados.

  • Ele nunca executa nada. Seu código é anexado à consulta aberta, ou a substitui ao corrigi-la, e o usuário decide se vai executá-lo.
  • Ele usa o que está na máquina:
    • o modelo integrado (llama.cpp com Qwen2.5-Coder 3B ou 7B), que roda localmente e é baixado apenas uma vez, na primeira vez que é usado;
    • Ollama ou LM Studio;
    • Claude Code ou Codex com a conta do usuário, sem ferramentas.
  • Ele nunca envia linhas de dados. Como contexto, recebe o mecanismo, a estrutura e o editor.

Detalhes: docs/ai-assistant.md.

Servidor MCP

O DBine pode funcionar como um servidor MCP local, para que assistentes como Claude Code, Codex, Cursor, Claude Desktop, VS Code ou Windsurf trabalhem com suas conexões enquanto o DBine está aberto. Ele vem desligado.

  • Quatro níveis por conexão: Desabilitado (o assistente não a vê), Esquema (somente estrutura, sem dados), Leitura (também linhas de exemplo, consultas somente leitura e planos estimados) e Gravação. O nível padrão é Esquema, e conexões marcadas como prod ou somente leitura nunca passam de Leitura.
  • Toda gravação é aprovada: o DBine vem para a frente e mostra o cliente, a conexão, o banco de dados e o código exato para aprovar ou rejeitar. Se você não responder em 2 minutos, é rejeitado e nada é executado.
  • Um token por cliente, revogável separadamente. O DBine escuta apenas nesta máquina e rejeita solicitações que vêm de páginas de navegador.
  • Log de atividade local com as últimas 10.000 chamadas, filtrável por cliente ou por conexão. Ele não armazena senhas ou segredos.

Detalhes: docs/mcp.md.

Segurança

  • Senhas e outros segredos são armazenados criptografados (XChaCha20-Poly1305) em um arquivo separado, com uma chave aleatória que vive no chaveiro do sistema (Keychain, Credential Manager, Secret Service). É um único item do chaveiro para todo o aplicativo: o sistema pede permissão uma vez, não uma vez por conexão. Eles nunca vão para o arquivo de estado ou para os logs.
  • O estado local é um arquivo SQLite na pasta de configuração do aplicativo.

Atualizações

  • Ele se atualiza sozinho no macOS, Windows e com o AppImage do Linux: baixa a nova versão, verifica sua assinatura e reinicia para concluir, sem interromper execuções em segundo plano sem perguntar. Com os pacotes .deb e .rpm, ele notifica e oferece a página de lançamento.

Detalhes: docs/updates.md.

Mecanismos

Cada mecanismo é um crate em crates/drivers/. Cada novo recurso tem que funcionar em todos eles. As exceções, com seu motivo, estão em docs/engine-support.md.

FamíliaMecanismos
RelacionalSQL Server · PostgreSQL · CockroachDB · YugabyteDB · TimescaleDB · Greenplum · KingbaseES · Denodo · MySQL · MariaDB · TiDB · OceanBase · SingleStore · SQLite · libSQL / Turso · Oracle · Oracle Autonomous · Firebird · SAP HANA · Aurora DSQL · Cloud Spanner · ODBC (Db2, Sybase ASE, SQL Anywhere, Informix e mais)
AnalíticoDuckDB · CSV / Parquet / JSON files · ClickHouse · Trino · Presto · Starburst · BigQuery · Athena · Snowflake · Databricks · Redshift · StarRocks · Doris · Databend · Hive · Impala · Drill · Dremio · Calcite Avatica · Flight SQL · Teradata · Vertica · Exasol · Netezza · Ocient
DocumentoMongoDB · CouchDB · Couchbase · Azure Cosmos DB
Chave-valorRedis · Valkey · Dragonfly · DynamoDB · etcd
GrafoNeo4j · Memgraph · Amazon Neptune · OrientDB
Coluna largaCassandra · ScyllaDB · Amazon Keyspaces · Phoenix
Série temporalInfluxDB 1/2/3 · IoTDB · GreptimeDB · TDengine
BuscaElasticsearch · OpenSearch · Solr · Manticore
StreamingksqlDB · Timeplus

Nenhum driver precisa de bibliotecas do fornecedor para o aplicativo iniciar:

  • Oracle usa um cliente Rust puro.
  • ODBC carrega o gerenciador de driver somente quando é usado.
  • Os predefinidos de ODBC precisam do driver do fornecedor instalado para conectar.
  • DuckDB não é incluído no aplicativo. Na primeira vez que você conecta, o DBine baixa a biblioteca oficial, com a versão fixada e verificada por sha256, e o explorador mostra o progresso ("Baixando DuckDB…"). O mesmo acontece com o mecanismo do assistente de IA. Assim, o executável pesa muito menos.

Apoie o projeto

O DBine é gratuito e continuará assim. Se for útil para você, pode apoiá-lo com o que quiser, uma vez ou todo mês, em Buy Me a Coffee. É apoio, não uma licença: o aplicativo funciona da mesma forma.

Download

Os instaladores estão em Releases:

  • Windows: .msi ou -setup.exe.
  • macOS: .dmg, na versão Apple Silicon ou Intel.
  • Linux: .AppImage, .deb ou .rpm.

Os binários ainda não são assinados pela Apple ou Microsoft:

  • macOS: na primeira vez, avisa que não pode verificar o desenvolvedor. Abra Ajustes do Sistema › Privacidade e Segurança e clique em "Abrir mesmo assim". Também pode ser feito pelo terminal: xattr -dr com.apple.quarantine /Applications/DBine.app.
  • Windows: o SmartScreen pode pedir "Mais informações" › "Executar mesmo assim".

Compilar

Requisitos

  • Rust estável e Node.js 20 ou posterior.
  • Um compilador C (Xcode Command Line Tools no macOS, Visual Studio Build Tools no Windows, build-essential no Linux). llama.cpp e DuckDB não são mais compilados: são baixados na primeira vez que são usados.
  • Somente Linux: sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev.
npm install --prefix web
cargo install tauri-cli --version "^2"

Desenvolvimento

cargo tauri dev          # the app with hot reload
cargo test --workspace   # unit tests

macOS: mantendo o keychain de pedir permissão a cada reconstrução. Builds de desenvolvimento são assinados "ad hoc" e mudam de identidade a cada build, então o macOS pergunta novamente para cada senha salva. Com um certificado de assinatura de código chamado DBine Dev no keychain de login (autoassinado é suficiente), cargo run / cargo tauri dev assinam o aplicativo com uma identidade fixa (scripts/dev-sign-run.sh, configurado em .cargo/config.toml). Após o primeiro "Sempre Permitir", ele não pergunta novamente. Para criar o certificado, uma vez por máquina:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3650 -nodes -subj "/CN=DBine Dev" \
  -addext "keyUsage=critical,digitalSignature" -addext "extendedKeyUsage=critical,codeSigning" -addext "basicConstraints=critical,CA:false"
openssl pkcs12 -export -inkey key.pem -in cert.pem -name "DBine Dev" -out dev.p12 -passout pass:dbine-dev
security import dev.p12 -k ~/Library/Keychains/login.keychain-db -P dbine-dev -T /usr/bin/codesign
rm key.pem cert.pem dev.p12

Sem o certificado, o aplicativo ainda executa, apenas sem uma assinatura fixa.

Instaladores

Cada sistema compila seus próprios instaladores:

SistemaComandoSaída em target/<target>/release/bundle/
macOS Apple Siliconcargo tauri build --target aarch64-apple-darwin.app, .dmg
macOS Intelcargo tauri build --target x86_64-apple-darwin.app, .dmg
Windowscargo tauri build --target x86_64-pc-windows-msvc.msi, -setup.exe
Linuxcargo tauri build --target x86_64-unknown-linux-gnu.AppImage, .deb, .rpm

Sem --target, ele compila para a máquina atual e deixa os arquivos em target/release/bundle/.

Windows a partir do macOS (o .exe, sem um instalador)

brew install llvm
cargo install cargo-xwin
rustup target add x86_64-pc-windows-msvc

./scripts/build-windows-from-mac.sh
# → target/x86_64-pc-windows-msvc/release/dbine.exe

O script executa cargo tauri build --runner cargo-xwin --target x86_64-pc-windows-msvc --no-bundle com dois ajustes para compilar o código C das dependências a partir do Mac:

  • ele usa o clang-cl do LLVM;
  • ele aponta o lld-link do cargo-xwin para o rust-lld do rustup.

Ele aceita a licença do Windows SDK (XWIN_ACCEPT_LICENSE=1). Os instaladores .msi e .exe são compilados no Windows ou no CI.

Contas na nuvem

Para que o login do Google Drive e do OneDrive funcione, os IDs do aplicativo registrado são compilados:

DBINE_GOOGLE_CLIENT_ID=… DBINE_GOOGLE_CLIENT_SECRET=… DBINE_MICROSOFT_CLIENT_ID=… cargo tauri build

Localmente, eles também podem ir em um .env na raiz do repositório, que o git ignora.

Como registrar: docs/sync.md.

Publicar uma versão

.github/workflows/release.yml compila as quatro variantes no GitHub Actions: Windows x64, macOS Apple Silicon, macOS Intel e Linux x64. Em seguida, ele publica os instaladores em uma versão.

git tag v0.2.0
git push origin v0.2.0
  • A versão do aplicativo é obtida da tag.
  • Se os segredos DBINE_GOOGLE_CLIENT_ID, DBINE_GOOGLE_CLIENT_SECRET e DBINE_MICROSOFT_CLIENT_ID existirem, o build os inclui.
  • Execução de teste sem publicar: Actions › release › Run workflow compila tudo e deixa os instaladores como artefatos.
  • O instalador inclui apenas o driver SQLite. Os outros são compilados separadamente, enviados para a mesma versão, e o aplicativo os baixa na primeira vez que são usados: docs/on-demand-drivers.md.

Estrutura do repositório

CaminhoO que há ali
crates/dbine-driverO contrato do driver (traits Driver e Session) e os auxiliares
crates/drivers/<engine>Um crate por família de mecanismo ou protocolo
crates/dbine-driversO registro de drivers, com um recurso por crate
crates/dbine-plugin, crates/dbine-plugin-hostOs drivers como processos separados, baixados no uso
crates/dbine-coreO estado local (SQLite), o keychain, exportação e importação
crates/dbine-schemaConversão de esquema entre mecanismos e comparação de esquemas
crates/dbine-syncSincronização criptografada (Google Drive, OneDrive, pasta)
crates/dbine-aiO assistente de IA (modelo integrado, Ollama, Claude Code, Codex, LM Studio)
src-tauriOs comandos Tauri
webA interface Vue 3

Documentação:

Os testes de integração estão em crates/drivers/*/tests/, marcados como #[ignore]. Eles leem DBINE_TEST_<ENGINE>_URL e executam contra contêineres Docker.