Releases: liferay/liferay-environment-composer
v0.10.0
Highlights
- Shared DB credentials —
liferay/Liferay123across MySQL, MariaDB, PostgreSQL, SQL Server, and DB2. - Elasticsearch 7 + 8 — ES8 default (
8.19.12); uncomment the ES7 line ingradle.propertiesto switch. - Service versions in
gradle.properties—lr.docker.environment.service.version[<service>]replacesversions.env.
Changed
- Default DB user is now
liferay/Liferay123. Override withlr.docker.environment.database.{username,password}. (LPD-86437, LPD-86435) - Service versions moved from
versions.envtogradle.properties. (LPD-89887) - Glowroot is now opt-in. (LPD-90356)
Added
- Elasticsearch 7 + 8 support with version validation.
- Default bundle bumped to
dxp-2026.q1.6-lts. (LPD-89279)
Updated
- PostgreSQL version is now
16.13. This works around the\restrictand\unrestricterrors. (LPD-91395)
Fixed
- Keycloak README:
keystore.p12path corrected tocompose-recipes/keycloak/build. (LPD-86518)
Maintenance
- BATS coverage for service versions and ES7 startup. (LPD-89887)
- Source Formatter skips
.claude/. (LPD-86935)
PRs
- LPD-86935 Exclude .claude directory from source formatter — #266
- LPD-86518 Fix incorrect location of certificate in readme — #267
- LPD-86437 Use shared credentials for database user — #269
- LPD-86435 Use shared liferay user for DB2 — #270
- LPD-89279 Support ES7 and ES8 in the search compose recipe — #271
- LPD-89887 Move service versions to gradle.properties — #272
- LPD-90356 Disable Glowroot by default — #273
- LPD-91395 Bump postgres to 16.13 — #274
All PRs by @anthony-chu.
Full Changelog: v0.9.2...v0.10.0
v0.9.2 - Tab Completion
What's Changed
Tab Completion for lec CLI (LPD-86190)
The lec command now supports tab completion in Bash and Zsh. This happens automatically inside of shell-source.sh, so just open a new shell and try it out with TAB!
Note: In order to support completions, lec was changed to a shell function instead of an alias. This should not have any functional impact, but please raise an issue if it does
Test improvements (LPD-83621)
PRs
- LPD-83621 Add test coverage for composer startup with databases by @drewbrokke in #263
- LPD-86190 Composer - shell completion for lec.sh by @drewbrokke in #262
Full Changelog: v0.9.1...v0.9.2
v0.9.1
Highlights
- Better port resolution — Previously, Docker would assign ports that only incremented within a range, even when lower ports became available again. Ports are now resolved to the lowest available port in the declared range, keeping port assignments predictable and consistent across restarts.
- Keycloak service — Full Keycloak IdP service with SAML configuration, security artifact generation, persistent storage, and documentation
- OpenLDAP service — New LDAP directory service available as a compose recipe
- Database import overhaul — Automatic archive decompression - many more formats are now compatible
Added
- Automatic port resolution (LPD-84200) — Ports are now resolved to the lowest available port in a declared range, replacing Docker's default behavior of only incrementing
- Keycloak service (LPD-73843) — Compose recipe, gradle task for preparing security artifacts (keystores, SAML config), OSGi configs, port configuration, volume for H2 database persistence, and full documentation
- OpenLDAP service (LPD-73800) — New
ldapcompose recipe with LDIF seed data - Database dump decompression (LPD-77149) —
importDatabaseDumpsnow auto-decompresses.gz,.zip, and other archive formats - Mail OSGi configs (LPD-82628) — Mail settings required by 2025.Q4+ added to both single-node and cluster configurations
Improved
- README URLs and port notes (LPD-83991) — README now shows usable URLs (with port) by default and notes when a port has been updated
- Nightly bundle support (LPD-82018) — Falls back to
.liferay-versionfortargetPlatformVersionwhen nightly bundles lack a real BOM; normalizes hyphens to dots in version strings - Database credentials in README (LPD-82534) — Added default username/password for each supported database
Fixed
- SQL Server marker file (LPD-83583) — Added missing marker file to the SQL Server entrypoint, ensuring database creation is properly tracked
Maintenance
- BATS test framework (LPD-77149) — Vendored BATS, added
lec batscommand, created database import tests, and added a CI workflow for validating imports - End-to-end tests (LPD-84202) — E2E test for Liferay/MySQL/Elasticsearch with dynamic port lookup, shared BATS helpers, and a GitHub Actions workflow
- Shellcheck compliance (LPD-83583) — Fixed shell script warnings
executeSQLQuerywrapper task (LPD-77149) — Convenience task for running ad-hoc SQL queries
PRs
- LPD-82628 Mail configurations are not applied automatically for portal version 2025.q4 and above by @annasuszter in #243
- LPD-82628 Mail configurations are not applied automatically for portal version 2025.q4 and above by @annasuszter in #246
- LPD-77149 Expand general database archive support by @drewbrokke in #247
- LPD-77149 Expand general database archive support by @drewbrokke in #248
- LPD-82534 Add username and password of databases to README by @kyle-miho in #245
- LPD-83583 Add marker file after creating new sqlserver database by @anthony-chu in #249
- LPD-82018 Composer printBundleInfo is inaccurate when using nightly by @drewbrokke in #250
- LPD-73843 Add support for Keycloak as IdP by @anthony-chu in #244
- LPD-83991 Add usable default URLs to the README for Keycloak by @anthony-chu in #253
- LPD-73800 Technical Task | [Liferay Up] LDAP (OpenLDAP) support by @drewbrokke in #255
- LPD-84202 Technical Task | Create E2E test by @drewbrokke in #257
- LPD-84200 Technical Task | Consistent port values by @drewbrokke in #256
Full Changelog: v0.9.0...v0.9.1
v0.9.0
0.9.0
New Features & Enhancements
- [LPD-78877] Restart Command: Added a new
restartcommand streamline project restarts, with an optional--cleanflag. - [LPD-74115] Webserver Refactor: Improvements to the
webserverservice:- Added support for
modsecurityNGINX images. - Fixed port configurations and added automated testing.
- Added support for
- [LPD-76637] Automated Database Drivers: Database drivers will automatically be downloaded when configuring the database via
portal-ext.propertiesinstead of one of the database services. - [LPD-78268] MySQL Case Insensitivity: MySQL is now configured to be case-insensitive by default.
- [LPD-76414, LPD-78061]
removeCommand Improvements:- The
removecommand now accepts both the-pflag and positional arguments to remove a particular workspace directly - Added a
rmalias for theremovecommand.
- The
- Ports Command: Makes the
portscommand public and adds it to the shell help and updated the README.
Bug Fixes & Improvements
- [LPD-76421] clean and remove: Enhanced the
cleanandremovelogic to:- Clean up dangling Docker images and worktrees.
- Sanitize Docker image listing to prevent accidental deletions of unrelated images.
- [LPD-81916] Fix hotfix validation error
- [LPD-76418] Documentation: Updated the README with detailed information regarding the Liferay deploy folder.
Code Quality
- Refactored
lec.shto use proper arrays for project handling, improving reliability over whitespace splitting. - General source formatting (SF) and variable renaming for better maintainability.
- [LPD-76416]
fzfSupport: Added a convenience function to setupfzfversion 0.29.0 for testing and improved help headers.
What's Changed
- LPD-78061 Add shorthand for command remove by @kyle-miho in #221
- LPD-76421 lec - remove command should remove the Docker images like the clean command by @drewbrokke in #226
- LPD-76416 lec - add info text to fzf listing to inform that you can type to filter the list by @drewbrokke in #232
- add ports to help by @drewbrokke in #231
- LPD-78268 Add flag to automatically set mysql tables to be case insensitive by @kyle-miho in #224
- LPD-76418 Composer - update the README with info about where to put built jars or other artifacts to deploy by @drewbrokke in #233
- LPD-74115 (TEST ACTION) Technical Task | [Spinner] mod_security support for the webserver by @drewbrokke in #236
- Master LPD-76637 by @drewbrokke in #237
- LPD-81916 Composer fails to validate hotfix URL by @drewbrokke in #238
- Master lpd 78877 by @drewbrokke in #240
- LPD-76414 lec - allow passing a workspace to the remove command by @drewbrokke in #241
Full Changelog: v0.8.2...v0.9.0
Clickable port links
Clickable port links in lec ports output
What's Changed
- LPD-79181 lec - ports command should print a clickable link by @drewbrokke in #225
Full Changelog: v0.8.1...v0.8.2
Bug fix
Highlights
- Disables the Pre-Upgrade Document Library verification by default
What's Changed
Fixed
LPD-77076: lec start fails on newer DXP releases with DB-only import due to mandatory Pre-Upgrade Document Library verification
PRs
- LPD-77076 Include portal property to allow data dumps to not have the document library and still upgrade successfully by @kyle-miho in #216
Full Changelog: v0.8...v0.8.1
v0.8
Highlights
- Integrated multiple features from LiferayUp (see tickets below)
- Fixed bug where
lec share --exportwould not actually export the container data first
What's Changed
Added
LPD-73841: Technical Task | [Liferay Up] Support multiple document library store types
LPD-73846: Technical Task | [Liferay Up - Spinner] Antivirus (ClamAV) support
LPD-74089: Technical Task | [Liferay Up] OpenOffice support
LPD-74090: Technical Task | [Liferay Up] ReCaptcha support
LPD-74091: Technical Task | [Liferay Up] Xuggler/FFmpeg support
LPD-77147: Expand MSSQL database import support
LPD-77148: Expand DB2 database import support
Fixed
LPD-75865: composer does not modify the database dump when postgres is used with a regular dump
LPD-75928: Composer - mysql image ignores cnf files in some cases
LPD-76071: lec - function to navigate to a new workspace after init
LPD-76417: Composer - checkForLiferayLicense task fails because of relative path in Docker volume statement
LPD-76517: lec - share command export flag does not work
LPD-76740: Technical Task | lec - allow case-insensitive filtering for fzf listing
LPD-77897: Docx conversion fails
LPD-78198: Composer - lec start continues even if Gradle tasks fail
PRs
- LPD-73846 Add clamav support by @anthony-chu in #191
- LPD-75928 Composer - mysql image ignores cnf files in some cases by @drewbrokke in #198
- LPD-75865 composer does not modify the database dump when postgres is used with a regular dump by @drewbrokke in #197
- LPD-76071 lec - function to navigate to a new workspace after init by @drewbrokke in #199
- LPD-76417 Composer - checkForLiferayLicense task fails because of relative path in Docker volume statement by @drewbrokke in #201
- LPD-74090 Enable basic Google recaptcha if the respective gradle.property is set to true by @kyle-miho in #196
- LPD-76517 lec - share command export flag does not work by @drewbrokke in #202
- LPD-74089 Add Libre Office support by @anthony-chu in #192
- LPD-73841 Technical Task | [Liferay Up] Support multiple document library store types by @drewbrokke in #204
- LPD-74091 Add media preview support by @anthony-chu in #193
- LPD-76740 Allow selecting in lec without case sensitvity by @kyle-miho in #210
- fix enable mail service link in readme by @daniel-pinter-lr in #212
- LPD-77897 Fix docx support in libreoffice integration by @anthony-chu in #213
- LPD-77147 Extend MSSQL database import support by @anthony-chu in #209
- LPD-77148 Add db2move import support for DB2 by @anthony-chu in #215
- LPD-78198 Composer - lec start continues even if Gradle tasks fail by @drewbrokke in #219
New Contributors
- @daniel-pinter-lr made their first contribution in #212
Full Changelog: v0.7...v0.8
v0.7
Highlights
Support for Microsoft SQL Server 2022
Microsoft SQL Server is now available as a database service:
lr.docker.environment.service.enabled[sqlserver]=trueTarget projects with commands with the --project flag
You can now run certain commands with the --project or -p flags in order to target them instead of needing to navigate to that directory first:
lec <command> --project <project-identifier>
lec start --project /Users/drewbrokke/Documents/liferay/lec-workspaces/lec-LPP-61466
lec stop --project lec-test
The project identifier can either be a directory, or a bare project name.
Start bundle after init with --start
You can start a bundle right after initializing:
lec init --start
List various entities with lec list
lec list allows listing various listable entities:
lec list projects
lec list releases
lec list runningProjects
lec list saasEnvironments
Docker images are removed with lec clean
What's Changed
Added:
LPD-62912: [Composer]Add support for Microsoft SQL Server 2022
LPD-69549: Include glowroot/data folder from liferay service in exported_data
LPD-69940: Enable SQL Server
LPD-70440: Technical Task | Provide an empty client-extensions folder
LPD-70441: Technical Task | Start newly created bundle
LPD-73748: allow defining a project for various commands in the lec script
Fixed:
LPD-67184: Users should be able to restore Postgres dumps
LPD-67190: Improve documentation regarding available image versions
LPD-68592: Import/export via creating and extracting tar files after image creation to avoid large Docker contexts
LPD-68594: Delete previous ticket branch when initializing a new workspace for the same ticket
LPD-69094: lec init fails with LXC environment d5w1preprod
LPD-69624: Document lec list functionality
LPD-70485: Deadlock when starting up nightly DXP with MSSQL
LPD-71411: Improve lec clean behavior
LPD-72029: lec init fails when releases.json cannot be found from the CDN
PRs
- LPD-70485 Prevent deadlocks with SQL Server by @anthony-chu in #174
- LPD-70440 Add client-extensions folder by @kyle-miho in #176
- LPD-67190 Improve documentation regarding available image versions by @drewbrokke in #177
- LPD-67190 Improve documentation regarding available image versions by @drewbrokke in #178
- LPD-68592 Import/export via creating and extracting tar files after image creation to avoid large Docker contexts by @drewbrokke in #165
- LPD-68594 Delete previous ticket branch when initializing a new workspace for the same ticket by @drewbrokke in #180
- LPD-69940 Enable SQL Server by @anthony-chu in #181
- LPD-69549 Include glowroot/data folder from liferay service in exported_data by @drewbrokke in #183
- LPD-72029 lec init fails when releases.json cannot be found from the CDN by @drewbrokke in #185
- LPD-67184 Automatically restore binary PostgreSQL dump files on their first initialization by @kyle-miho in #186
- LPD-73748 allow defining a project for various commands in the lec script by @drewbrokke in #188
- LPD-70441 Technical Task | Start newly created bundle by @drewbrokke in #189
- LPD-69624 Document lec list usage by @anthony-chu in #184
- LPD-69094 lec init fails with LXC environment d5w1preprod by @drewbrokke in #190
Full Changelog: v0.6...v0.7
v0.6
Highlights
Bulk remove projects
You can now remove multiple projects at once!
Use the tab key in the selection menu to select multiple projects for removal.

