xrowextract (Export and import): release notes
Read this page before you install or update xrowextract, or to find out which release brought a change.
What each release of xrowextract contains, assembled from its commits. Each line links its commit. Version bumps, merge commits and funding or package metadata that deliver nothing to a user are counted, not listed. The extension is described on its feature page; the story is in the chronicle.
v2.5.6 (2026-10-02)
Updated
- The commands start through the shared command helpers (
8de6d30)
1 version, merge or metadata commit not listed.
v2.5.5 (2026-10-02)
Updated
- The commands and cronjob parts list a description of what they do (
964e0c6) - The commands and cronjob parts list a description of what they do (
72ba301) - The command line scripts, cronjob parts and module views are classes the files call (
0c31776)
1 version, merge or metadata commit not listed.
v2.5.4 (2026-09-30)
Added
- One check of what the extension needs from PHP and the server (
512b158)
Updated
- Each page names the features this server cannot offer there, and what they miss (
3d2fd40) - Fixed: Viewing an empty XML file of a package no longer ends in a fatal error (
b4089a5) - Fixed: A schedule with text that is not UTF-8 is refused instead of saved with an empty definition (
c84914b) - Fixed: A job whose error text is not UTF-8 no longer disappears from the Jobs page (
2e9df8b) - Fixed: A scheduled import deleted from the Jobs page while it runs ends its runner with a message (
7696495) - Fixed: The manifest of an export whose class no longer exists is written instead of a fatal error (
73967e4) - Fixed: Scanning the host keys of an SFTP destination without the OpenSSH client reports it instead of failing the page (
a7932b0) - Fixed: The Destinations page lists a destination of an unknown type instead of failing (
85d4091) - Fixed: Word counts and plain text of a text that is not valid UTF-8 are exported instead of failing (
1a6325c) - Fixed: A saved preset with text that is not valid UTF-8 is no longer stored empty (
6ba8f4c) - Fixed: A CSV download with its manifest sends the file alone when the zip cannot be written (
e04d6fb) - Translations of the refused non-UTF-8 schedule and destination values, with German (
7fc3c48) - Fixed: A csv.ini handler class that is not there is logged and left out instead of ending the export (
e569ab6) - Type declarations in the import and upload classes and views (
2dc619d) - Type declarations in the package classes and views (
e495652) - Type declarations in the job, archive, manifest, history and preset classes and views (
04c5e0f) - Type declarations in the schedule, destination, transport, notifier and secrets classes (
a33556c) - Type declarations in the CSV export, filter, column and datatype handler classes (
fbb0768) - The stray doc comment of uniquePackageName() sits on that method again (
4eadf78) - PHPStan checks every parameter, return and property type (level 6 in full) (
1362b4a) - bin/check.sh runs the requirements check (
0db904f) - The job, archive, manifest and history code passes PHPStan level 8 (
109fecf) - The import, upload and package classes and views pass PHPStan level 8 (
9709db3) - The schedule, destination, notification and transport code passes PHPStan level 8 (
9d81aab) - The CSV export, catalogue, column, schema and datatype handler code passes PHPStan level 8 (
9e2b670) - PHPStan runs at level 8 (
7c2bd9f) - README describes the requirements check, the req part of bin/check.sh and PHPStan level 8 (
9c79e44) - CHANGELOG for 2.5.4 (
00ada27)
1 version, merge or metadata commit not listed.
v2.5.3 (2026-09-30)
Added
- Export handlers for date and time, time, keywords, tags and object relation (
1cb7203) - A spreadsheet preview of the export, before downloading it (
7f8f503) - A site archive: every class below the chosen nodes in one ZIP or TAR file, one CSV per class (
e23b382) - A whole site scope for the single class export: every object of a class in one CSV (
359275b) - Command line exports: ext:xrowextract:csv and ext:xrowextract:archive (
e96fc89) - Password hash and hash type columns for users allowed to export them (
2f57557) - Content languages for the single class export: counts, all or some, one row per translation (
1f3cb82) - A column catalogue: attribute formats, grouped special columns, column sets, and an xrowmetadata handler (
b0787c7) - Languages and column choices for the site archive, true translations only, and JSON/XML writers (
bf68196) - JSON and XML output, a Sites set for the archive, and smarter defaults for the single class view (
f861e7e) - The other direction of xrowextract exports, a CSV/JSON importer (
e2df53d) - An Import tab: upload, column mapping, dry run and apply (
50ebee0) - German and English strings for the import view (
dbc35a1) - A background job runner for large CSV and archive exports (
739e11b) - A "Run in the background" button and a Jobs page (
b67610e) - A Jobs tab, job cards and live progress in the same xe- design (
fd7bf82) - German and English strings for the background jobs feature (
f816571) - Filters and a sort order for the exports: dates, section, state, visibility, name, attribute conditions (
b42702a) - XML as a first-class import format, a one-click sample, and a complete file format reference (
f2c8a9d) - German and English strings for XML, the sample and the reference (
e82acf2) - xrowextract/package supports content packages (.ezpkg) (
0eabe54) - A command line for content packages, ext:xrowextract:package (
36b078b) - German, English and untranslated strings for content packages (
c8e3912) - Two more registered extended attribute filters, and a chain point in the language filter (
600661c) - fetchalias.ini named fetches usable from the CSV export (
2b5601e) - Several conditions joined with and/or, kernel-level object/tree fields, an exact depth below the node, a second sort, and applying an extended filter or a named fetch (
f7ee687) - Chunked upload of any size, with resume and per-user isolation (
4363309) - Saved export presets, more powerful than a fetchalias.ini named fetch alone (
2aab54a) - Every extract view keeps its place when a button reloads the page (
083930a) - The import CLI streams any file size and can run as a background job (
f3fe4e4) - A large import queues as a background job and reports its size and resume point (
e31e3fc) - Chunked upload progress, a queued-job notice and a resume control on the import page (
d3330be) - German and English strings for chunked upload, queuing and job resume (
7fee4ff) - Direct .ezpkg/class-XML/object-XML upload, inspection and install on xrowextract/import (
476313b) - Background job support for large content-package imports (
e989da5) - Translations for the content-package upload and reference strings (
374f381) - Sample and template content packages built read-only from existing content, and a richer package dry run (
c4ee1ce) - Streaming a built package or a single class/object XML as a download (
2e8a4ec) - German/English/untranslated strings for the content-package Import format (
7ff7081) - German/English/untranslated strings for the File card tiles, complete (
67ae0ab) - German/English/untranslated strings for the File card's per-tile aria-labels (
623a468) - Export as package from One class and Site archive (#27 part 2, item 1) (
b4fed49) - German/English/untranslated strings for Export as package (
4a72680) - --keep for --export, and ext:xrowextract:package --clean (
cd6ea87) - A package install shows its real progress and its log live on the Jobs page (
cb38789) - A queued or running job can be cancelled from the Jobs page (
5650b8a) - A typed column manifest for every export, which the importer uses to map columns exactly (
2a9b595) - Scheduled exports and imports, delivery destinations and the export history (
5d3505d) - Scheduled exports and imports, destinations, run history and typed column manifests (
03f04dd) - The package contents browser (#26) (
1c15085) - The package contents browser: every file of a package, paged, filtered and viewable (
f2f6bae) - A 30+ preset catalogue and a Content package (.ezpkg) export format (
2b9f14f) - The preset catalogue by audience and the Content package (.ezpkg) export format (
67a27e4) - A datatype check, object filters and a compare view for content packages (
4f26a96) - An install history of content packages, and "Export these again" (
c909895) - "Open in Import" for a repository package, and package --export with filters or a preset (
7262c1f) - English and German texts for the package filters, datatype check, compare and install history (
460e277) - Package filters, compare, install history, datatype check, Open in Import and export with filters (
240d0de)
Updated
- Fixed: Every CSV row has the header's columns, the special columns export again, and the export honours read access (
8302029) - The CSV view's settings are three cards, and the sidebar explains the tool (
e37f2fd) - Fixed: The in-place preview has every column on every server (
8fd0744) - The column list is part of the Columns card, and the class list counts the objects of every class (
17b8bf0) - Fixed: The site archive downloads whole on servers that end a request by throwing (
2a8a10d) - The single class view names the datatype and meta information of every column (
62521c3) - Three scopes for the single class export, a readable datatype list, and the node is remembered (
9bbaf3b) - Fixed: Adding a column set, a column or all attributes shows what was added (
261d094) - Fixed: The single class view no longer keeps a node and class saved under the old defaults (
fb426d1) - Fixed: Node links in the export views open the node (
88dba09) - The single class view's sidebar follows the view, and the translations are whole again (
360fd64) - The import view offers its options before an upload, a template per class, and its own sidebar (
f3d116e) - Fixed: Choosing the parent for imported objects opens the content tree (
04ddab3) - The Jobs page shows who started each job as a linked user bubble, and its queued, started and ended times as a timeline (
c3cb542) - The Jobs page shows its totals as tiles: total, completed, running, queued and failed (
fd9a536) - Fixed: The import page fits the window again on desktop and mobile (
7922536) - Fixed: A long language name no longer runs into the parent field on the import page (
e2691e0) - Import links to the package template, tabs show Package (
3de6839) - The import preview says which class the rows go into, where, in which language, and names every object (
3fb29d0) - Try a sample works with any class, and the reference's XML section starts closed and remembers its state (
1728690) - Fixed: The package template builder no longer publishes on the public site (
35cb61f) - Fixed: The XML reference text no longer turns its tag names into page markup (
f241dfa) - Fixed: The file format reference's sections other than XML start open again (
1b84fae) - Fixed: The import preview's class summary uses no foreachelse, which the template engine does not know (
e3f34e6) - Fixed: The import and package pages no longer log "Datatype not found" errors (
4b676f8) - Fixed: Two strings added by both merged branches appear once in the translations (
f54defe) - XML, CSV and JSON import stream a row at a time instead of loading the whole file (
0b73582) - Fixed: After a reload the highlight lands on the block that was being worked in, and is clearly visible (
592ad66) - Fixed: xrowextract/package uploads a package into the wrong repository (
0570a5b) - Fixed: --alias-param and --param keep every occurrence, and a node that never resolved no longer fetches silently (
f9e0732) - Fixed: A package archive is accepted only when every entry is a plain file or folder (
3397d58) - The import page shows content packages where one looks first (
ed22981) - The Presets card explains itself, and a loaded preset (or one setting of it) can be unloaded (
b0b7d7a) - Fixed: The One class page fits a phone again with the Presets card and its More menu open (
fb189ec) - Fixed: A preset's node placeholder sets the start node of the named fetch it extends, and every file type on the import page links to its reference (
7acfe07) - Content packages are a fourth Import page format, just like XML/CSV/JSON (
4b53247) - The Import page's File/template cards show the content-package format the same way as XML/CSV/JSON (
63be546) - Fixed: The package-template scratch-content warning ignored the class actually chosen (
5281309) - The File card is one format chooser, pass 1 of the redesign (
e2d0600) - File card pass 2 - one class choice, shorter text, no clipped shapes, aligned buttons (
5b9a256) - File card pass 3 - focus and aria, keep-place lands on the tile, sample state (
83e497e) - Fixed: Try a sample never registers in the package repository (
1a4adb8) - Fixed: The package template builder's sample image and file are accepted by the importer (
dffec42) - Fixed: A package sample's update row loses its old -> new diff on Velocity (
9fdda6d) - Fixed: Uploading a package on the Package tab no longer fails with an error page, and is checked like any other upload (
1653227) - Fixed: An uploaded package is opened by its absolute path (
d25575f) - Fixed: Package upload and download work on Velocity, exported packages can be imported again, and the Package tab builds templates from existing content (
4325145) - Fixed: Package uploads work on Velocity without touching its file layer (
73977e7) - Installing a package runs as a background job instead of holding the page (
79b3c0a) - The Jobs page reads a job's own progress bar and shows its log without colour codes (
02e5817) - Fixed: A long job log shows its start and its end, without a line cut in two (
8f72ce6) - A job log keeps a short progress timeline instead of dropping every progress line (
eb8b512) - The Package tab's upload goes through chunks, and renames a bad name (
3691329) - A job log's progress timeline has no blank lines between its entries (
716e9c6) - The Import page's package Apply also queues a background job (
aede1d6) - A package loaded on the import page gets its own review step instead of the row file steps (
c71befd) - Fixed: A package install job shows its whole log, what it installed, and one date format (
87330b9) - Fixed: The package install button says "1 change" for one, and a package's dry run has no rich text note (
e6143ee) - A package job says how many items were created and how many already existed, and what was done with them (
d587107) - German for the Jobs page's "What was installed" (
d9a083b) - German, English and untranslated strings for the Schedules tab, the manifest and the package pages (
64d3bb9) - Fixed: The Package tab opens a large package in a fraction of a second, a page of its objects at a time (
649c179) - Fixed: A package file opened directly cannot run script under the admin's origin (
3f4bfb6) - Fixed: The multi class export no longer offers a content package as the format of its files (
0ad2603) - Fixed: A content package download that matches nothing says so next to the buttons (
7023414) - The sidebars of the one and multi class exports describe the page as it is (
fd5a9e6) - Fixed: A package class's attributes are read with their own datatype (
17a44bd) - Fixed: A cached package dry run is written where PHP-FPM can reuse it (
9b33299) - Fixed: The Package tab links an existing object by its node, and wide tables scroll (
c4915db) - The Package, Import and Jobs sidebars follow their cards, and the package reference covers the new tools (
605a3a1) - Fixed: The compare and contents browser pages escape a package name from the address (
ce96a85) - The top menu tab and its tooltip have German translations (
cb19a0c) - The XML import reads elements through DOMElement (
cc45957) - Fixed: A delivery to a destination of an unknown type reports no attempt (
429d931) - Fixed: package --export with no usable node id ends with a message (
8f23e2c) - Fixed: A scheduled import from a destination of an unknown type fails with a message (
dd2bd25) - Fixed: An unreadable zip entry or a failed list query no longer ends in PHP errors (
c68ae20) - Fixed: A file that cannot be opened ends a transfer or an archive with a message (
021c7c1) - Fixed: A secret that is not UTF-8 is refused instead of stored empty (
3110c02) - Fixed: A webhook is sent even when the run's text is not UTF-8 (
67298dd) - Fixed: An imported file URL must be of this site's own scheme, host and port (
82adc19) - Fixed: A history row keeps its lists when a text in them is not UTF-8 (
baceff3) - Fixed: import refuses an unknown --match, --language, --resume-from or --parent (
a889ef6) - Fixed: package --install --dry-run checks --object-mode and --class-mode too (
4190997) - Fixed: destination --config, --secret-env and --secret-file refuse a value without key= (
8197d58) - Fixed: A background job whose runner dies is marked failed, not left running (
b10b6bd) - Fixed: Caches that belong to one request no longer outlive it under Velocity (
db2c48d) - Fixed: A PHP error in an export, transfer or import row is handled like an exception (
e814e08) - Fixed: A disabled proc_open(), exec() or shell_exec() is a message, not a fatal error (
6180411) - Fixed: An id from a form, an address or a command line is checked before a query (
14c00a3) - Fixed: The site archive view refuses an array posted for a single choice (
f3b018b) - Fixed: The tab row no longer redefines the Jobs view's schedule_alerts variable (
8c5b423) - README and changelog describe the manifest, schedules, destinations and history (
dc6f5d8) - PHPStan configuration with the Exponential kernel and library classes known (
7801ee8) - The command-line failure helper is declared as never returning (
be91b1c) - Translated messages with arguments pass no comment as null (
5a892e6) - Destination and schedule fetch() return their own class or null (
ae53cd3) - The curl_close() call for PHP 7 (
c042076) - Conditions that can never change the result are removed (
25118b5) - PHPStan analyses at level 5 (
b7d9163) - Fixed: Optional object and array parameters are declared nullable (
279b418) - PHPStan analyses at level 6, without requiring type declarations (
78d41ca) - A release gate, bin/check.sh, and a workflow running it on PHP 8.1 to 8.5 (
2399544) - Unit tests for the parts that need no database, run by bin/check.sh (
d5d9a5d) - An integration test of every command against a test installation (
ff624c2) - A view smoke test of every admin view in a browser (
61d6752) - A POST robustness test of every view, and log watching in the integration tests (
eb11b3c) - bin/check.sh --help shows the whole header (
48c0356) - CHANGELOG for 2.5.3 (
7abb26e)
Renamed
- The Import and Package tabs are now Import content file and Import content package (
3858c84) Upgrade note. - The extract tabs are One class of content export, Multi class of content export, Import content file, Import content package and Jobs, with Jobs last (
2adeb78) Upgrade note.
26 version, merge or metadata commits not listed.
v2.5.2 (2026-09-28)
Updated
- Every visible text of the extension is a translation string, with German (
8b98792)
1 version, merge or metadata commit not listed.
v2.5.1 (2026-09-27)
Updated
- The CSV export form writes its line break as
, as the installed copy does (2031a58) - Fixed: The ezinfo.php declares xrowextractInfo with a static info() and states the extension's version, license and website (
7e2d0b4)
v2.5.0 (2026-09-22)
Updated
- Fixed the module views declaring functions and classes at the top level, so this extension can be served by a web server that keeps a PHP process alive across requests. (
92f6e8c)
1 version, merge or metadata commit not listed.
v2.4.2 (2024-08-22)
Updated
- PHP 8 Bugfix for ezmatrix dayatype (
431f2ea) - Bugfixes post integration into default Exponential 6 distribution to clean up main csv module code formating and export error in fetching code (
b4e5fc1)
v2.4.1 (2024-07-01)
Updated
- Settings Bugfix for hmregexpline class handler name (
222b21c)
v2.4.0 (2024-07-01)
Updated
- Mass improvments of php8 support and recent testing and refinements (
c518dac)
v2.3.2 (2024-04-02)
Updated
- Minor bugfix to prevent fatal error under php 8 (
f6de469)
v2.3.1 (2024-03-01)
Updated
- Update composer.json switched vendor on requirements (
ba8ddfa)
v2.3.0 (2024-02-28)
Updated
- Update composer.json switch package vendor (
c0d37fb)
1 version, merge or metadata commit not listed.