Neuigkeiten

7 Min. Lesezeit

Neuigkeiten

Detailliertere Informationen zu den Änderungen in den einzelnen Versionen finden Sie direkt in GitHub Releases.

v3.0.0

  • 🔑 Neuer Login-Endpunkt (Breaking): Die JSON-RPC-Methode get_jwt wird durch POST /{prefix}/{database}/token ersetzt, der PostgreSQL-Login und -Passwort als HTTP-Basic-Authentifizierung entgegennimmt — Zugangsdaten reisen nicht mehr im Request-Body, und ein Reverse-Proxy kann Logins per URL begrenzen. get_jwt auf /jsonrpc antwortet jetzt mit 404 / -32601. Migration: curl -X POST …/token -u login:password.
  • 📥 Dateidownloads: Der neue Endpunkt POST /{prefix}/{database}/file liefert Binärdateien aus mengenliefernden PostgreSQL-Funktionen — eine Zeile direkt, mehrere Zeilen als gestreamtes ZIP — mit derselben Authentifizierung, Rollenumschaltung und Ratenbegrenzung wie JSON-RPC. capabilities() meldet kind: "file". Wenden Sie sql/schema.sql erneut an (idempotent), um die neuen Felder zu erhalten.
  • 🧰 Werkzeuge: neuer JWT Signer, der Tokens lokal im Browser aus einem von Hand eingegebenen JWT_SECRET signiert (kein Netzwerkzugriff, Secret wird nie gespeichert), Screenshots und gehostete Versionen aller Werkzeuge (explorer., sse-tester., jwt-getter., jwt-signer.pgarachne.com), klickbare Karten und Querverweise. Die Ordner in tools/ heißen jetzt explorer, jwt-getter und sse-tester — passen Sie STATIC_FILES_PATH an, falls Sie sie ausliefern.
  • 🐛 Fixes und Härtung: Eine Funktion, die SQL-NULL liefert, ergibt jetzt "result": null statt HTTP 500; ZIP-Pfade in /file lehnen Windows-feindliche Namen und Kollisionen ohne Beachtung der Groß-/Kleinschreibung ab; leere Ergebnisse werden zurückgerollt.
  • 📚 Doku und Abhängigkeiten: Schritt-für-Schritt-Quick-Start, JSON-RPC-Seite als reine Referenz, die Architekturentscheidung „Warum PostgreSQL“, Reverse-Proxy-Hinweise für große Downloads und aktualisierte Go-Module (Sicherheitsupdate golang.org/x/net).

v2.2.0

  • 🔑 Optionales JWT: JWT_SECRET ist nicht mehr erforderlich. Ohne ihn ist JWT deaktiviert (get_jwt liefert 404 / -32601) und Clients nutzen HTTP-Basic-Zugangsdaten oder API-Tokens.
  • 🛡️ Rate Limiting für alle Auth-Methoden (Sicherheit): LOGIN_RATE_LIMIT gilt jetzt auch für HTTP Basic und Bearer (JWT/API-Token) an allen Endpunkten, nicht nur für get_jwt. Zuvor ließen sich Passwörter über Authorization: Basic unbegrenzt erraten.
  • 🔒 Zugriff nur über Berechtigungen (Breaking): pgarachne.allowed_schemas() wurde entfernt. capabilities() (und damit MCP tools/list und der OpenAPI-Export) listet jede jsonb-Funktion, die der Aufrufer ausführen darf und deren Schema er nutzen darf. Entziehen Sie EXECUTE/USAGE, wo das unerwünscht ist; siehe Seite Sicherheit.
  • ⚠️ Weitere Breaking Changes: save_idempotency_key erhält jetzt einen Rollen-Scope (sql/schema.sql vor dem Binary-Upgrade erneut anwenden), universal_update/universal_delete lehnen leere Filter ab, außer "all": true wird übergeben, und universal_read akzeptiert in select nur * oder einfache Spaltennamen (schließt eine SQL-Injection-Lücke).
  • 🐛 Fixes: SSE-Deadlock beim Listener-Reconnect, langsame oder fehlerhafte Logins blockierten andere Anfragen, Argument-Rendering in MCP prompts/get, ein fehlerhafter Funktionskommentar brach capabilities, „falsy“-Ergebnisse wurden im Explorer als Fehler angezeigt, und eine XSS-Lücke in der Explorer-Ergebnisansicht.
  • 📚 Doku: neue llms-full.txt, GitHub-Sponsors-Karte, Tooltips für Navbar-Icons; diese Seite listet nun auch v2.0.3 und v2.1.0.

