Novità
Novità
Informazioni più dettagliate sulle modifiche in ogni versione sono disponibili direttamente su GitHub Releases.
v3.0.0
- 🔑 Nuovo endpoint di login (breaking): il metodo JSON-RPC
get_jwtè sostituito daPOST /{prefix}/{database}/token, che accetta login e password PostgreSQL come autenticazione HTTP Basic — le credenziali non viaggiano più nel corpo della richiesta e un reverse proxy può limitare i login per URL.get_jwtsu/jsonrpcora risponde 404 /-32601. Migrazione:curl -X POST …/token -u login:password. - 📥 Download di file: il nuovo endpoint
POST /{prefix}/{database}/fileserve file binari da funzioni PostgreSQL che restituiscono insiemi di righe — una riga direttamente, più righe come ZIP in streaming — con la stessa autenticazione, cambio di ruolo e rate limiting di JSON-RPC.capabilities()riportakind: "file". Riapplicasql/schema.sql(è idempotente) per ottenere i nuovi campi. - 🧰 Strumenti: nuovo JWT Signer, che firma i token localmente nel browser da un
JWT_SECRETinserito a mano (nessun accesso alla rete, il segreto non viene mai salvato), screenshot e versioni ospitate di ogni strumento (explorer.,sse-tester.,jwt-getter.,jwt-signer.pgarachne.com), schede cliccabili e collegamenti incrociati. Le cartelle intools/sono state rinominateexplorer,jwt-getteresse-tester: aggiornaSTATIC_FILES_PATHse le servi. - 🐛 Correzioni e hardening: una funzione che restituisce
NULLSQL ora produce"result": nullinvece di HTTP 500; i percorsi ZIP di/filerifiutano nomi ostili a Windows e collisioni senza distinzione tra maiuscole e minuscole; i risultati vuoti vengono annullati (rollback). - 📚 Documentazione e dipendenze: Quick Start passo dopo passo, pagina JSON-RPC come pura referenza, la decisione architetturale «Perché PostgreSQL», indicazioni sul reverse proxy per download di grandi dimensioni e moduli Go aggiornati (aggiornamento di sicurezza di
golang.org/x/net).
v2.2.0
- 🔑 JWT opzionale:
JWT_SECRETnon è più obbligatorio. Senza di esso JWT è disattivato (get_jwtrestituisce 404 /-32601) e i client usano credenziali HTTP Basic o token API. - 🛡️ Limite di tentativi per tutti i metodi di autenticazione (sicurezza):
LOGIN_RATE_LIMITora copre anche HTTP Basic e Bearer (JWT/token API) su tutti gli endpoint, non sologet_jwt. In precedenza le password potevano essere indovinate senza limiti tramiteAuthorization: Basic. - 🔒 Accesso governato solo dai privilegi (breaking):
pgarachne.allowed_schemas()è stata rimossa.capabilities()(e quindi MCPtools/liste l’export OpenAPI) elenca ogni funzionejsonbche il chiamante può eseguire e del cui schema può fare uso. RevocateEXECUTE/USAGEdove non desiderato; vedere la pagina Sicurezza. - ⚠️ Altre modifiche incompatibili:
save_idempotency_keyora accetta un ambito per ruolo (riapplicaresql/schema.sqlprima di aggiornare il binario),universal_update/universal_deleterifiutano filtri vuoti a meno che non sia passato"all": true, euniversal_readaccetta inselectsolo*o semplici nomi di colonna (chiude una falla di SQL injection). - 🐛 Correzioni: deadlock SSE alla riconnessione del listener, login lenti o con password errata che bloccavano altre richieste, rendering degli argomenti in MCP
prompts/get, un commento di funzione malformato che rompevacapabilities, risultati «falsy» mostrati come errori nell’Explorer e un XSS nella vista dei risultati dell’Explorer. - 📚 Documentazione: nuovo
llms-full.txt, scheda GitHub Sponsors, tooltip sulle icone della barra di navigazione; questa pagina ora elenca anche v2.0.3 e v2.1.0.
v2.1.0
- 📄 Esportazione OpenAPI per metodo:
generate_openapi_spec()ora genera anche un percorso di sola documentazione per ogni metodo esposto, per gli strumenti che si aspettano un’operazione per percorso (Swagger UI, Postman, generatori di codice). Un nuovo endpointopenapi.yamlrestituisce la stessa specifica in formato YAML. - 🔒 Esportazione OpenAPI autenticata e filtrata per ruolo:
/openapi.jsonora richiede la stessa autenticazione di/jsonrpced elenca solo i metodi che il ruolo del chiamante può eseguire — in precedenza l’endpoint non era autenticato ed elencava tutti i metodi a chiunque. - 🔌 Aggiornamento del protocollo MCP: l’endpoint MCP ora parla esclusivamente la versione di protocollo
2026-07-28; il vecchio handshakeinitialize/pingnon è più supportato. ConsultaAGENTS.mdper il riferimento completo. - 🐛 Correzione del pool di connessioni: i pool di connessione per l’autenticazione diretta (Basic Auth) vengono ora correttamente rimossi quando inattivi, risolvendo un problema per cui la normale rotazione delle password poteva col tempo bloccare l’accesso con le nuove credenziali.
- 📦 Aggiornamento delle dipendenze e della CI: normale aggiornamento delle dipendenze Go (ora richiede Go 1.26) e relativi aggiornamenti degli strumenti CI.
v2.0.3
- 🔒 Rafforzamento della sicurezza: il cambio di ruolo non costruisce più SQL tramite concatenazione di stringhe (usa invece la funzione parametrizzata
set_config()), la distribuzione dei file statici ora risolve i percorsi tramiteos.Rootin modo che un symlink non possa uscire dalla directory servita, permessi più rigidi per i file di log/PID e una validazione più severa dei link ai risultati di ricerca del sito di documentazione. - 🚀 Nuova pagina Quick Start (tutte le 10 lingue): un percorso rapido dall’installazione a un endpoint funzionante, senza la deviazione completa per Installazione/Configurazione.
- 📄 Individuabilità di
llms.txt: collegato dalla homepage, dalla pagina MCP, dal README e dall’intestazione di ogni pagina, così i crawler LLM possono trovarlo. - 🐛 Correzioni: il toggle del menu mobile ora mostra correttamente un pulsante Home funzionante sugli schermi larghi, i link della pagina 404 personalizzata ora si risolvono correttamente indipendentemente dalla profondità dell’URL, e il menu mobile ha ottenuto una voce «Home».
v2.0.2
- 🔒 Rafforzamento della sicurezza: Risolti diversi rilievi dell’analisi statica — le chiavi della cache del pool di autenticazione diretta usano ora HMAC (invece di un semplice SHA-256), un controllo di contenimento esplicito per la distribuzione dei file statici, l’escaping HTML del testo di stato di login dello SSE Tester, una allowlist degli schemi URL per i link ai risultati di ricerca del sito di documentazione, e permessi a privilegio minimo nel workflow CI.
- 📦 Aggiornamento delle dipendenze: Aggiornate tutte le dipendenze Go, tra cui
gin-gonic/ginalla v1.12.0 elib/pqalla v1.12.3 (ora richiede Go 1.25). - 🌐 3 nuove lingue: Il sito di documentazione è ora disponibile anche in polacco, ucraino e greco — 10 lingue in totale.
v2.0.1
- 🔒 Correzione di sicurezza: Aggiornata la dipendenza transitiva HTTP/3
quic-goalla v0.59.1, chiudendo una vulnerabilità di espansione dei trailer QPACK che poteva consentire a un peer malevolo di esaurire la memoria del server o del client. - 🎨 Miglioramenti al sito della documentazione: Nuovo selettore di tema chiaro/scuro/automatico e selettore di lingua solo a icone, link a icona GitHub/Supporto nella barra di navigazione, corretti i dati strutturati JSON-LD codificati due volte, e un
llms.txtampliato.
v2.0.0
- 🔒 Valori predefiniti sicuri (con modifiche incompatibili):
DB_SSLMODEora èrequiredi default,ALLOWED_ORIGINSnon è più*di default eJWT_SECRETdeve avere almeno 32 byte. I deployment esistenti devono rivedere la configurazione prima dell’aggiornamento. - 🧹 Pulizia del codice legacy: Rimossi i percorsi di reindirizzamento
/api/…e/sse/…e l’alias JSON-RPC deprecatologin. Usa direttamente/{prefix}/:database/…eget_jwt. - 🛡️ Autenticazione e gestione errori più rigorose: Un nuovo limite di login per IP (
LOGIN_RATE_LIMIT_PER_IP) chiude una falla di credential spraying, e gli errori degli strumenti MCP non espongono più il testo grezzo degli errori PostgreSQL per default (riattivabile conMCP_SQL_ERROR_DETAIL). - ⚙️ Limiti di connessione configurabili: Il limite del pool di connessioni per l’autenticazione diretta è ora configurabile tramite
DIRECT_POOL_LIMIT. - 🔑 Supporto per IdP esterni (BYO JWT): Le nuove impostazioni
JWT_ISSUER,JWT_AUDIENCEeJWT_LEEWAYassociano i token emessi a un emittente/pubblico specifico e permettono di regolare la tolleranza di sfasamento orario. - 🧰 Nuovi strumenti: Un JWT Getter (
/tools/get-jwt) e un SSE Tester (/tools/test-sse) autonomi si uniscono all’Explorer per test manuali rapidi. - 🐛 Correzioni di stabilità: Risolto un blocco nello spegnimento SSE e un bug nel ripristino delle connessioni morte che poteva impedire al server di riconnettersi a PostgreSQL.
- 🧪 Rafforzamento della CI: Aggiunti
golangci-lint, il race detector di Go egovulnchecka ogni build, oltre a una maggiore copertura dei test. - 📦 Processo di rilascio: Aggiunto
CHANGELOG.mde suddiviso il flusso di rilascio inmake release-local(build e verifica) emake release(tag, pubblicazione, aggiornamento del tap Homebrew).
v1.3.0
- 🌐 PgArachne Explorer – PWA moderno: Completo rinnovamento visivo e funzionale – tema scuro/chiaro (automatico), layout a schede responsive, evidenziazione della sintassi JSON, pulsante copia negli appunti, migliore UX di autenticazione (schede password/token), supporto all’installazione PWA (manifest, icone, service worker), link condivisibili tramite parametro
?url=…. - 🛠️ Supporto Model Context Protocol (MCP): Nuovo endpoint
/{prefix}/{db}/mcpcon i metodi standardresources/list,resources/read,prompts/list,prompts/get– interamente supportato da funzioni PostgreSQL e che riutilizza l’autenticazione e il cambio di ruolo esistenti. - 🔧 Prefisso API configurabile: Il valore predefinito è stato modificato in
/db/{database}/jsonrpce/db/{database}/sse, i vecchi percorsi/api/…e/sse/…restano disponibili come redirect 307 per compatibilità. Controllato tramite la variabile d’ambienteAPI_PREFIX. - 🛡️ Protezione idempotenza: Campo opzionale
idempotencyKeynelle richieste JSON-RPC – rilevamento automatico dei duplicati (HTTP 409 + codice errore in caso di collisione) utilizzandopgarachne.save_idempotency_key(). - 📚 Miglioramenti alla documentazione: Nuova sezione /tools/ con schede (Explorer + prossima barra degli strumenti per macOS), nuova pagina “Architectural Decisions”, SECURITY.md con istruzioni per la segnalazione di vulnerabilità, migliore tipografia in tutte le lingue tramite TypoLima, supporto migliorato per la pagina 404 per GitHub Pages.
- 📝 Rinominato metodo di accesso: Il metodo JSON-RPC
loginè stato rinominato inget_jwt(il vecchio nome rimane come alias deprecato con avviso nei log). - 📊 Pulizia della registrazione (logging): Quando si registra su file, la console mostra solo informazioni minime di avvio → output più pulito in ambienti di produzione/docker.
v1.2.0
- 🛡️ Sicurezza: La validazione dei token di accesso avviene prima di stabilire una connessione al database. Migliorata la protezione contro l’IP spoofing (aggiunta l’impostazione
TRUSTED_PROXIES) e mascheramento degli errori interni del database per l’utente finale. - 📊 Metriche isolate: L’endpoint Prometheus
/metricsè stato spostato dall’API pubblica a una porta sicura dedicata (di default disponibile solo su127.0.0.1:9090). - 📦 Nuova opzione di installazione: Il progetto ora ha un tap Homebrew ufficiale per macOS e Linux. Le build sono firmate e generate tramite GoReleaser.
- 📚 Documentazione riprogettata: Look completamente nuovo basato sul framework Hugo. Aggiunta una ricerca full-text ultra rapida, la possibilità di copiare il codice e resi disponibili esempi di deployment in produzione (Nginx hardening, BYO JWT).
- ⚙️ Gestione del demone migliorata: Aggiunto il supporto per la configurazione personalizzata del percorso
PID_FILE.
v1.1.0
- 🔌 API unificata: Chiamate tramite
POST /api/<db>(il metodo chiamato è specificato nel corpo JSON-RPC). - ⚡ Notifiche in tempo reale: Nuovo endpoint
GET /sse/<db>?channels=...per l’ascolto di eventi del database con supporto multicanale. - 📈 Osservabilità: Metriche Prometheus dettagliate per HTTP, auth, JSON-RPC e SSE.
- 🏋️ Importanti miglioramenti della stabilità: Protezione contro client lenti, timeout rigorosi e pulizia automatica delle connessioni.