- Escape index type, algorithm and length in table structure (XSS)
- Escape event schedule and non-numeric table status values (XSS)
- Fix translations containing an apostrophe in single language versions
- Escape < in strings printed to JavaScript, a name containing <!--<script> broke the page
- Login: Disallow accessing servers which accept any password (e.g. PostgreSQL with trust authentication)
- Login: Suggest the login-reverse-proxy plugin when throttling logins of a proxied request
- Select: Disallow modifying data by the SQL operator (CSRF)
- Check for a new version even without JavaScript
- Fix JavaScript in Safari < 11 and Firefox < 52 (regression from 5.5.0)
- Fix showing and hiding elements in Chrome < 61 and Edge < 17 (regression from 5.1.0)
- Send the JSON responses of AJAX requests as application/json instead of text/javascript
- Sort languages by their translated name
- Fix the copy to clipboard icon not displayed on Apple systems
- Close the menu on small screens by Esc
- Drop compatibility with IIS 5 and with IIS 7.0 before its 2008 FastCGI update
- Shorten URLs by escaping only the necessary characters, e.g.
where[0][col]instead ofwhere%5B0%5D%5Bcol%5D - Send GET forms by JavaScript to shorten their URLs too
- Tables overview: speed up, show totals in SQLite, real size in MS SQL, Oracle
- Table structure: Shorten long checks and generated columns
- SQL command: Show column type in result table header
- SQL command: Show number of rows in all drivers
- SQL command: Export result to CSV by JavaScript without re-running the query (bug #1108, SF-760)
- SQL command: Rollback an unfinished transaction so that it doesn't break the following queries
- Alter table: Add next column without page reload
- Alter table: Do not highlight other move handles while dragging a column
- Alter table: Move columns on touch screens
- Alter table: Edit multiline column comments in a textarea
- Alter table, Privileges: Do not print a success message if nothing was changed
- Alter table, Select: Warn if the number of fields can exceed max_input_vars
- Alter view, routine and type: Use a transaction instead of a temporary object in PostgreSQL, SQLite, MS SQL
- Alter routine: Fix altering a routine with a name longer than 42 characters
- Select: Remove asking for the page number after clicking the Page legend
- Select: Highlight the current page in the pagination
- Select: Fix the number of selected rows after going back in history
- Select: Keep sorting by an aggregation function in the Sort fieldset
- Select: Show the edit link before the row checkbox and align the column to the right
- Select: Move the Modify link to the Modify fieldset, disable Save until a value is modified
- Select: Disable inline edit of binary values
- Select: Clear the search field and its column by Esc in Firefox
- Select: Import CSV in all drivers, not only in those with their own way to insert or update a row
- Select: Fix Load more data in drivers paginating by a cursor (Redis, SimpleDB)
- Select: Prefill New item with the values of all columns searched by equality, not only foreign keys
- Edit: Keep values of columns with special characters in name after error
- Edit: Fix switching function to SQL with the edit-foreign plugin (bug #1254)
- Edit: Hide the value field for functions without arguments (e.g. now, uuid)
- Edit: Fix editing rows with binary columns in tables without a unique key
- Edit: Disable Save and continue edit after changing a value identifying the row
- Select, Edit: Highlight JSON by a dedicated highlighter instead of the JavaScript one
- Export: Fix the TAR archive of multiple tables in CSV, it contained SQL of views and foreign keys
- Export: Export data in all drivers, not only in those able to run the generated SELECT
- Export: Fix importing a dump with data only, the tables were truncated one by one and their foreign keys were re-created
- MySQL: Do not use SSL if the login-ssl plugin is configured only for other drivers
- MySQL: Cache the list of databases only if getting it is slow
- MySQL: Link performance_schema and sys tables to their documentation
- MySQL: Fix length of routine parameters with unsigned or zerofill, support MySQL < 8 again (bug #1312, regression from 5.4.4)
- MySQL: Fix a warning on the Create table page with the PDO extension
- PostgreSQL: Support operator classes in indexes
- PostgreSQL: Do not show functions and types created by extensions
- PostgreSQL: Create routines with a dollar quoted body so that it is not escaped
- PostgreSQL: Fix altering functions with parameters of array or user-defined types
- PostgreSQL: Hide table actions and row editing in pg_catalog and pg_toast
- PostgreSQL: Support range types (bug #1308)
- PostgreSQL: Show composite, domain and range types next to enums
- PostgreSQL: Alter and rename user defined types
- PostgreSQL: Add values to an enum type without re-creating it
- PostgreSQL: Export all user defined types, fix exporting enum values containing an apostrophe
- PostgreSQL: Drop all tables at once in export so that foreign keys, views and types don't prevent the drop
- PostgreSQL: Drop the selected tables at once so that foreign keys don't prevent the drop
- PostgreSQL: Export materialized views with their indexes, they were exported as plain views
- PostgreSQL: Import CSV by INSERT ... ON CONFLICT instead of two queries for each row
- PostgreSQL: Show, alter and export Auto Increment, only sequences with an unusual name were exported
- PostgreSQL PDO: Fix the number of affected rows in COPY ... FROM stdin
- PostgreSQL, MS SQL: Show two columns in select COUNT(*), COUNT(DISTINCT id)
- PostgreSQL, MS SQL: Highlight primary keys in the database schema (regression from 5.1.0)
- CockroachDB: Do not offer deferrable foreign keys, they are not supported
- SQLite: Fix working with binary data through PDO
- MS SQL: Treat binary fields as blob (bug SF-369)
- MS SQL: Hide table actions and row editing in the sys schema
- MS SQL: Fix cloning and inserting a row with an identity column, the form offered the original value
- MS SQL: Fix error on the databases overview if a database has no collation
- Elasticsearch, ClickHouse: Use default port
- Elasticsearch: The driver is no longer beta, it works with Elasticsearch 7, 8 and 9
- ClickHouse: Fix nullable columns, fix default values, show server version
- ClickHouse: Support schema management, introspection and administration
- MongoDB: Authenticate against the database used in login
- MongoDB: Do not treat the string NULL as the NULL value
- MongoDB: Show the primary key column when altering indexes (regression from 5.4.0)
- Redis: SQL command in the redis-cli syntax, print executed commands
- Redis: Print binary keys and values in the redis-cli syntax
- Redis: Display the type of keys
- SimpleDB: Use default server
- CSS: Improve contrast of query time and dark mode
- CSS: Display the repeated links and row checkboxes outside the table, designs/adminer-border keeps them inside
- Editor: Display all images recognized by PHP, set their size, load them lazily
- Editor: Fix a fatal error in select with an empty foreign key value (regression from 5.1.1)
- Editor: Don't offer an empty option in a select of a not null foreign key, saving it failed in the database
- Designs: Show version of Adminer next to a used design not matching this version
- Plugins: dumpData() gets the parts of the select instead of a query, it selects the rows by Driver::select()
- Plugins: Methods importPrint() and importProcess()
- Plugins: Method verifyVersion()
- Plugins: Methods commentValue() and commentInput() (bug #1233)
- Plugins: Show driver plugins in the list of loaded plugins
- Plugins: Show version of Adminer next to plugins not matching this version
- Plugins: Remove edit-calendar, tinymce, json-column, pretty-json-column, translation, email-table, dump-php, master-slave
- Plugins: Do not fail with a fatal error when a plugin is not an object (bug TimWolla/docker-adminer#211)
- Plugins: Fix missing translations in the compiled version
- Driver plugins: Do not bundle the syntax highlighter of igdb and simpledb, load it from adminer-plugins/jush-<driver>.js
- Plugin login-ip: Allow localhost by default, require the request to not be proxied if X-Forwarded-For prefixes are not specified
- Plugin login-password-less: Allow the plugin password to be also the password of some server
- Plugin menu-links: Add option to show the select link and other repeated links only on hover
- New plugin: Create a table from an imported CSV file
- New plugin: Display images in select, same as in Adminer Editor
- New plugin: Log in only by a passkey holding the passwords
- New plugin: Warn by a red strip if Adminer or the database doesn't run on the local machine
Internal
- Register JavaScript event handlers by a data attribute instead of a script element
- Register the event handlers in functions.js instead of an inline script
- Composer: Initialize submodules on install
- Remove the Makefile, Composer scripts cover compiling and cleaning
- Move documentation to docs/, linter configuration to conf/, coverage.php to tests/
- Add docs/versions.php measuring the size of all releases
- Coding style: Wrap lines to 200 characters
- Cache PHP_CodeSniffer results in the system temp directory
- PHPStan: Check the Editor, more checks which the code already passes
- Add type declarations to all drivers and the Editor
- Use named constants instead of their values
- Compile: Exit if a replacement doesn't match
- Compile: Fix compiling a driver without support for the SQL command
- Compile: Compress translations with the English translation as a dictionary, it saves 21 kB
- Require ES6 in JavaScript, remove old browser workarounds
- Use standard JSDoc @param and @return syntax
- ESLint: Install it by composer install, run it in composer check and CI
- ESLint: Check also the jush modules compiled into the single file
- Docs: Handling of values and binary data, plugin translations, CSS changes must not break skins
- Rename the Git master branch to main
- Run the command line tests by composer test and in CI
- Convert the end-to-end tests from Katalon Recorder to Playwright, run them headless by composer e2e
- Fix the code coverage reporting all files as fully covered when OPcache is enabled