v2.1.0

  • 📄 OpenAPI-Export pro Methode: generate_openapi_spec() erzeugt nun zusätzlich pro exponierter Methode einen rein dokumentarischen Pfad, für Tools, die einen Vorgang pro Pfad erwarten (Swagger UI, Postman, Codegenerierung). Ein neuer openapi.yaml-Endpunkt liefert dieselbe Spezifikation als YAML.
  • 🔒 Authentifizierter, rollengefilterter OpenAPI-Export: /openapi.json erfordert nun dieselbe Authentifizierung wie /jsonrpc und listet nur die Methoden auf, die die Rolle des Aufrufers ausführen darf — zuvor war der Endpunkt unauthentifiziert und listete jedem alle Methoden auf.
  • 🔌 MCP-Protokoll-Upgrade: Der MCP-Endpunkt spricht nun ausschließlich Protokollversion 2026-07-28; der alte initialize/ping-Handshake wird nicht mehr unterstützt. Siehe AGENTS.md für die vollständige Referenz.
  • 🐛 Korrektur am Connection-Pool: Direct-Auth-Connection-Pools (Basic Auth) werden nun korrekt entfernt, wenn sie inaktiv sind — dies behebt ein Problem, bei dem eine routinemäßige Passwort-Rotation letztlich neue Zugangsdaten aussperren konnte.
  • 📦 Abhängigkeits- und CI-Updates: Routinemäßige Aktualisierung der Go-Abhängigkeiten (erfordert nun Go 1.26) sowie entsprechende Aktualisierungen der CI-Tools.

v2.0.3

  • 🔒 Sicherheitshärtung: Der Rollenwechsel baut SQL nicht mehr durch String-Konkatenation zusammen (stattdessen wird die parametrisierte Funktion set_config() verwendet), das Ausliefern statischer Dateien löst Pfade nun über os.Root auf, sodass ein Symlink das ausgelieferte Verzeichnis nicht mehr verlassen kann, verschärfte Berechtigungen für Log-/PID-Dateien sowie strengere Validierung der Suchergebnis-Links der Doku-Website.
  • 🚀 Neue Schnellstart-Seite (alle 10 Sprachen): Ein schneller Weg von der Installation zu einem funktionierenden Endpunkt, ohne den vollständigen Umweg über Installation und Konfiguration.
  • 📄 llms.txt-Auffindbarkeit: Verlinkt von der Startseite, der MCP-Seite, der README und dem Header jeder Seite, damit LLM-Crawler sie finden können.
  • 🐛 Fehlerbehebungen: Der mobile Menü-Umschalter zeigt nun auf breiten Bildschirmen korrekt eine funktionierende Home-Schaltfläche an, die Links der benutzerdefinierten 404-Seite lösen nun unabhängig von der URL-Tiefe korrekt auf, und das mobile Menü hat einen „Home“-Eintrag erhalten.

