Skip to content

Moqui Framework 3.0.0

Choose a tag to compare
@jonesde jonesde released this 01 Jun 22:57
· 82 commits to master since this release

Release 3.0.0 - 31 May 2022

Moqui Framework 3.0.0 is a major new feature and bug fix release with some changes that are not backward compatible.

Java 11 is now the minimum Java version required. For development and deployment make sure Java 11 is installed
(such as openjdk-11-jdk or adoptopenjdk-11-openj9 on Linux), active (on Linux use 'sudo update-alternatives --config java'),
and that JAVA_HOME is set to the Java 11 JDK install path (for openjdk-11-jdk on Linux: /usr/lib/jvm/java-11-openjdk-amd64).

In this release the old moqui-elasticsearch component with embedded ElasticSearch is no longer supported. Instead, the new
ElasticFacade is included in the framework as a client to an external OpenSearch or ElasticSearch instance which can be
installed in runtime/opensearch or runtime/elasticsearch and automatically started/stopped in a separate process by the
MoquiStart class (executable WAR, not when WAR file dropped into Servlet container).

For search the recommended versions for this release are OpenSearch 1.3.1 ( or ElasticSearch 7.10.2.
For ElasticSearch this is the last version released under the Apache 2.0 license).

Now that JavaScript/CSS minify and certain other issues with tools have been resolved, Gradle 7+ is supported.

This is a brief summary of the changes since the last release, for a complete list see the commit log:


Non Backward Compatible Changes

  • Java 11 is now required, updated from Java 8
  • Updated Spock to 2.1 and with that update now using JUnit Platform and JUnit 5 (Jupiter); with this update old JUnit 4
    test annotations and such are supported, but JUnit 4 TestSuite implementations need to be updated to use the new
    JUnit Platform and Jupiter annotations
  • Library updates have been done that conflict with ElasticSearch making it impossible to run embedded
  • XMLRPC support had been partly removed years ago, is now completely removed
  • CUPS4J library no longer included in moqui-framework, use the moqui-cups component to add this functionality
  • Network printing services (org.moqui.impl.PrintServices) are now mostly placeholders that return error messages if used, CUPS4J
    library and services that depend on it are now in the moqui-cups tool component
  • H2 has non-backward compatible changes, including VALUE now being a reserved word; the Moqui Conf XML file now supports
    per-database entity and field name substitution to handle this and similar future issues; the main issue this cannot
    solve is with older H2 database files that have columns named VALUE, these may need to be changes to THE_VALUE using
    an older version of H2 before updating (this is less common as H2 databases are not generally retained long-term)

New Features

  • Recommended Gradle version is 7+ with updates to support the latest versions of Gradle
  • Updated Jetty to version 10 (which requires Java 11 or later)
  • MFA support for login and update password in screens and REST API with factors including authc code by email and SMS,
    TOTP code (via authenticator app), backup codes; can set a flag on UserGroup to require second factor for all users in
    the group, and if any user has any additional factor enable then a second factor will be required
  • Various security updates including vulnerabilities in 3rd party libraries (including Log4j, Jackson, Shiro, Jetty),
    and some in Moqui itself including XSS vulnerabilities in certain error cases and other framework generated
    messages/responses based on testing with OWASP Zap and two commercial third party reviews (done by larger Moqui users)
  • Optimization for startup-add-missing to get meta data for all tables and columns instead of per entity for much faster startup
    when enabled; default for runtime-add-missing is now 'false' and startup-add-missing is now 'true' for all DBs including H2
  • View Entity find improvements
    • correlated sub-select using SQL LATERAL (mysql8, postgres, db2) or APPLY (mssql and oracle; not yet implemented)
    • extend the member-entity.@sub-select attribute with non-lateral option where not wanted, is used by default as is best for how
      sub-select is commonly used in view entities
    • entity find SQL improvements for view entities where a member entity links to another member-entity with a function on a join field
    • support entity-condition in view-entity used as a sub-select, was being ignored before
  • Improvements to DataDocument generation for a DataFeed to handle very large database tables to feed to ES or elsewhere,
    including chunking and excluding service parameters from the per ExecutionContext instance service call history
  • DataFeed and DataDocument support for manual delete of documents and automatic delete on primary entity record delete
  • Scheduled screen render to send regular reports to users by email (simple email with CSV or XSLT attachment) using
    saved finds on any form-list based screen
  • For entity field encryption default to PBEWithHmacSHA256AndAES_128 instead of PBEWithMD5AndDES, and add configuration
    options for old field encrypt settings (algo, key, etc) to support changing settings, with a service to re-encrypt all
    encrypted fields on all records, or can re-encrypt only when data is touched (as long as all old settings are retained,
    the framework will attempt decrypt with each)
  • Groovy Shell screen added to the Tools app (with special permission), an interactive Groovy Console for testing in
    various environments and for fixing certain production issues

See the complete release notes at:

The file is a source distribution for the projects in Moqui Ecosystem included on the demo server (the 'demo' component set in addons.xml): moqui-framework, moqui-runtime, moqui-camel, moqui-elasticsearch, moqui-fop, moqui-poi, example, mantle-udm, mantle-usl, SimpleScreens, HiveMind, PopCommerce, and PopRestStore.

The MoquiDemo-3.0.0.war file is a pre-built all-in-one distribution with demo data loaded and tests run. To try it out just drop it into your preferred Servlet container (Tomcat, Jetty, etc; on AWS ElasticBeanstalk, etc). This is the file deployed on the Moqui Demo server ( You can also run it with java -jar MoquiDemo-3.0.0.war but be aware that this will use a temporary directory for database files, etc that will be deleted on exit.

There is a Docker image similar to the WAR file available here: