Nouveautés
Nouveautés
De plus amples informations sur les changements apportés à chaque version se trouvent directement sur GitHub Releases.
v3.0.0
- 🔑 Nouveau endpoint de connexion (breaking) : la méthode JSON-RPC
get_jwtest remplacée parPOST /{prefix}/{database}/token, qui prend le login et le mot de passe PostgreSQL en authentification HTTP Basic — les identifiants ne circulent plus dans le corps des requêtes et un reverse proxy peut limiter les connexions par URL.get_jwtsur/jsonrpcrépond désormais 404 /-32601. Migration :curl -X POST …/token -u login:password. - 📥 Téléchargement de fichiers : le nouvel endpoint
POST /{prefix}/{database}/filesert des fichiers binaires issus de fonctions PostgreSQL retournant des ensembles de lignes — une ligne directement, plusieurs lignes en ZIP streamé — avec la même authentification, le même changement de rôle et la même limitation de débit que JSON-RPC.capabilities()signalekind: "file". Réappliquezsql/schema.sql(idempotent) pour obtenir les nouveaux champs. - 🧰 Outils : nouveau JWT Signer, qui signe les jetons localement dans le navigateur à partir d’un
JWT_SECRETsaisi à la main (aucun accès réseau, secret jamais stocké), captures d’écran et versions hébergées de chaque outil (explorer.,sse-tester.,jwt-getter.,jwt-signer.pgarachne.com), cartes cliquables et liens croisés. Les dossiers detools/ont été renommésexplorer,jwt-getteretsse-tester— adaptezSTATIC_FILES_PATHsi vous les servez. - 🐛 Correctifs et durcissement : une fonction retournant un
NULLSQL produit désormais"result": nullau lieu d’un HTTP 500 ; les chemins ZIP de/filerejettent les noms hostiles à Windows et les collisions insensibles à la casse ; les résultats vides sont annulés (rollback). - 📚 Docs et dépendances : Quick Start pas à pas, page JSON-RPC devenue pure référence, décision d’architecture « Pourquoi PostgreSQL», conseils de reverse proxy pour les gros téléchargements et modules Go mis à jour (mise à jour de sécurité de
golang.org/x/net).
v2.2.0
- 🔑 JWT optionnel :
JWT_SECRETn’est plus obligatoire. Sans lui, JWT est désactivé (get_jwtrenvoie 404 /-32601) et les clients utilisent des identifiants HTTP Basic ou des jetons d’API. - 🛡️ Limitation du débit pour toutes les méthodes d’authentification (sécurité) :
LOGIN_RATE_LIMITcouvre désormais aussi HTTP Basic et Bearer (JWT/jeton d’API) sur tous les endpoints, et pas seulementget_jwt. Auparavant, les mots de passe pouvaient être devinés sans limite viaAuthorization: Basic. - 🔒 Accès régi uniquement par les privilèges (breaking) :
pgarachne.allowed_schemas()est supprimée.capabilities()(et donc MCPtools/listet l’export OpenAPI) liste toute fonctionjsonbque l’appelant peut exécuter et dont il peut utiliser le schéma. RévoquezEXECUTE/USAGElà où ce n’est pas souhaité ; voir la page Sécurité. - ⚠️ Autres changements incompatibles :
save_idempotency_keyprend désormais une portée par rôle (réappliquezsql/schema.sqlavant de mettre à jour le binaire),universal_update/universal_deleterefusent les filtres vides sauf si"all": trueest passé, etuniversal_readn’accepte que*ou des noms de colonnes simples dansselect(ferme une faille d’injection SQL). - 🐛 Corrections : interblocage SSE lors de la reconnexion du listener, connexions lentes ou à mot de passe erroné bloquant les autres requêtes, rendu des arguments dans MCP
prompts/get, un commentaire de fonction mal formé cassantcapabilities, résultats « falsy» affichés comme erreurs dans l’Explorer et une faille XSS dans la vue des résultats de l’Explorer. - 📚 Documentation : nouveau
llms-full.txt, carte GitHub Sponsors, info-bulles sur les icônes de la barre de navigation ; cette page liste aussi désormais v2.0.3 et v2.1.0.
v2.1.0
- 📄 Export OpenAPI par méthode :
generate_openapi_spec()émet désormais aussi un chemin (path) documentaire dédié par méthode exposée, pour les outils qui attendent une opération par chemin (Swagger UI, Postman, génération de code). Un nouveau point de terminaisonopenapi.yamlrenvoie la même spécification au format YAML. - 🔒 Export OpenAPI authentifié et filtré par rôle :
/openapi.jsonexige désormais la même authentification que/jsonrpcet ne liste que les méthodes que le rôle de l’appelant est autorisé à exécuter — auparavant, le point de terminaison n’était pas authentifié et listait toutes les méthodes à n’importe qui. - 🔌 Mise à niveau du protocole MCP : le point de terminaison MCP ne parle désormais que la version de protocole
2026-07-28; l’ancienne poignée de maininitialize/pingn’est plus prise en charge. VoirAGENTS.mdpour la référence complète. - 🐛 Correctif du pool de connexions : les pools de connexions en authentification directe (Basic Auth) sont désormais correctement évincés lorsqu’ils sont inactifs, corrigeant un problème où une rotation de mot de passe de routine pouvait finir par bloquer de nouveaux identifiants.
- 📦 Mises à jour des dépendances et de la CI : rafraîchissement de routine des dépendances Go (nécessite désormais Go 1.26) et mises à jour correspondantes de l’outillage CI.
v2.0.3
- 🔒 Renforcement de la sécurité : le changement de rôle ne construit plus de SQL par concaténation de chaînes (utilise désormais la fonction paramétrée
set_config()), le service de fichiers statiques résout désormais les chemins viaos.Rootpour empêcher un lien symbolique d’échapper au répertoire servi, renforcement des permissions des fichiers de log/PID, et validation plus stricte des liens de résultats de recherche du site de documentation. - 🚀 Nouvelle page Démarrage rapide (dans les 10 langues) : un chemin rapide de l’installation à un point de terminaison fonctionnel, sans passer par le détour complet Installation/Configuration.
- 📄 Découvrabilité de
llms.txt: lié depuis la page d’accueil, la page MCP, le README, et l’en-tête de chaque page, afin que les robots d’indexation LLM puissent le trouver. - 🐛 Corrections : le bouton du menu mobile affiche désormais correctement un bouton Accueil fonctionnel sur grand écran, les liens de la page 404 personnalisée se résolvent désormais correctement quelle que soit la profondeur de l’URL, et le menu mobile a gagné une entrée « Accueil».
v2.0.2
- 🔒 Renforcement de la sécurité : Correction de plusieurs constats d’analyse statique — les clés de cache du pool d’authentification directe utilisent désormais HMAC (au lieu d’un simple SHA-256), une vérification explicite de confinement pour le service de fichiers statiques, un échappement HTML du texte de statut de connexion du SSE Tester, une liste blanche de schémas d’URL pour les liens de résultats de recherche du site de documentation, et des permissions de moindre privilège sur le workflow CI.
- 📦 Mises à jour des dépendances : Mise à jour de toutes les dépendances Go, notamment
gin-gonic/ginvers la v1.12.0 etlib/pqvers la v1.12.3 (nécessite désormais Go 1.25). - 🌐 3 nouvelles langues : Le site de documentation est désormais disponible en polonais, ukrainien et grec — 10 langues au total.
v2.0.1
- 🔒 Correctif de sécurité : Mise à jour de la dépendance transitive HTTP/3
quic-govers la v0.59.1, comblant une vulnérabilité d’expansion des trailers QPACK qui pouvait permettre à un pair malveillant d’épuiser la mémoire du serveur ou du client. - 🎨 Améliorations du site de documentation : Nouveau sélecteur de thème clair/sombre/auto et sélecteur de langue à icônes, liens icônes GitHub/Soutien dans la barre de navigation, correction des données structurées JSON-LD doublement encodées, et un
llms.txtenrichi.
v2.0.0
- 🔒 Valeurs par défaut sécurisées (rupture de compatibilité) :
DB_SSLMODEvaut désormaisrequirepar défaut,ALLOWED_ORIGINSne vaut plus*par défaut, etJWT_SECRETdoit comporter au moins 32 octets. Les déploiements existants doivent revoir leur configuration avant la mise à jour. - 🧹 Nettoyage des éléments legacy : Suppression des routes de redirection
/api/…et/sse/…ainsi que de l’alias JSON-RPC obsolètelogin. Utilisez directement/{prefix}/:database/…etget_jwt. - 🛡️ Authentification et gestion des erreurs renforcées : Une nouvelle limite de connexion par IP (
LOGIN_RATE_LIMIT_PER_IP) comble une faille de credential spraying, et les erreurs des outils MCP ne révèlent plus le texte brut des erreurs PostgreSQL par défaut (réactivable viaMCP_SQL_ERROR_DETAIL). - ⚙️ Limites de connexion configurables : La limite du pool de connexions en authentification directe est désormais configurable via
DIRECT_POOL_LIMIT. - 🔑 Prise en charge des IdP externes (BYO JWT) : Les nouveaux paramètres
JWT_ISSUER,JWT_AUDIENCEetJWT_LEEWAYlient les jetons émis à un émetteur/public spécifique et permettent d’ajuster la tolérance de décalage d’horloge. - 🧰 Nouveaux outils : Un JWT Getter (
/tools/get-jwt) et un SSE Tester (/tools/test-sse) autonomes rejoignent l’Explorateur pour des tests manuels rapides. - 🐛 Corrections de fiabilité : Correction d’un blocage à l’arrêt du SSE et d’un bug de récupération des connexions mortes qui pouvait empêcher durablement le serveur de se reconnecter à PostgreSQL.
- 🧪 Renforcement de la CI : Ajout de
golangci-lint, du détecteur de races Go et degovulncheckà chaque build, ainsi qu’une couverture de tests étendue. - 📦 Processus de publication : Ajout de
CHANGELOG.mdet scission du workflow de publication enmake release-local(build et vérification) etmake release(tag, publication, mise à jour du tap Homebrew).
v1.3.0
- 🌐 PgArachne Explorer – PWA moderne: Refonte visuelle et fonctionnelle complète – thème sombre/clair (automatique), mise en page adaptative en cartes, coloration syntaxique JSON, bouton de copie dans le presse-papiers, meilleure UX d’authentification (onglets mot de passe/jeton), prise en charge de l’installation PWA (manifeste, icônes, service worker), liens partageables via le paramètre
?url=…. - 🛠️ Support du Model Context Protocol (MCP): Nouvel endpoint
/{prefix}/{db}/mcpavec les méthodes standardsresources/list,resources/read,prompts/list,prompts/get– entièrement pris en charge par les fonctions PostgreSQL et réutilisant l’authentification et la commutation de rôles existantes. - 🔧 Préfixe d’API configurable: La valeur par défaut a été remplacée par
/db/{database}/jsonrpcet/db/{database}/sse, les anciennes routes/api/…et/sse/…restent disponibles en tant que redirections 307 pour la compatibilité. Contrôlé par la variable d’environnementAPI_PREFIX. - 🛡️ Protection d’idempotence: Champ optionnel
idempotencyKeydans les requêtes JSON-RPC – détection automatique des doublons (HTTP 409 + code d’erreur en cas de collision) viapgarachne.save_idempotency_key(). - 📚 Améliorations de la documentation: Nouvelle section /tools/ avec des cartes (Explorateur + future barre d’outils macOS), nouvelle page “Architectural Decisions”, SECURITY.md avec instructions pour signaler les vulnérabilités, meilleure typographie dans toutes les langues grâce à TypoLima, prise en charge améliorée de la page 404 pour GitHub Pages.
- 📝 Renommage de la méthode de connexion: La méthode JSON-RPC
logina été renommée enget_jwt(l’ancien nom reste comme alias obsolète avec avertissement dans les journaux). - 📊 Nettoyage de la journalisation: Lors de la journalisation dans un fichier, la console n’affiche que des informations minimales de démarrage → sortie plus propre dans les environnements de production/docker.
v1.2.0
- 🛡️ Sécurité : La validation du token d’accès s’effectue avant d’établir une connexion à la base de données. Protection améliorée contre l’usurpation d’IP (ajout du paramètre
TRUSTED_PROXIES) et dissimulation des erreurs internes de la base de données à l’utilisateur final. - 📊 Métriques isolées : L’endpoint Prometheus
/metricsa été déplacé de l’API publique vers son propre port sécurisé (par défaut, disponible uniquement sur127.0.0.1:9090). - 📦 Nouvelle option d’installation : Le projet dispose désormais d’un tap Homebrew officiel pour macOS et Linux. Les builds sont signés et générés via GoReleaser.
- 📚 Documentation repensée : Un tout nouveau design basé sur le framework Hugo. Ajout d’une recherche plein texte ultra-rapide, de la copie de code et d’exemples de déploiement en production (Nginx hardening, BYO JWT).
- ⚙️ Gestion du démon améliorée : Ajout de la prise en charge de la configuration personnalisée du chemin
PID_FILE.
v1.1.0
- 🔌 API unifiée : Appels via
POST /api/<db>(la méthode appelée est spécifiée dans le corps JSON-RPC). - ⚡ Notifications en temps réel : Nouvel endpoint
GET /sse/<db>?channels=...pour écouter les événements de la base de données avec prise en charge multicanal. - 📈 Observabilité : Métriques Prometheus détaillées pour HTTP, auth, JSON-RPC et SSE.
- 🏋️ Amélioration majeure de la stabilité : Protection contre les clients lents, délais d’attente stricts et nettoyage automatique des connexions.