Releases: gwtproject/gwt
GWT 2.13.0
Highlights:
- Removed more old polyfills and IE-specific workarounds
- Samples updated to use Maven, usually as multi-module projects
- 2.13 is likely to be the last release where the compiler and dev tools run on Java 11
- DevMode server defaults to only serving static files - projects that wish to use the old Jetty 9 launcher may specify
-server com.google.gwt.dev.shell.jetty.JettyLauncher, but this is due to be removed. Projects should either split their server/client classpath, or switch to a ServletContainerLauncher that runs another server (https://github.com/niloc132/gwt-devmode-server-sample is an example project that can provide this) - Support
-strictin test arguments, to more easily find compile issues in GWT libraries - JFR events added to replace SpeedTracer, support observability into compiler steps, permutation and fragment counts, and output size. Additionally, the
gwt.jjs.dumpAstsystem property has been tweaked to support filtering, and generate more readable output - jaxb and xml-apis are now optional when using GWT's javax.validation support, set the
gwt.validation.ignoreXmlsystem property to avoid needing these - Improved JRE emulation tracking, listing not only supported APIs, but also document unsupported APIs with links to issues
Known bug:
- We've had a report of errors on startup on Windows for DevMode/CodeServer, but most users haven't seemed to encounter it. We have a candidate fix, and will follow up with a point release when we gather more information and land it. See #10272 for more details
Breaking Changes:
- String.split emulation changed to support Java 8 semantics with empty entries
- Collectors.toMap throws exception when assigning a null value to a key, reflecting Java semantics (though not Javadoc)
- AccessControlException JRE emulation removed
Bug fixes:
- Correct handling for SwitchStatements without a containing Block by @niloc132 in #10027
- Ignore all annotations in all scopes if source is missing by @niloc132 in #10021
- Fix Window.onClosing() not work in GWT 2.12 by @InforBG in #10074
- update gson to latest by @vegegoku in #10079
- Allow lambdas in this()/super() to close over outer types by @niloc132 in #10078
- Exceptions thrown when building GWT's AST should include context by @niloc132 in #10080
- Unset config properties:
System.getPropertyshould return default value or null (previously reverted) by @zbynek in #10096 - Fix NPE when compiling records with static fields by @zbynek in #10134
- Improving accessability - added aria presentation role for layout tables by @Lonzak in #10108
- Switch exprs must be transformed rather than wrapped in statements by @niloc132 in #10122
- make GWT epub friendly by @evoludolab in #10148
- Disabling draft mode shouldn't force namespace=package by @niloc132 in #10164
- Allow JsUtils.uncheckedCast to be inlined away by @niloc132 in #10165
- Fix console log uses debug by @larzeni in #10139
- Faster implementation of long and int rotation by @zbynek in #10187
- Update Jetty to 9.4.58.v20250814 by @Lonzak in #10203
JRE Emulation enhancements:
- Added Java 9+ emulation to
- java.io.ByteArrayOutputStream
- java.io.OutputStream
- java.io.Writer
- java.lang.Integer
- java.lang.Long
- java.lang.Math
- java.lang.Number
- java.lang.StrictMath
- java.lang.String
- java.math.BigInteger
- java.util.BitSet
- java.util.Collection
- java.util.Map
- java.util.Objects
- java.util.stream.Collectors
- java.util.stream.DoubleStream
- java.util.stream.IntStream
- java.util.stream.LongStream
- java.util.stream.Stream
- Cloneable added to
- java.util.TreeMap
- java.util.TreeSet
Deprecations and Removals:
- The following classes have been deprecated for removal:
- com.google.gwt.dev.util.log.dashboard.DashboardNotifierFactory - these have all been replaced by the new Java FlightRecorder functionality
- com.google.gwt.dev.util.log.dashboard.NoOpDashboardNotifier
- com.google.gwt.dev.util.log.dashboard.DashboardNotifier
- com.google.gwt.junit.RunStyleSelenium - this doesn't appear to have been usable for many years, will be replaced with Selenium WebDriver support
- com.google.gwt.dev.util.arg.ArgHandlerEnableGeneratorResultCaching
- com.google.gwt.dev.util.arg.OptionEnableGeneratorResultCaching
- com.google.gwt.dev.util.InstalledHelpInfo - replaced by
GwtprojectOrgHelpInfoto link to documentation at https://gwtproject.org - com.google.gwt.dev.util.Util
- com.google.gwt.util.tools.Utility
- com.google.gwt.core.ext.debug.JsoEval
- com.google.gwt.dev.util.PerfCounter
- com.google.gwt.dev.util.PerfLogger
- The following deprecated classes in gwt-dev have been removed:
- com.google.gwt.dev.util.log.speedtracer.CompilerTypeEvent
- com.google.gwt.dev.util.log.speedtracer.DevModeEventType
- com.google.gwt.dev.util.log.speedtracer.SpeedTracerEventType
- com.google.gwt.dev.GetJreEmulation
- com.google.gwt.dev.SignatureDumper
- com.google.gwt.dev.RunWebApp
- com.google.gwt.dev.shell.log.ServletContextTreeLogger
- com.google.gwt.dev.shell.WorkDirs
- com.google.web.bindery.requestfactory.server.RequestFactoryJarExtractor
- com.google.gwt.dev.ApplicationCreator
- com.google.gwt.dev.util.arg.ArgHandlerDumpSignatures
- com.google.gwt.dev.util.arg.ArgHandlerOutDir
- com.google.gwt.dev.util.arg.ArgHandlerFragmentMerge
- com.google.gwt.util.PreventSpuriousRebuilds
- com.google.gwt.dev.codeserver.RecompileListener
New Contributors
- @FrankHossfeld made their first contribution in #10023
- @InforBG made their first contribution in #10074
- @Lonzak made their first contribution in #10108
- @evoludolab made their first contribution in #10148
- @tsschmidt made their first contribution in #10166
- @larzeni made their first contribution in #10139
For more detail, see the commit log.
GWT 2.12.2
Hotfix for two regressions in 2.12.
What's Changed
- Fix Window.onClosing() not work in GWT 2.12 by @InforBG in #10101
- Support JDT's implicit yield in switch statements by @niloc132 in #10100
Full Changelog: 2.12.1...2.12.2
GWT 2.12.1
Hotfix release to fix two issues, one regression and one impacting latest jsinterop-base versions.
What's Changed
- Correct handling for SwitchStatements without a containing Block by @niloc132 in #10034
- Ignore all annotations in all scopes if source is missing by @niloc132 in #10035
For more detail, see the commit log.
GWT 2.12
Highlights:
- Added support for Java 12-17 language features, including text blocks, instanceof pattern matching, records, and switch expressions.
- Minimum Java version 11 is required to run any dev tools, though the server code should continue to function with Java 8 for this release. Later versions may no longer support Java 8.
- Added support for sourcemaps to include the contents of the sources files.
- Enabled sourcemaps by default in all browsers
- Fix CSP issues in linkers and dev mode, provide CSP workarounds for GWT-RPC payloads
Bug fixes:
- Remove first character for delegating args to CodeServer (#9940)
- Fix error initializeEnumMap() is exceeding the 65535 bytes limit (#9954)
- Relax naming rules to allow valid java bean properties as jsproperties (#9875)
- Allow SDM's web server to reuse a socket without waiting (#9946)
- Each mapped stream must be closed after its contents have been placed… (#9949)
- Fix native JsMethods with varargs called from Java varargs methods (#9957)
JRE Emulation:
- Add Java 10 Collections APIs (#9904)
- Add Java 9 BigInteger constructors (#9953)
- Normalizer emulation (#9970)
- String method emulation for Java 11, align Character.isWhitespace with Java 11 (#9975)
- Implement java.lang.Math.nextAfter, nextUp, nextDown (#9978)
- Added missing IOException to Reader.read(...) methods (#9933)
- Support ElementType MODULE and RECORD_COMPONENT on annotations (#10002)
Deprecations and Removals:
- The
unloadevent has been deprecated in browsers, deprecated calls that require it, and rewrite calls that shouldn't need it. Deprecated methods have notes describing how to replace them with more modern strategies. - The
mousewheelevent has been deprecated in browsers, its usage in GWT has been replaced with thewheelevent. This should be transparent to applications. - The
com.google.gwt.dev.GetJreEmulationmain class has been deprecated, and is planned to be removed in a future release. - The
com.google.gwt.dev.RunWebAppmain class has been deprecated, and is planned to be removed in a future release. - The
SpeedTracerclasses have been deprecated, and are planned to be removed/replaced in a future release. - The deprecated
-XfragmentMergeflag no longer has any effect, to be removed in a future release. - The following deprecated, unused flags have been removed:
-XdisableUpdateCheck/-XcheckForUpdates-incrementalCompileWarnings-Xlibraries-XoutLibrary,-Xlibrary-Xlink-missingDepsFile-overlappingSourceWarningsXstrictResources,enforceStrictResources
- The following deprecated, noop
main()classes in gwt-user have been removedcom.google.gwt.user.tools.ApplicationCreatorcom.google.gwt.user.tools.ProjectCreator
- The
com.google.web.bindery.requestfactory.server.RequestFactoryJarExtractorclass is no longer included in any release jars.
For more detail, see the commit log.
GWT 2.10.1
Backported a fix from 2.11 to disable JPA/JDO "enhanced classes" serializable
by default for GWT-RPC, and added a warning when it is in use. For more
information, see #9709.
GWT 2.11
Highlights:
- Transitioned to GitHub pull requests for new contributions, with nightly builds running on GitHub Actions.
- Added release artifacts for
jakarta.servletpackages for both RequestFactory and GWT-RPC. - Tested support for running on Java 21. This is likely to be the final minor release series to support running on Java 8.
- Disabled JPA/JDO "enhanced classes" serializable by default for GWT-RPC, and added a warning when it is in use.
- Updated JRE emulation to support Java 11 for Collections, streams, and more.
Bug fixes:
- Make custom field serializers ready for Java 17 (#9791)
- Correctly write Long.toBinaryString as an unsigned value (#9769)
- Fix gzip encoding of responses in the CodeServer (#9766)
- Avoid EmptyStackException in SOYC (#9808)
- Fix error reporting for System.getProperty magic method nodes (#9812)
- Fix ClassNotFoundException when running JettyLauncher with Java 9+ (#9822)
- Avoid StackOverflowError in TypeUtils#resolveGenerics (#9858)
- Avoid document.write in Chrome with iframe linker (#9836)
- Avoid document write in single script linker loading (#9847)
- Handle ternary intersection types (#9799)
- Fix for namespace="" names that clash with variable names (#9867)
JRE Emulation:
- Added new Optional methods: or(), stream(), ifPresentOrElse(), empty(), and orElseThrow()
- Added List/Set/Map of() methods
- Added Predicate not() method
- Added Collectors methods: flatMapping(), filtering(), toUnmodifiableList(), toUnmodifiableSet(), and toUnmodifiableMap()
- Added Stream methods: dropWhile, takeWhile, and iterate(seed, hasNext, next)
- Added Enumeration.asIterator()
Deprecations:
- Using DevMode as an application server is deprecated, and may be removed or changed in a future release. Please migrate local development workflows to using a general purpose server, or a custom ServletContainerLauncher.
- The webAppCreator tool is deprecated, please refer to https://www.gwtproject.org/gettingstarted.html.
Miscellaneous:
- Update chrome/firefox globals to latest
- Updated Javadoc to run on Java 9+, support search
- Removed unused scripts from old build wiring
For more detail, see the commit log.
GWT 2.10.0
Highlights
-
Updated to HtmlUnit 2.55.0 and Jetty 9.4.44. With this newer HtmlUnit build comes support for Promise in unit tests, and the browser strings that can be specified when running tests are "FF", "Chrome", "IE" (for IE11), "Edge", and "Safari".
-
Tested support for running on Java 17, dropped remaining support for running on Java 7.
-
Maven groupId is formally changed to
org.gwtproject, projects should take care to ensure they are using either the oldcom.google.gwt:gwtBOM or the neworg.gwtproject:gwtBOM to sure that Maven or Gradle correctly handle this change. This will be the last published version using thecom.google.gwtgroupId. -
Dropped support for IE 8, 9, and 10.
Bug fixes
- Correct Long.hashCode semantics
- Support CLASSPATH environment variable when creating child processes, fixing a bug where Windows could fail with a long list of arguments.
- Use Function.name instead of displayName to support visible method names in Chrome 93+.
- Allow stack traces to be available in Chrome when loading scripts from a remote origin.
JRE Emulation
- Added OutputStreamWriter emulation.
- Support StringReader mark() and reset() methods.
- Added StrictMath emulation.
- Added BufferedWriter emulation.
- Added incomplete PrintStream emulation.
- Add Charset.defaultCharset() emulation.
- Improve BigInteger emulated performance.
- System.nanoTime() emulation with performance.now().
- Added Optional.isEmpty emulation.
- JRE Emulation improvements/simplifications to facilitate J2CL's WASM support. Note that these do not always offer specific improvements to GWT itself, but helps to keep the codebases consistent.
Miscellaneous
- Add support to compile GWT itself in Java 9+.
- Improve compiled code size for applications that never use streams, by avoiding referencing streams from Throwable.
For more detail, see the commit log.
GWT 2.9.0
Highlights
-
Able to compile projects with jsinterop-base 1.0.0, elemental2 1.0.0, and
jsinterop-annotations 2.0.0. With the exception of@JsAsyncand@JsEnum, this
brings GWT2 to be compatible across these tools with J2CL. -
Added support for Java language levels 9, 10, and 11.
-
Officially, support is dropped for running the GWT compiler or server-side
tooling on Java 7. The GWT distribution is still compiled to run on Java 7
for this release, but no guarantees are made about whether or not this will
work. Future versions will compile bytecode for Java 8+. The release was
tested and found to work cross platform when run with Java 8, 11, and 14.
Deprecations
- Elemental has been officially deprecated - it is still included in this
release, but may not appear in future releases. Instead, we encourage the use
of the Elemental2 libraries, which are compatible with both GWT2 and J2CL. - Removed NoSuchMethodException emulation.
Bug fixes
- Fixes Arrays.binarySearch semantics for float[] and double[]
- Adds Support multi-line messages in errors/exceptions
- Adds shutdown hook in DiskCache to clean up temp files
- Cache Gecko version to lower CPU usage on FireFox
- Do not assume that "this" is always non null.
- Updates globals for Firefox version 60.0.2, Chrome 66.0.3359.45
- Fixes String.regionMatches.
- Native JsMethods allowed to coexist with implementations with the same name.
- Make sure lambdas box, unbox and insert erasure casts when necessary.
- Negative zero treated properly in Double/Float.compare()
Miscellaneous
- Updates CLDR to version 34.
- Arrays now implement Cloneable
- Link backing errors together with a cause attribute, start tracking
suppressed errors in addition to the cause in underlying error object. - Add AtomicReference to gwt/emul.
- Propagate script nonces via ScriptInjector
- Add partial emulation for ExecutorService and ScheduledExecutorService
- Emulate java.util.concurrent.Flow
- Emulate javax.annotation{,.processing}.Generated
- Make sure "goog.global" is $wnd if not defined.
- Add
when-linker-addedelement definition - Add Reader and StringReader emulation.
- Remove GWT version check.
- Do not show "unusable-by-js" warning for synthetic methods.
- Update unmodifiableList to throw on Java8 methods.
- Disable DataflowOptimizer by default and emit a warning when used
Full Changelog: 2.8.2...2.9.0
GWT 2.8.2
Highlights
-
Supports running in Java 9. Note that this does not yet mean that GWT can
compile Java 9 sources, or support the Java 9 JRE changes, but that a Java 9
JRE can be used to compile a GWT project. Do note that the new--module-path
flag is not supported, but-classpathmust still be used as in the past. -
Chrome 61 removed functionality that had been used for reading the absolute
top/left values. The internal implementation has been updated to reflect modern
standards. -
Uncaught exception handler will now receive all errors on the page, as handled
bywindow.onerror. This may potentially be a breaking change if there were
misbehaving scripts on the page. To disable this functionality, set the property
gwt.uncaughtexceptionhandler.windowonerrortoIGNORE:
<set-property name="gwt.uncaughtexceptionhandler.windowonerror" value="IGNORE"/>For more details, see com.google.gwt.core.Core.
Bug fixes
- LookupMethodCreator creates too large method
- NativeRegExp should use iframe instance, fixing Edge JIT bug
- JsProperty getter/setter sometimes were reported as incompatible
- Instantiating native JsTypes from JSNI results in InternalCompilerException
- Remove the SUBSIZED characteristic from filtered streams
- Internal compiler exception when using native JsType varargs in a JsMethod
- Regression in String.toLowerCase and toUpperCase for some locales, specifically
for Turkish - Missing bounds check in String.charAt
- Fix AIOOBE when compiling method references involving varargs.
- Apply HtmlUnit workaround ensuring that window.onerror is called correctly
Miscellaneous
- Migrated lang/jre emulation JSNI to JsInterop to share with J2CL
- Added ErrorProne to gwt builds
- Improved compliance with CSP
- Added emulation for java.io.Externalizable
- Added emulation for java.lang.reflect.Array
- JSO.equals/hashcode will delegate to the JS object if it has methods with those
names - Removed outdated or unused parts of project
- Migrate guava JRE emulation to GWT
- HtmlUnit tests are now run in batch mode
For more detail, see the issue tracker
Full Changelog: 2.8.1...2.8.2
GWT 2.8.1
Highlights
-
Elemental1's JSON parser now correctly throws an exception when a string, object,
or array is not correctly ended -
Support filtering JsInterop types for export, with whitelist/blacklist and
wildcards. The-generateJsInteropExportsflag is still used to enable the feature,
but-includeJsInteropExportsand-excludeJsInteropExportsnow exist to specify
packages with optional*wildcards. Later arguments and patterns override earlier
ones. -
Support "
*" (any) and "?" (unknown) types as a JsType native name. The
"Unknown" type can be referred over Object if the type is unknown, while "any" is
prefered supertype of any JS type, including primitives.
Bug fixes
- Fix loading bug in waitForBodyLoaded.js
- Fix NPE compiling code with a constructor reference (Type::new).
- Fix bad rewriting of default methods.
- Make native NativeRegExp refer to the iframe instance.
- Fix incorrect comparison of object arrays in Arrays.deepEquals.
- Fixed NullPointerException in handling of Jetty arguments
- Fixes a bug where JsOptional on override may fail
- Clear persistent unit cache when relevant options change.
- Rescue JSOs crossing JsInterop borders.
- Rescue types represented as natives when supertypes cross JS boundaries.
- Prevent errorneous floating point expression optimization.
- Fix the implementation of Stream.anyMatch/allMatch/noneMatch to support streams with null elements.
- Do not ignore return values of streams.
- Fix ICE due to intersection types appearing as erasure casts.
- Fix bad varargs conversion in method reference.
- Fix: Add role attribute to last sortable column header
- Properly preserve names in overrides of native methods.
- Make Array.sort(float[]/double[]) JDK compliant
Miscellaneous
- Small optimization in String.subString
- Specialize Objects.equals for strings.
- Improve primitive cast optimizations.
- Update global blacklist to chrome 57.0.2987.74.
- Improvements for compliance with Strict CSP
- Remove Characteristics manipulation in Collectors
Deprecation
- Adds deprecation to @GwtScriptOnly
Full Changelog: 2.8.0...2.8.1