v2.0.2

  • 🔒 Sicherheitsverbesserungen: Mehrere Befunde aus der statischen Analyse behoben — die Cache-Schlüssel des Direct-Auth-Pools verwenden jetzt HMAC statt eines reinen SHA-256, eine explizite Containment-Prüfung für das Ausliefern statischer Dateien, HTML-Escaping des Login-Statustexts im SSE Tester, eine URL-Schema-Allowlist für Suchergebnis-Links der Doku-Website und Least-Privilege-Berechtigungen im CI-Workflow.
  • 📦 Abhängigkeits-Updates: Alle Go-Abhängigkeiten aktualisiert, u. a. gin-gonic/gin auf v1.12.0 und lib/pq auf v1.12.3 (erfordert nun Go 1.25).
  • 🌐 3 neue Sprachen: Die Dokumentations-Website ist jetzt auch auf Polnisch, Ukrainisch und Griechisch verfügbar — insgesamt 10 Sprachen.

v2.0.1

  • 🔒 Sicherheitskorrektur: Die transitive HTTP/3-Abhängigkeit quic-go wurde auf v0.59.1 aktualisiert und schließt damit eine QPACK-Trailer-Expansionslücke, die es einem böswilligen Peer ermöglichen konnte, den Speicher von Server oder Client zu erschöpfen.
  • 🎨 Verbesserungen an der Doku-Website: Neuer Hell/Dunkel/Auto-Theme-Umschalter und ein reiner Icon-Sprachumschalter, GitHub/Support-Icon-Links in der Navigationsleiste, Behebung doppelt kodierter JSON-LD-Strukturdaten und ein erweitertes llms.txt.

v2.0.0

  • 🔒 Sichere Standardwerte (breaking): DB_SSLMODE ist nun standardmäßig require, ALLOWED_ORIGINS ist nicht mehr standardmäßig *, und JWT_SECRET muss mindestens 32 Byte lang sein. Bestehende Deployments müssen ihre Konfiguration vor dem Upgrade prüfen.
  • 🧹 Legacy-Bereinigung: Die Weiterleitungspfade /api/… und /sse/… sowie der veraltete JSON-RPC-Alias login wurden entfernt. Verwenden Sie direkt /{prefix}/:database/… und get_jwt.
  • 🛡️ Strengere Authentifizierung & Fehlerbehandlung: Ein neues Login-Rate-Limit pro IP (LOGIN_RATE_LIMIT_PER_IP) schließt eine Lücke für Credential-Spraying, und MCP-Tool-Fehler geben standardmäßig keine rohen PostgreSQL-Fehlermeldungen mehr weiter (mit MCP_SQL_ERROR_DETAIL wieder aktivierbar).
  • ⚙️ Konfigurierbare Verbindungslimits: Das Limit für den Direct-Auth-Verbindungspool ist nun über DIRECT_POOL_LIMIT konfigurierbar.
  • 🔑 Unterstützung externer IdPs (BYO JWT): Neue Einstellungen JWT_ISSUER, JWT_AUDIENCE und JWT_LEEWAY binden ausgestellte Token an einen bestimmten Aussteller/Zielgruppe und ermöglichen eine anpassbare Uhr-Toleranz.
  • 🧰 Neue Tools: Ein eigenständiger JWT Getter (/tools/get-jwt) und SSE Tester (/tools/test-sse) ergänzen den Explorer für schnelle manuelle Tests.
  • 🐛 Stabilitätskorrekturen: Ein blockierendes SSE-Shutdown-Problem und ein Fehler bei der Wiederherstellung toter Verbindungen wurden behoben, der den Server dauerhaft von PostgreSQL trennen konnte.
  • 🧪 CI-Härtung: golangci-lint, der Go-Race-Detector und govulncheck laufen nun bei jedem Build, zusätzlich erweiterte Testabdeckung.
  • 📦 Release-Prozess: CHANGELOG.md hinzugefügt und der Release-Workflow in make release-local (Build & Verifikation) und make release (Tag, Veröffentlichung, Aktualisierung des Homebrew-Taps) aufgeteilt.

