Novidades
Novidades
Informações mais detalhadas sobre as alterações em cada versão podem ser encontradas diretamente em GitHub Releases.
v3.0.0
- 🔑 Novo endpoint de login (breaking): o método JSON-RPC
get_jwtfoi substituído porPOST /{prefix}/{database}/token, que recebe o login e a senha do PostgreSQL como autenticação HTTP Basic — as credenciais deixam de viajar no corpo do pedido e um proxy reverso pode limitar logins por URL.get_jwtem/jsonrpcagora responde 404 /-32601. Migração:curl -X POST …/token -u login:password. - 📥 Download de arquivos: o novo endpoint
POST /{prefix}/{database}/fileserve arquivos binários a partir de funções PostgreSQL que retornam conjuntos de linhas — uma linha diretamente, várias linhas como ZIP em streaming — com a mesma autenticação, troca de função e limitação de taxa do JSON-RPC.capabilities()informakind: "file". Reapliquesql/schema.sql(é idempotente) para obter os novos campos. - 🧰 Ferramentas: novo JWT Signer, que assina tokens localmente no navegador a partir de um
JWT_SECRETdigitado manualmente (sem acesso à rede, o segredo nunca é guardado), capturas de tela e versões hospedadas de cada ferramenta (explorer.,sse-tester.,jwt-getter.,jwt-signer.pgarachne.com), cartões clicáveis e links cruzados. As pastas emtools/foram renomeadas paraexplorer,jwt-getteresse-tester— atualizeSTATIC_FILES_PATHse as serve. - 🐛 Correções e reforço: uma função que retorna
NULLSQL agora produz"result": nullem vez de HTTP 500; os caminhos ZIP de/filerejeitam nomes hostis ao Windows e colisões sem distinção de maiúsculas; resultados vazios são revertidos (rollback). - 📚 Documentação e dependências: Quick Start passo a passo, página JSON-RPC como referência pura, a decisão de arquitetura «Por que PostgreSQL», orientações de proxy reverso para downloads grandes e módulos Go atualizados (atualização de segurança do
golang.org/x/net).
v2.2.0
- 🔑 JWT opcional:
JWT_SECRETdeixa de ser obrigatório. Sem ele, o JWT fica desativado (get_jwtdevolve 404 /-32601) e os clientes usam credenciais HTTP Basic ou tokens de API. - 🛡️ Limite de tentativas para todos os métodos de autenticação (segurança):
LOGIN_RATE_LIMITpassa a abranger também HTTP Basic e Bearer (JWT/token de API) em todos os endpoints, não apenasget_jwt. Antes, era possível adivinhar palavras-passe sem limite através deAuthorization: Basic. - 🔒 Acesso governado apenas por privilégios (breaking):
pgarachne.allowed_schemas()foi removida.capabilities()(e, com ela, MCPtools/liste a exportação OpenAPI) lista todas as funçõesjsonbque quem chama pode executar e cujo esquema pode usar. RevogueEXECUTE/USAGEonde não for desejado; veja a página Segurança. - ⚠️ Outras alterações incompatíveis:
save_idempotency_keypassa a receber um âmbito por papel (volte a aplicarsql/schema.sqlantes de atualizar o binário),universal_update/universal_deleterecusam filtros vazios, a menos que seja passado"all": true, euniversal_readsó aceita*ou nomes de coluna simples emselect(fecha uma falha de SQL injection). - 🐛 Correções: deadlock do SSE ao reconectar o listener, inícios de sessão lentos ou com palavra-passe errada que bloqueavam outros pedidos, renderização de argumentos em MCP
prompts/get, um comentário de função malformado que quebravacapabilities, resultados «falsy» mostrados como erros no Explorer e um XSS na vista de resultados do Explorer. - 📚 Documentação: novo
llms-full.txt, cartão GitHub Sponsors, dicas nos ícones da barra de navegação; esta página passa a listar também v2.0.3 e v2.1.0.
v2.1.0
- 📄 Exportação OpenAPI por método:
generate_openapi_spec()agora também gera um caminho apenas para documentação por cada método exposto, para ferramentas que esperam uma operação por caminho (Swagger UI, Postman, geração de código). Um novo endpointopenapi.yamldevolve a mesma especificação em YAML. - 🔒 Exportação OpenAPI autenticada e filtrada por papel:
/openapi.jsonagora exige a mesma autenticação que/jsonrpce lista apenas os métodos que o papel de quem chama pode executar — anteriormente o endpoint não exigia autenticação e listava todos os métodos a qualquer pessoa. - 🔌 Atualização do protocolo MCP: o endpoint MCP passa agora a falar exclusivamente a versão de protocolo
2026-07-28; o antigo handshakeinitialize/pingdeixou de ser suportado. ConsulteAGENTS.mdpara a referência completa. - 🐛 Correção no pool de conexões: os pools de conexão de autenticação direta (Basic Auth) são agora corretamente removidos quando ociosos, corrigindo um problema em que a rotação de rotina de senhas podia acabar por bloquear novas credenciais.
- 📦 Atualização de dependências e CI: atualização de rotina das dependências Go (agora requer Go 1.26) e os correspondentes ajustes nas ferramentas de CI.
v2.0.3
- 🔒 Reforço de segurança: a troca de papel deixou de construir SQL por concatenação de strings (usa agora a função parametrizada
set_config()), o serviço de ficheiros estáticos passa a resolver caminhos através deos.Rootpara que um symlink não consiga escapar do diretório servido, permissões mais restritas para os ficheiros de log/PID, e validação mais rigorosa dos links de resultados de pesquisa do site de documentação. - 🚀 Nova página de Início Rápido (nos 10 idiomas): um caminho rápido da instalação até um endpoint funcional, sem o desvio completo por Instalação/Configuração.
- 📄 Descoberta do
llms.txt: agora ligado a partir da página inicial, da página MCP, do README e do cabeçalho de todas as páginas, para que os crawlers de LLM o consigam encontrar. - 🐛 Correções: o alternador do menu móvel passa a mostrar corretamente um botão Início funcional em ecrãs largos, os links da página 404 personalizada passam a resolver corretamente independentemente da profundidade do URL, e o menu móvel ganhou uma entrada «Início».
v2.0.2
- 🔒 Reforço de segurança: Corrigidos vários achados de análise estática — as chaves de cache do pool de autenticação direta agora usam HMAC (em vez de um SHA-256 simples), uma verificação explícita de contenção para o serviço de ficheiros estáticos, escaping de HTML do texto de estado de login do SSE Tester, uma lista de permissões de esquemas de URL para os links de resultados de pesquisa do site de documentação, e permissões de privilégio mínimo no workflow de CI.
- 📦 Atualização de dependências: Atualizadas todas as dependências Go, incluindo
gin-gonic/ginpara a v1.12.0 elib/pqpara a v1.12.3 (agora requer Go 1.25). - 🌐 3 novos idiomas: O site de documentação já está disponível em polaco, ucraniano e grego — 10 idiomas no total.
v2.0.1
- 🔒 Correção de segurança: Atualizada a dependência transitiva de HTTP/3
quic-gopara a v0.59.1, corrigindo uma vulnerabilidade de expansão de trailers QPACK que podia permitir que um peer malicioso esgotasse a memória do servidor ou do cliente. - 🎨 Melhorias no site de documentação: Novo alternador de tema claro/escuro/automático e alternador de idioma apenas com ícones, links de ícone do GitHub/Apoio na barra de navegação, correção dos dados estruturados JSON-LD codificados em duplicidade, e um
llms.txtampliado.
v2.0.0
- 🔒 Padrões seguros (com quebra de compatibilidade):
DB_SSLMODEagora tem como padrãorequire,ALLOWED_ORIGINSdeixou de ter*como padrão, eJWT_SECRETdeve ter no mínimo 32 bytes. Implantações existentes devem revisar a configuração antes de atualizar. - 🧹 Limpeza de itens legados: Removidas as rotas de redirecionamento
/api/…e/sse/…e o alias JSON-RPC obsoletologin. Use diretamente/{prefix}/:database/…eget_jwt. - 🛡️ Autenticação e tratamento de erros mais rígidos: Um novo limite de login por IP (
LOGIN_RATE_LIMIT_PER_IP) fecha uma brecha de credential spraying, e os erros das ferramentas MCP não expõem mais o texto de erro bruto do PostgreSQL por padrão (pode ser reativado comMCP_SQL_ERROR_DETAIL). - ⚙️ Limites de conexão configuráveis: O limite do pool de conexões de autenticação direta agora é configurável via
DIRECT_POOL_LIMIT. - 🔑 Suporte a IdPs externos (BYO JWT): As novas configurações
JWT_ISSUER,JWT_AUDIENCEeJWT_LEEWAYvinculam os tokens emitidos a um emissor/audiência específicos e permitem ajustar a tolerância de desvio de relógio. - 🧰 Novas ferramentas: Um JWT Getter (
/tools/get-jwt) e um SSE Tester (/tools/test-sse) independentes se juntam ao Explorer para testes manuais rápidos. - 🐛 Correções de confiabilidade: Corrigido um bloqueio no encerramento do SSE e um bug na recuperação de conexões mortas que podia deixar o servidor incapaz de reconectar ao PostgreSQL.
- 🧪 Reforço de CI: Adicionados
golangci-lint, o detector de race conditions do Go egovulnchecka cada build, além de maior cobertura de testes. - 📦 Processo de lançamento: Adicionado o
CHANGELOG.mde dividido o fluxo de lançamento emmake release-local(build e verificação) emake release(tag, publicação, atualização do tap Homebrew).
v1.3.0
- 🌐 PgArachne Explorer – PWA moderno: Renovação visual e funcional completa – tema escuro/claro (automático), layout de cartões responsivo, realce de sintaxe JSON, botão copiar para área de transferência, melhor experiência de autenticação (abas senha/token), suporte à instalação PWA (manifesto, ícones, service worker), links compartilháveis via parâmetro
?url=…. - 🛠️ Suporte ao Model Context Protocol (MCP): Novo endpoint
/{prefix}/{db}/mcpcom métodos padrãoresources/list,resources/read,prompts/list,prompts/get– totalmente suportado por funções PostgreSQL e reutilizando a autenticação e troca de papel existentes. - 🔧 Prefixo de API configurável: O padrão foi alterado para
/db/{database}/jsonrpce/db/{database}/sse, as rotas antigas/api/…e/sse/…permanecem como redirecionamentos 307 por compatibilidade. Controlado pela variável de ambienteAPI_PREFIX. - 🛡️ Proteção de idempotência: Campo opcional
idempotencyKeyem requisições JSON-RPC – detecção automática de duplicatas (HTTP 409 + código de erro em caso de colisão) usandopgarachne.save_idempotency_key(). - 📚 Melhorias na documentação: Nova seção /tools/ com cartões (Explorer + futura barra de ferramentas para macOS), nova página «Architectural Decisions», SECURITY.md com instruções para comunicar vulnerabilidades, melhor tipografia em todos os idiomas via TypoLima, suporte aprimorado para página 404 no GitHub Pages.
- 📝 Renomeação do método de login: O método JSON-RPC
loginfoi renomeado paraget_jwt(o nome antigo permanece como alias obsoleto com aviso nos logs). - 📊 Limpeza de registros (logging): Ao registrar em arquivo, o console exibe apenas informações mínimas de inicialização → saída mais limpa em ambientes de produção/Docker.
v1.2.0
- 🛡️ Segurança: A validação do token de acesso ocorre antes de estabelecer uma conexão com o banco de dados. Melhoria na proteção contra falsificação de IP (adicionada a configuração
TRUSTED_PROXIES) e ocultação de erros internos do banco de dados para o utilizador final. - 📊 Métricas isoladas: O endpoint Prometheus
/metricsfoi movido da API pública para a sua própria porta segura (por padrão, disponível apenas em127.0.0.1:9090). - 📦 Nova opção de instalação: O projeto conta agora com um tap Homebrew oficial para macOS e Linux. As compilações são assinadas e geradas via GoReleaser.
- 📚 Documentação reformulada: Visual totalmente novo construído sobre o framework Hugo. Adição de busca rápida de texto completo, opção de copiar código e exemplos de implantação em produção (hardening com Nginx, BYO JWT).
- ⚙️ Gerenciamento aprimorado de daemon: Adicionado suporte para configuração de caminho personalizado do
PID_FILE.
v1.1.0
- 🔌 API unificada: Chamadas via
POST /api/<db>(o método chamado é especificado no corpo JSON-RPC). - ⚡ Notificações em tempo real: Novo endpoint
GET /sse/<db>?channels=...para escutar eventos do banco de dados com suporte a múltiplos canais. - 📈 Observabilidade: Métricas detalhadas do Prometheus para HTTP, autenticação, JSON-RPC e SSE.
- 🏋️ Melhoria substancial na estabilidade: Proteção contra clientes lentos, limites de tempo rigorosos e limpeza automática de conexões.