Select nightly during lec init
nightly will always be the first option during version selection. This is handy if you ever need to test on "master".
Support for hotfixes stored in GCP
Hotfixes stored in GCP will now download and install correctly. The gcloud CLI needs to be installed for this to work properly. You may be prompted to authenticate on the first run.
What's Changed
Added:
LPD-64159: Allow users to specify database version
LPD-67151: Provide a way to clean up or expire workspaces in bulk
LPD-67187: Docker tag selection during lec init
LPD-67725: Hotfixes not downloaded from GCP buckets
LPD-67899: automatically update the liferay-lxc repo when starting up Composer while referencing an LXC project
Fixed:
LPD-67188: Deploy jar or project is not working correctly
LPD-68438: [Composer] Fix importDatabaseDumps for non-SaaS database types
LPD-69468: Increase maximum heap size for the Gradle daemon to prevent OOM errors
LPD-69532: Limit listAdminUsers usage to only when database will be populated
LPD-69837: Technical Task | Increase memory allocation and limit for SQL Server
PRs
- LPD-69532 Only use listAdminUsers when database will be populated by @anthony-chu in #156
- LPD-67188 Deploy jar or project is not working correctly by @annasuszter in #155
- LPD-68438 Fix importDatabaseDumps for non-SaaS databases by @anthony-chu in #154
- LPD-64159 Allow setting the version of the Docker database image by @kyle-miho in #153
- LPD-69837 Increase memory allocation and limit for SQL Server by @anthony-chu in #160
- LPD-67725 Hotfixes not downloaded from GCP buckets by @drewbrokke in #161
- LPD-67187 Docker tag selection during lec init by @drewbrokke in #167
- LPD-67151 Provide a way to clean up or expire workspaces in bulk by @drewbrokke in #168
- Master lpd 69917 by @drewbrokke in #169
- LPD-69468 Increase maximum heap size for the Gradle daemon to prevent OOM errors by @drewbrokke in #170
- LPD-67151 Provide a way to clean up or expire workspaces in bulk by @drewbrokke in #172
- LPD-67151 Provide a way to clean up or expire workspaces in bulk by @drewbrokke in #173
- LPD-67899 automatically update the liferay-lxc repo when starting up Composer while referencing an LXC project by @drewbrokke in #171
New Contributors
- @kyle-miho made their first contribution in #153
Full Changelog: v0.5.1...v0.6
Bug fix
What's Changed
- LPD-69566 initializing an LEC workspace with LXC uses the wrong database by @drewbrokke in #158
Full Changelog: v0.5...v0.5.1