v1.3.0

  • 🌐 PgArachne Explorer – moderne PWA: Komplette visuelle und funktionale Überarbeitung – dunkles/helles Farbschema (automatisch), responsives Kartenlayout, JSON-Syntaxhervorhebung, Kopieren-in-die-Zwischenablage-Schaltfläche, bessere Auth-Benutzerführung (Passwort/Token-Tabs), PWA-Installationsunterstützung (Manifest, Icons, Service Worker), freigebbare Links über ?url=…-Parameter.
  • 🛠️ Model Context Protocol (MCP) Unterstützung: Neuer Endpunkt /{prefix}/{db}/mcp mit Standardmethoden resources/list, resources/read, prompts/list, prompts/get – vollständig von PostgreSQL-Funktionen unterstützt und unter Wiederverwendung der bestehenden Authentifizierung & Rollenumschaltung.
  • 🔧 Konfigurierbares API-Präfix: Standard wurde auf /db/{database}/jsonrpc und /db/{database}/sse geändert, die Legacy-Pfade /api/… und /sse/… bleiben als 307-Weiterleitung für Abwärtskompatibilität erhalten. Gesteuert über die Umgebungsvariable API_PREFIX.
  • 🛡️ Idempotenzschutz: Optionales idempotencyKey-Feld in JSON-RPC-Anfragen – automatische Duplikatserkennung (HTTP 409 + Fehlercode bei Kollision) mittels pgarachne.save_idempotency_key().
  • 📚 Dokumentationsverbesserungen: Neuer /tools/-Bereich mit Karten (Explorer + kommende macOS Toolbar), neue Seite“Architectural Decisions”, SECURITY.md mit Anweisungen zur Meldung von Schwachstellen, bessere Typografie in allen Sprachen durch TypoLima, verbesserte 404-Seitenunterstützung für GitHub Pages.
  • 📝 Umbenennung der Login-Methode: JSON-RPC-Methode login umbenannt in get_jwt (alter Name bleibt als veralteter Alias mit Warnung im Log erhalten).
  • 📊 Logging-Bereinigung: Bei der Protokollierung in eine Datei zeigt die Konsole nur minimale Startinformationen an → sauberere Ausgabe in Produktions-/Docker-Umgebungen.

v1.2.0

  • 🛡️ Sicherheit: Die Validierung des Zugriffstokens erfolgt nun vor dem Herstellen einer Datenbankverbindung. Verbesserter Schutz gegen IP-Spoofing (Einstellung TRUSTED_PROXIES hinzugefügt) und Verbergen interner Datenbankfehler vor dem Endbenutzer.
  • 📊 Isolierte Metriken: Der Prometheus-Endpunkt /metrics wurde von der öffentlichen API auf einen eigenen, sicheren Port verschoben (standardmäßig nur unter 127.0.0.1:9090 verfügbar).
  • 📦 Neue Installationsmöglichkeit: Das Projekt verfügt nun über einen offiziellen Homebrew-Tap für macOS und Linux. Builds werden signiert und über GoReleaser generiert.
  • 📚 Überarbeitete Dokumentation: Komplett neues Erscheinungsbild basierend auf dem Hugo-Framework. Blitzschnelle Volltextsuche, Möglichkeit zum Kopieren von Code und Beispiele für den Produktiveinsatz (Nginx-Hardening, BYO JWT) hinzugefügt.
  • ⚙️ Verbesserte Daemon-Verwaltung: Unterstützung für die benutzerdefinierte Pfadkonfiguration der PID_FILE hinzugefügt.

v1.1.0

  • 🔌 Vereinheitlichte API: Aufrufe über POST /api/<db> (die aufgerufene Methode wird im JSON-RPC-Body angegeben).
  • ⚡ Echtzeit-Benachrichtigungen: Neuer Endpunkt GET /sse/<db>?channels=... zum Abhören von Datenbankereignissen mit Mehrkanalunterstützung.
  • 📈 Observability (Beobachtbarkeit): Detaillierte Prometheus-Metriken für HTTP, Auth, JSON-RPC und SSE.
  • 🏋️ Wesentliche Stabilitätsverbesserungen: Schutz vor langsamen Clients, strikte Timeouts und automatische Verbindungsbereinigung.