The pgAdmin Development Team is pleased to announce pgAdmin 4 version 9.18.
This release of pgAdmin 4 includes 29 bug fixes and new features. For more details please see the release notes at: https://www.pgadmin.org/docs/pgadmin4/9.18/release_notes_9_18.html pgAdmin is the leading Open Source graphical management tool for PostgreSQL. For more information, please see: https://www.pgadmin.org/ Notable changes in this release include: *Features:* * Collapse and restore the Object Explorer by re-clicking the current workspace icon, in the manner of the VS Code side bar, remembering the choice across refreshes. A keyboard shortcut, Ctrl+Alt+B by default, does the same thing. * Harden the default Content-Security-Policy: inline scripts now run under a per-request nonce rather than a blanket *'unsafe-inline'*, and *'unsafe-eval'* is dropped. *style-src* keeps *'unsafe-inline'*, because MUI and React inject runtime styles and inline *style* attributes that cannot carry a nonce. *Bugs/Housekeeping:* * Fix an authentication bypass in Webserver authentication mode, where the configured *WEBSERVER_REMOTE_USER* name was also read from the request headers, letting any client that could reach pgAdmin assert any identity, including an administrator's (*CVE-2026-86863*). A header-asserted identity is now opt-in and restricted to a configured list of trusted proxies, with an optional shared secret. * Fix argument and connection-string injection in the Backup tool via the client-supplied database name, which could override the storage-confined output path or redirect the connection to an attacker-controlled host ( *CVE-2026-86864*). * Fix connection-string injection in the Restore and Maintenance tools via the client-supplied database name, which could redirect the connection, and the stored password, to a server of the caller's choosing (*CVE-2026-86862* ). * Fix a time-of-check to time-of-use flaw in the File Manager's save endpoint, which backs saving from the Query Tool and ERD, where a symbolic link planted after the containment check was followed, writing outside the storage directory (*CVE-2026-86861*). * Refuse HTTP redirects on LLM API requests, rather than following a `Location` header on to a destination the `ALLOWED_LLM_API_URLS` check was never applied to. * Fix login being impossible against Flask-Security-Too 5.8.2, which corrected a long-standing inversion in *UserMixin.is_locked()*. * Fix inherited columns in the Table dialog being editable and deletable, and the Data type dropdown on the expanded Definition tab ignoring the allowed-type restriction. * Reinstate dependency ordering of the script Schema Diff generates, which had been lost since the React port. * Fix Schema Diff reporting false differences for SERIAL/BIGSERIAL columns, duplicating columns when recreating a foreign table, losing a foreign table column's collation, injecting whitespace into applied function and procedure bodies, and reporting a comparison that failed part way through as a success. * Reject an empty or null `Username` when importing a non-shared server, which previously imported cleanly and left a server libpq would silently authenticate as the OS account running pgAdmin. * Share concurrent identical GET requests behind *getNodeAjaxOptions()* so a wide table's Columns tab no longer fires one duplicate `get_types` request per column row. * Omit the redundant *TABLESPACE pg_default* clause from generated index SQL, which was invalid on a partitioned table. * Skip importing and initialising the Kerberos, LDAP, MFA, OAuth2 and Webserver authentication providers unless *SERVER_MODE* is set. Builds for Windows and macOS are available now, along with a Python Wheel, Docker Container, RPM, DEB Package, and source code tarball from: https://www.pgadmin.org/download/ -- Ashesh Vashi pgAdmin Project
