Um Banco de Dados Relacional Disfarçado de Planilhas Familiares
Todo desenvolvedor eventualmente enfrenta uma situação em que a área de negócios ou a gerência precisa de uma interface conveniente para trabalhar com dados. Geralmente as opções são limitadas. Ou implantamos um painel administrativo pesado como Django Admin ou Forest Admin, ou entregamos tudo ao Google Sheets, onde em uma semana as fórmulas quebram, os tipos de dados se misturam e vincular duas tabelas através de uma chave estrangeira vira um pesadelo com VLOOKUP.
Há algum tempo encontrei o grist-core — um motor de código aberto que tenta fazer a ponte entre dois mundos completamente diferentes: bancos de dados relacionais e planilhas flexíveis.
https://github.com/user-attachments/assets/fe152f60-3d15-4b11-8cb2-05731a90d273
Sob o Capô
Olhando sob o capô, o Grist não se parece nada com clones padrão do Excel. Em planilhas clássicas, uma célula existe por conta própria: uma linha em uma coluna pode conter um número, a próxima uma string, e abaixo uma fórmula. No Grist, as colunas são estritamente tipadas e funcionam como campos em tabelas SQL.
Ao mesmo tempo, cada documento é apenas um arquivo SQLite comum. Isso significa que seus dados não estão presos a um armazenamento proprietário. Qualquer utilitário que consiga ler SQLite abrirá um arquivo .grist exportado diretamente. Da perspectiva de backups e portabilidade entre servidores, essa abordagem simplifica significativamente as coisas: pegue o arquivo — pegue todo o banco de dados.
Fato interessante: órgãos do governo francês (ANCT e DINUM) investem ativamente no código, então o projeto recebe consistentemente commits relacionados a acessibilidade, localização e segurança empresarial.
Python em Vez de Macros e Dialetos de Fórmulas
O principal recurso matador para qualquer pessoa que sabe programar são os cálculos em Python puro. Não há sintaxe restrita ou extensões estranhas. As fórmulas das células aceitam sintaxe Python padrão junto com sua biblioteca padrão.
Por exemplo, você pode usar livremente list comprehensions, fatiamento de strings, expressões regulares ou o módulo datetime. Se você está acostumado com funções tabulares como SUM ou AVERAGE, elas também estão disponíveis aqui, mas quando a lógica fica complexa, mudar para Python economiza muitos nervos.
# Пример вычисления в колонке: вытаскиваем домен из email и форматируем
if $Email and "@" in $Email:
domain = $Email.split("@")[1].lower()
return f"Корпоративный: {domain}" if domain != "gmail.com" else "Личный"
return "Не указан"
O código é executado em um sandbox isolado. Dependendo do ambiente, você pode configurar o isolamento via gVisor no Linux, sandbox-exec nativo no macOS, ou Pyodide via WebAssembly se estiver implantando no Windows.
Se você não quiser escrever fórmulas manualmente, há um assistente de IA integrado. Você pode conectá-lo ao OpenAI ou configurar qualquer outro modelo através do OpenRouter, incluindo Claude 3.7 Sonnet ou LLMs locais via LM Studio.
Relacionamentos de Dados e Dashboards Visuais
No Airtable ou Notion, você frequentemente carece de configuração adequada de visualizações vinculadas em uma única tela. No Grist, um workspace é dividido em múltiplos cards ou widgets que podem ser vinculados uns aos outros com um clique:
- Tabela de clientes à esquerda filtra a lista de pedidos à direita.
- Selecionar um pedido atualiza instantaneamente o card de detalhes com descrição em Markdown e arquivos anexados.
- Widgets integrados de calendário, gráficos e tabelas de resumo agrupam métricas sem criar planilhas ocultas intermediárias.
Referências bidirecionais (two-way references) funcionam prontamente: vincule uma tarefa a um sprint — o sprint automaticamente obtém a tarefa adicionada à sua lista de tarefas vinculadas.
Controle de Acesso Granular
Muitas ferramentas no-code de código aberto falham em segurança, oferecendo acesso no modo "tudo ou nada". No grist-core, as regras de acesso são definidas no nível de tabelas, linhas e colunas individuais.
As condições de acesso também podem ser definidas via fórmulas:
- Um gerente vê apenas negócios onde seu email corresponde ao campo
user.Email. - A coluna de salário é visível apenas para usuários com um atributo SSO específico.
- Bloquear edição de registros arquivados se o campo
Status == 'Closed'estiver definido.
Para instalações empresariais, autenticação OIDC, SAML e forward-auth via proxy (ex: Traefik ou Authentik) são suportadas, junto com provisionamento de usuários via SCIM.
Início Rápido no Docker
Você pode testar o motor localmente em poucos minutos com um único comando:
docker run -p 8484:8484 -v $PWD/persist:/persist -it gristlabs/grist
Após a inicialização, abra http://localhost:8484 no seu navegador. O container irá exibir uma chave de inicialização gerada no console para a configuração inicial do administrador. Se quiser pular o assistente e obter uma instância única sem perguntas extras, basta passar a variável de ambiente -e GRIST_IN_SERVICE=true.
A integração com sistemas externos ocorre através da API REST padrão e webhooks de saída. Além disso, os webhooks são flexivelmente configuráveis: você pode acionar eventos apenas quando colunas específicas mudam ou quando uma determinada condição lógica é atendida.
Comparando Edições e Limitações
O repositório grist-core é distribuído sob a licença Apache 2.0. A imagem Docker base gristlabs/grist contém código proprietário opcional para recursos Enterprise, que está desabilitado por padrão. Se você estritamente precisa de software exclusivamente livre sem inclusões de terceiros, os desenvolvedores constroem uma imagem separada gristlabs/grist-oss.
Alguns recursos são movidos do core puro grist-core para a versão comercial. Por exemplo, logs de auditoria em streaming, cadeias de automação de email integradas e um servidor MCP nativo para clientes de IA. No entanto, nada impede que você conecte o mesmo Claude via adaptadores da comunidade usando a API REST padrão.
As traduções de interface são gerenciadas pela comunidade Weblate:
Quem Se Beneficiará Deste Projeto
Se você está procurando um substituto auto-hospedado para o Airtable sem limites de linhas e taxas de assinatura por usuário, o Grist parece um ótimo candidato.
Ele cobre perfeitamente necessidades de CRMs internos, rastreadores de inventário, registros financeiros e painéis simples de back-office. Você obtém um modelo de dados relacional completo, a flexibilidade de scripts Python e controle total sobre arquivos SQLite no seu próprio servidor.
O código-fonte e a documentação estão disponíveis no repositório oficial gristlabs/grist-core.
Projetos relacionados