Skip to content

Releases: gwtproject/gwt

GWT 2.13.0

11 Feb 19:40
b7117c1

Choose a tag to compare

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 -strict in 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.dumpAst system 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.ignoreXml system 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.getProperty should 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 GwtprojectOrgHelpInfo to 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

For more detail, see the commit log.

GWT 2.12.2

03 Mar 15:39
4e95f40

Choose a tag to compare

Hotfix for two regressions in 2.12.

What's Changed

Full Changelog: 2.12.1...2.12.2

GWT 2.12.1

12 Nov 17:00
6217e81

Choose a tag to compare

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

29 Oct 13:42
0056242

Choose a tag to compare

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 unload event 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 mousewheel event has been deprecated in browsers, its usage in GWT has been replaced with the wheel event. This should be transparent to applications.
  • The com.google.gwt.dev.GetJreEmulation main class has been deprecated, and is planned to be removed in a future release.
  • The com.google.gwt.dev.RunWebApp main class has been deprecated, and is planned to be removed in a future release.
  • The SpeedTracer classes have been deprecated, and are planned to be removed/replaced in a future release.
  • The deprecated -XfragmentMerge flag 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
    • -overlappingSourceWarnings
    • XstrictResources, enforceStrictResources
  • The following deprecated, noop main() classes in gwt-user have been removed
    • com.google.gwt.user.tools.ApplicationCreator
    • com.google.gwt.user.tools.ProjectCreator
  • The com.google.web.bindery.requestfactory.server.RequestFactoryJarExtractor class is no longer included in any release jars.

For more detail, see the commit log.

GWT 2.10.1

09 Jan 13:20

Choose a tag to compare

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

09 Jan 18:41
7f76f0f

Choose a tag to compare

Highlights:

  • Transitioned to GitHub pull requests for new contributions, with nightly builds running on GitHub Actions.
  • Added release artifacts for jakarta.servlet packages 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

09 Jun 19:41

Choose a tag to compare

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 old com.google.gwt:gwt BOM or the new org.gwtproject:gwt BOM to sure that Maven or Gradle correctly handle this change. This will be the last published version using the com.google.gwt groupId.

  • 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

09 Dec 01:40

Choose a tag to compare

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 @JsAsync and @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-added element 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

09 Dec 01:41

Choose a tag to compare

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 -classpath must 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
    by window.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.windowonerror to IGNORE:

    <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

09 Dec 01:42

Choose a tag to compare

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 -generateJsInteropExports flag is still used to enable the feature,
    but -includeJsInteropExports and -excludeJsInteropExports now 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