- Requires
hoist-react >= 83.0.2. - The webpack dev server now proxies API requests to the Grails backend, serving client resources
and API responses from the same port. The default
baseUrlin dev mode changed from the cross-origin//devHost:devGrailsPort/to/api/(matching production). Requests to/api/...are proxied to Grails with the prefix stripped. This mirrors the production nginx setup, avoids CORS issues, and simplifies local development. Apps with an explicitbaseUrlare unaffected.
- Fixed bug in release-related GitHub actions that prevented them from working when used in other repos.
- Removed
@cerner/duplicate-package-checker-webpack-plugindependency. This plugin is no longer maintained (Cerner GitHub org archived) and provided limited value. ThecheckForDupePackagesanddupePackageCheckExcludesconfig options are no longer supported. - Added GitHub Actions deployment scripts for CI/CD.
- Added
CLAUDE.mdand MCP server configs for AI-assisted development.
- babel-loader
10.0 β 10.1 - copy-webpack-plugin
13.0 β 14.0 - mini-css-extract-plugin
2.9 β 2.10 - sass-embedded
1.97 β 1.98 - terser-webpack-plugin
5.3 β 5.4 - webpack
5.104 β 5.105 - webpack-bundle-analyzer
5.1 β 5.2 - webpack-cli
6.0 β 7.0
- postcss-loader
8.1 β 8.2 - rimraf
6.0 β 6.1 - sass-embedded
1.87 β 1.97 - type-fest
4.41 β 5.3 - webpack
5.99 β 5.104 - webpack-bundle-analyzer
4.10 β 5.1
- Updated resolution rule needed when developing Hoist inline to ensure AG Grid hooks only resolve to a single instance.
- Requires
hoist-react >= 73.0. - Upgrade from
@xh/eslint-configv6.0 to v7.0 requires changes to Hoist Applications'eslintconfigurations: Rename the.eslintrcfile toeslint.config.jsand use the configuration found in Toolbox'seslint.config.jsas a new baseline example.
@xh/eslint-config 6.0 -> 7.0
- Added new
devServerOptionsconfig to override defaults passed to the WebpackdevServer.
- @babel/*
7.24 β 7.27 - babel-loader
9.2 β 10.0 - copy-webpack-plugin
12.0 β 13.0 - postcss
8.4 β 8.5 - sass-embedded
1.83 β 1.87 - webpack
5.97 β 5.99
- Requires
hoist-react >= 71.0with workaround for SASS/CSS processing issue caused by bad syntax in thereact-dateslibrary, which started throwing an error after the updates to sass in this dev-utils release.
- babel-loader
9.1 β 9.2 - rimraf
5.0 β 6.0 - sass-embedded
1.77 β 1.83(swaps out sass for sass-embedded) - sass-loader
14.2 β 16.0 - webpack
5.93 β 5.97 - webpack-cli
5.1 β 6.0 - webpack-dev-server
5.0 β 5.2 - webpackbar
6.0 β 7.0
- type-fest
added @ 4.x- ensures that apps have a recent version of this library installed as a dev dependency. (It's required to compile hoist-react typescript as part of the current combined Hoist + app build.) - webpack
5.92 β 5.93
- Requires
hoist-react >= 64.1with updated static assets within a new/publicdirectory. These are now copied at build time to the/public/output directory, alongside (and deferring to) any app-provided assets.
- webpack
5.91 β 5.92
- Updated the viewport
metatag within the staticindex.htmltemplate to remove constraints on user scaling. (See xh/hoist-react#3651.) - Default
baseUrlin development now has an adaptive protocol (http/https) based on browser location.
This makes it simpler for developers to configure their local development environment to use https.
- css-loader
6.10 β 7.1 - mini-css-extract-plugin
2.8 β 2.9 - sass
1.72 β 1.77 - sass-loader
14.1 β 14.2 - style-loader
3.3 β 4.0 - webpack
5.90 β 5.91
- Added another
resolveAliasesentry to ensure that the same instance of@ag-grid-communityis used when developing inline. This ensures there is only one version of ag-grid's hook contexts.
- Individual manifest.json files are now generated for each clientApp, with their starting URL set to the base URL for that app. Intended specifically for mobile apps added to device home screens, so they can load their intended client app directly without the need for additional redirects.
- A new
preloadBackgroundColorconfig will be applied to the preloader spinner, allowing apps to set a background color that matches their app's theme. This can help minimize a flash of white when the app first loads.
- The static
index.htmlfile used as an entry point template has been moved out of hoist-react and into this project, to aid in future dev-utils releases where changes to this file are required.
- Requires Hoist React v62+ with updated (and now only)
/static/index.htmlHTML entrypoint template.
- Chunking of bundled JS and CSS outputs updated to use webpack's default naming and splitting strategy, avoiding issues where builds with many client apps could generate bundle names that exceeded filename length limits.
- Builds can now generate more but smaller chunks, allowing browsers to better parallelize the initial download of an app's codebase.
- @babel/*
7.23 β 7.24 - sass
1.70 β 1.72 - webpack-dev-server
4.15 β 5.0
- Adds
xhClientAppsas a global constant for Hoist React v61+.
- Removed
clean-webpack-plugin- it is no longer maintained and was causing runtime issues in development. Its functionality is replaced by thecleanoption in theoutputsection of the webpack config.
- Updated to new webpack API for enabling HTTPS on local dev server. Note that the handling of the (rarely used)
devHttpsparameter has changed.
- Fixed chunk collection so that similarly named apps within a project do not load each other's app chunk.
- @babel/*
7.22 β 7.23 - copy-webpack-plugin
11.0 β 12.0 - css-loader
6.8 β 6.10 - html-webpack-plugin
5.5 β 5.6 - mini-css-extract-plugin
2.7 β 2.8 - postcss-loader
7.3 β 8.1 - rimraf
4.4 β 5.0 - sass
1.63 β 1.70 - sass-loader
13.3 β 14.1 - webpack
5.88 β 5.90 - webpack-bundle-analyzer
4.9 β 4.10 - webpackbar
5.0 β 6.0
- Updated
@xh/eslint-configto v6.0, for use with Typescript v5.1+ and Hoist React v59+.
- @xh/eslint-config
5.0 β 6.0 - webpack
5.84 β 5.87
- Added new
devServerOverlayconfig to control full-screen error overlay added by webpack-dev-server. Default to show compilation errors only, allowing devs to opt-in to compilation warnings and/or runtime errors.
- sass
1.62 β 1.63 - webpack
5.84 β 5.87 - webpack-bundle-analyzer
4.8 0 β 4.9
- Updated Babel configuration to enable key transforms via preset-env
includesdirective. Resolves issue with outdated plugin names in the prior config causing errors like "cannot find package @babel/plugin-proposal-class-properties" for apps that updated to Babel 7.22 (several key transforms were released under new names with the 7.22 release - see babel/babel#15614). - Updated special transformations for the FontAwesome icon dependencies to include their "thin" package, which was added to hoist-react last year and was not being properly tree-shaken.
- Updated minimal shim for required-only BlueprintJS icons to restore another bundle size reduction that had been lost with the update to Blueprint 4.x back in Hoist React v50. Update required a new path for import transformations and moved the shim file from hoist-react to this project.
- @babel/*
7.21 β 7.22 - css-loader
6.7 β 6.8 - postcss-loader
7.1 β 7.3 - sass
1.59 β 1.62 - sass-loader
13.2 β 13.3 - webpack
5.76 β 5.84 - webpack-cli
5.0 β 5.1 - webpack-dev-server
4.13 β 4.15
- @babel/*
7.20 β 7.21 - changelog-parser
2.8 β 3.0 - postcss-loader
7.0 β 7.1 - rimraf
3.0 β 4.4 - sass
1.56 β 1.59 - webpack
5.75 β 5.76 - webpack-dev-server
4.11 β 4.13
- Flipped options for Babel plugins related to decorator and class field proposals, reverting to
loose:false(the default) as per latest MobX docs.β οΈ Required for updated implementation of the@bindabledecorator in Hoist React v54.
- Typescript support for Hoist React v54+ via
@babel/plugin-transform-typescript. - Remains compatible for use with JS-only application projects and prior JS-only versions of Hoist React.
- @babel/*
7.18 β 7.20 - @xh/eslint-config
4.0 β 5.0 - babel-loader
8.2 β 9.1 - mini-css-extract-plugin
2.6 β 2.7 - sass
1.53 β 1.56 - sass-loader
13.0 β 13.2 - webpack
5.73 β 5.75 - webpack-cli
4.10 β 5.0 - webpack-dev-server
4.9 β 4.11
- This release features a major update to Webpack v5, along with updates to all supporting libraries.
- Requires Hoist React v48+.
- Imports from
package.jsonno longer support default export - you must import the entire package JSON as an object. This is most likely to be relevant inBootstrap.jswhere apps read the Ag-Grid version from its package. See this file within the XH Toolbox app for the updated syntax. - The syntax form passing variables to
yarnscripts in your package.json has changed - note the removal of the dot:- e.g.
webpack --env.prodBuild>webpack --env prodBuild - This will likely require updates to automated builds which pass in version / build tags via env args.
- e.g.
- If you have a mobile app, you must provide a wider range of favicons for display on devices. See https://github.com/xh/hoist-dev-utils/#favicons for more details.
- @babel/*
7.16 β 7.18 - @cerner/duplicate-package-checker-webpack-plugin
added @ 2.3(fork w/WP5 support) - @xh/eslint-config
3.1 β 4.0(includes eslint v8) - clean-webpack-plugin
3.0 β 4.0 - copy-webpack-plugin
6.3 β 11.0 - css-loader
5.2 β 6.7 - favicons-webpack-plugin
removed - html-webpack-plugin
4.5 β 5.5 - html-webpack-tags-plugin
2.0 β 3.0 - mini-css-extract-plugin
1.6β 2.6 - postcss
8.3 β 8.4 - postcss-loader
4.1 β 7.0 - sass
1.37 β 1.49 - sass-loader
10.1 β 13.0 - style-loader
2.0 β 3.3 - terser-webpack-plugin
4.2 β 5.3 - webpack
4.44 β 5.73 - webpack-cli
3.3 β 4.10 - webpack-dev-server
3.11 β 4.9 - webpackbar
4.0 β 5.0
- Supports new
reactProdModeflag passed toconfigureWebpack(). Use to force React into production mode during local development. (Production builds always use prod mode, as before.)
- @xh/eslint-config
3.0 β 3.1
- @babel/*
7.15 β 7.16 - autoprefixer
10.3 β 10.4 - webpack-bundle-analyzer
4.4 β 4.5
- Pass flag to HTML template to indicate if preload spinner is present and should be rendered.
- Respected by
hoist-react >= v43.0.2.
- Respected by
- Support for copying the animated png used by Hoist React v43+ as a preload spinner into /public, so it can be loaded and shown while the JS app downloads and prepares to render.
- New
devHttpsconfig adds support for running the local webpack-dev-server over SSL.
- Add newly required babel plugin config to avoid console warnings during compilation.
- @babel/*
7.14 β 7.15 - autoprefixer
10.2 β 10.3 - sass
1.35 β 1.37
- @babel/*
7.13 β 7.14 - mini-css-extract-plugin
1.4 β 1.6 - post-css
8.2 β 8.3 - sass
1.32 β 1.35
- Updated default
targetBrowsersconfig for Babel-based transpiling to replaceEdge >= 18withlast 2 Edge versions(v89-90 as of this release). This removes a certain amount of transpiled code generated to support Edge 18.- Edge 18 was the last version released before that browser's switch to the Chromium engine in January 2020.
- β Any apps that require Edge 18 support and observe issues with this change can specify an
appropriate set of targets within their
webpack.config.jsfile.
- New
faviconManifestConfigoption added toconfigureWebpack()build script. Allows customization of certain options related to adding a mobile app to a device home screen, as well as "installing" an app via Chrome's "create shortcut" option.- Default options also improved to properly set application name, version, and non-empty description (defaults to appName, but squelches console warning).
- See https://github.com/itgalaxy/favicons#usage for supported options.
- New
parseChangelogoption added toconfigureWebpack()build script. Set totrue(default) to parse an applicationCHANGELOG.mdfile at the root of your project directory for import by Hoist React'sXH.changelogService, which will make its contents available to app users. (Changelog UI features require @xh/hoist v39.1+.)
- The
configureWebpack()build script function is now async, to support internal async calls. This is supported out-of-the-box by Webpack, and should not require any application-level changes.
- changelog-parser
added @ 2.8 - css-loader
5.0 β 5.2 - mini-css-extract-plugin
1.3 β 1.4
- Includes updated
@xh/eslint-config@3.0with switch to@babel/eslint-parser- fixes auto-updates in toolchain dependencies that started to break linting. - Additional type mapping in
module.rulesto support.mjsdistros out of thestylislibrary, included as a transitive dep byreact-select@v4.
- @babel/*
7.12 β 7.13 - @xh/eslint-config
2.3 β 3.0 - autoprefixer
10.0 β 10.2 - case-sensitive-paths-webpack-plugin
2.3 β 2.4 - postcss
8.1 β 8.2 - sass
1.29 β 1.32 - webpack-bundle-analyzer
4.2 β 4.4
- New
sourceMapsoption added toconfigureWebpack()build script. Apps can now control sourceMap generation, including specifying'devOnly'to disable maps in production (a recommended security practice for untrusted environments). Default behavior is unchanged.
- @babel/*
7.11 β 7.12 - @types/react
16.9 β 17.0 - autoprefixer
9.8 β 10.0 - babel-loader
8.1 β 8.2 - copy-webpack-plugin
6.1 β 6.3 - css-loader
4.3 β 5.0 - file-loader
6.1 β 6.2 - mini-css-extract-plugin
0.11 β 1.3 - postcss
added @ 8.1 - postcss-flexbugs-fixes
4.2 β 5.0 - postcss-loader
3.0 β 4.1 - sass
1.26 β 1.29 - sass-loader
9.0 β 10.1 - style-loader
1.2 β 2.0 - webpack-bundle-analyzer
3.9 β 4.2
- When paired with
hoist-react >= v36.1.0, this release of dev-utils will avoid the use of any inline script tags within theindex.htmlfile generated for each app. Instead, it will copy and inject a link to an unbundled copy of thestatic/preflight.jsscript supplied by hoist-react.- This allows for stricter Content Security Policy (CSP) headers - see Toolbox's nginx config @
docker/nginx/app.conffor an example.
- This allows for stricter Content Security Policy (CSP) headers - see Toolbox's nginx config @
- copy-webpack-plugin
6.0 β 6.1 - css-loader
4.2 β 4.3 - file-loader
6.0 β 6.1 - html-webpack-plugin
4.3 β 4.5 - html-webpack-tags-plugin
added @ 2.0 - mini-css-extract-plugin
0.9 β 0.11 - terser-webpack-plugin
4.1 β 4.2 - webpack-bundle-analyzer
3.8 β 3.9
Resolutions added for some transitive dependencies that had grown excessively stale and were triggering console warnings on install/upgrade. Reviewed changelogs for these projects and did not see any indication that they would be incompatible.
- @babel/core
7.10 β 7.11 - css-loader
3.6 β 4.2 - favicons-webpack-plugin
3.0 β 4.2 - mini-css-extract-plugin
0.9 β 0.10 - terser-webpack-plugin
3.0 β 4.1 - webpack
4.43 β 4.44
- Fix check to detect if replacement stub file for Blueprint icons actually exists.
- (Note v5.2.1 release built but scratched due to error in fix above.)
- App builds now load only a handful of
@blueprintjsicons that are actually used by components. This change significantly reduces build size as BP ships a large set of generic SVG icons and bundles them all by default, but Hoist already includes FontAwesome as our standard icon library.- If the full set of Blueprint icons are required for a special app use-case,
configureWebpack()now supports a newloadAllBlueprintJsIconsargument to revert to the previous behavior. - Requires Hoist React v35.2+ to supply the more minimal set of icon SVGs. Older versions of HR are compatible with this version of dev-utils, but the icons optimization will not be activated.
- If the full set of Blueprint icons are required for a special app use-case,
- @xh/eslint-config
2.2 β 2.3
This version switches to the newly-recommended dart-sass library (aka the sass npm package) for
SASS compilation. This replaces the often-problematic usage of node-sass, which required OS-specific
tooling to support building native code on developer workstations.
- css-loader
3.5 β 3.6 - node-sass
removed - sass
added @ 1.26 - sass-loader
8.0 β 9.0
As of this release, Hoist is now licensed under the popular and permissive Apache 2.0 open source license. Previously, Hoist was "source available" via our public GitHub repository but still covered by a proprietary license.
We are making this change to align Hoist's licensing with our ongoing commitment to openness, transparency and ease-of-use, and to clarify and emphasize the suitability of Hoist for use within a wide variety of enterprise software projects. For any questions regarding this change, please contact us.
This release includes updates to a number of tooling dependencies, including some major updates. However no changes to application code or configs should be required.
- @babel/core
7.9 β 7.10 - @babel/preset-env
7.9 β 7.10 - @babel/preset-react
7.9 β 7.10 - autoprefixer
9.7 β 9.8 - copy-webpack-plugin
5.1 β 6.0 - css-loader
3.4 β 3.5 - favicons-webpack-plugin
2.1 β 3.0 - html-webpack-plugin
3.2 β 4.3 - node-sass
4.13 β 4.14 - style-loader
1.1 β 1.2 - terser-webpack-plugin
2.3 β 3.0 - url-loader
4.0 β 4.1 - webpack
4.42 β 4.43 - webpack-bundle-analyzer
3.6 β 3.8 - webpack-dev-server
3.10 β 3.11
- New Babel preset-env
bugfixesoption defaulted to true. Intended to to further minimize transpilation to ES5 where not required by targeted browsers. See Babel Docs. - New
babelPresetEnvOptionsconfig accepted to allow direct override / customization of options passed to the babel-loader preset-env preset (including disabling the new option above if problematic). - New
dupePackageCheckExcludesconfig accepted to suppress duplicate package warnings by name. Defaulted to exclude longstanding (but not problematic) warning fortslib.
- @babel/core
7.8 β 7.9 - @babel/preset-env
7.8 β 7.9 - @babel/preset-react
7.8 β 7.9 - babel-loader
8.0 β 8.1 - file-loader
5.0 β 6.0 - url-loader
3.0 β 4.0
- The
/client-app/publicdirectory and its contents are now copied into the build output. Can be used to include static assets you wish to link to without using an import to run through the url or file-loader.
- copy-webpack-plugin:
added @ 5.1 - webpack:
4.41 β 4.42
- Fixed favicon generation with upgrade of plugin - generated HTML again includes tags for correctly sized favicons across a variety of platforms.
- favicons-webpack-plugin:
1.0 β 2.1
- @babel/core (and related)
7.7 β 7.8 - css-loader
3.2 β 3.4 - mini-css-extract-plugin
0.8 β 0.9 - style-loader
1.0 β 1.1 - terser-webpack-plugin
2.2 β 2.3 - webpack-dev-server
3.9 β 3.10
- @babel/plugin-proposal-nullish-coalescing-operator
7.4 β 7.7 - @babel/plugin-proposal-optional-chaining
7.6 β 7.7 - file-loader
4.2 β 5.0 - url-loader
2.2 β 3.0
- Disable Terser mangling of identifiers / variables due to intermittent and difficult to debug issues with it breaking code, especially when run on already-packaged libraries. Disabling does increase bundle size, although not by much on a relative basis.
- @babel/core (and related)
7.6 β 7.7 - autoprefixer
9.6 β 9.7 - node-sass
4.12 β 4.13 - terser-webpack-plugin
2.1 β 2.2 - webpack-bundle-analyzer
3.5 β 3.6 - webpack-dev-server
3.8 β 3.9 - chalk (removed)
- Bundled
@types/lodashand@types/reactas dev dependencies for developer convenience / better hinting options from IDEs, including support for types such asReactNodein jsdoc comments.
- @babel/preset-react
7.0 β 7.6
- Add new
terserOptionsconfig as hook for app builds to customize Terser minification directly if required, although defaults should continue to be fine as they are. Addedkeep_classnames: trueto the Terser defaults now that we are emitting classes.
- url-loader
2.1 β 2.2
(4.3.2 was an accidental no-op build π)
- @xh/eslint-config
2.1 β 2.2
- Removes a previous workaround in
configureWebpackto always transpile JS code down to ES5 (implemented by pushing IE11 onto thetargetBrowsersconfig passed tobabel/preset-env). Babel will now actually use Hoist's default target browsers (recent versions of Chrome, Safari/iOS, and Edge) resulting in a build output with significantly less transformation of the source code. - Apps or client environments that find they need support for less capable browsers (e.g, a secure
mobile browser using an older JS engine) can pass a custom
targetBrowsersarray to adjust the output.
- webpack
4.40 β 4.41
- Support for the nullish coalescing operator
let foo = bar ?? 'default'via the@babel/plugin-proposal-nullish-coalescing-operatorplugin.
- Tweak to skip logging (spurious) packaged Hoist version when running with Hoist inline.
- @xh/eslint-config
2.0 β 2.1.1 - terser-webpack-plugin
2.0 β 2.1
This release includes a number of major/minor updates for the build toolchain. Most notably, it
updates Babel and its plugins from 7.4 β 7.6, which removes support for the @babel/polyfill
plugin we had been using in favor of core-js@3 for polyfills (as of 7.5).
- Support for the nullsafe operator
let foo = bar?.bazvia the@babel/plugin-proposal-optional-chainingplugin. - Support for
Promise.allSettled()via thecore-jspolyfills. Hoist v28 will remove its dependency on the RSVP library which previously provided this utility.
- Requires Hoist React v28+, which adds a required runtime dependency on
core-jsfor polyfills as well as a new static import file referenced byconfigureWebpack()to provide a once-per-entry-point import ofcore-jsandregenerator-runtime.
- @babel
7.4 β 7.6 - @xh/eslint-config
1.2 β 2.0 - webpack
4.31 β 4.40 - Multiple other library updates for loaders, plugins, and other utils.
- Ensure react is resolved to a single instance of the library when running in
inlineHoistmode. (Avoids errors when attempting to call hooks that will throw if called across multiple instances of the library.)
- @xh/eslint-config
1.1.1 β 1.2.0- react-hooks plugin and linting rules.
- Added new
checkForDupePackagesflag, default true to mirror previous behavior added in 3.7.5. Set to false to disable duplicate package checking / warnings if unwanted.
- @xh/eslint-config
1.1.0 β 1.1.1- whitelist WebSocket global.
- Added Webpack
DuplicatePackageCheckerPluginto warn on build if non-overlapping dependency requirements force the inclusion of a package multiple times. (This was happening with lodash, unexpectedly.)
- Updated lodash to latest patch release (security fixes)
- Restored webpack-cli @ 3.3.2
- Removed webpack-cli (this made v3.7.3 unusable)
- node-sass
4.11 β 4.12 - webpack
4.30 β 4.31 - Other minor/patch updates
- webpack
4.29 β 4.30 - webpack-dev-server
3.2 β 3.3 - Other minor/patch updates
- Babel
7.3 β 7.4 - autoprefixer
9.4 β 9.5 - webpack-cli
3.2 β 3.3
βοΈ info@xh.io | https://xh.io
Copyright Β© 2026 Extremely Heavy Industries Inc.