Releases: player-ui/player
0.15.4-next.0
🐛 Bug Fix
- Propagate styles in composable asset #835 (@justin-medeiros)
Authors: 1
- Justin Medeiros (@justin-medeiros)
0.15.3
Release Notes
guard against async released exceptions when retrieving state (#853)
Guard against released exceptions when retrieving state since we can turn that into a ReleasedState.
Fix HermesNode property access on released JSI objects (#825)
Added a defensive guard in HermesNode so property reads on a released runtime/object fail safely by throwing a PlayerRuntimeException with context instead of a fatal native NPE.
Added regression tests:
- A deterministic unit test for “released JSI object property read”
- A small concurrency test that reads player.state while player.release() is happening
🐛 Bug Fix
- Release main #858 (@intuit-svc)
- guard against async released exceptions when retrieving state #853 (@sugarmanz)
- Manage memory leak #855 (@JunDangIntuit)
- Refactor stateType from String to NavigationFlowStateType enum #850 (@JunDangIntuit)
- Add ios-review skill with iOS code conventions #848 (@KVSRoyal)
- Restore Xcode local development #847 (@KVSRoyal @spentacular)
- fix: create ErrorState with error.message is undefined #845 (@cehan-Chloe)
- Use Xcode 26.4.0 in CI/CD #779 (@KVSRoyal)
- Fix the memory leak for large payloads #841 (@JunDangIntuit)
- Fix HermesNode property access on released JSI objects #825 (@kharrop @brocollie08)
Authors: 8
- @brocollie08
- @intuit-svc
- @JunDangIntuit
- Chloe (@cehan-Chloe)
- Jeremiah Zucker (@sugarmanz)
- Kelly Harrop (@kharrop)
- Koriann South (@KVSRoyal)
- Spencer Hamm (@spentacular)
0.15.2
Release Notes
Use workspace:^ for all internal workspace dependencies (#804)
Update core/react packages to use use peer versions for all internal player dependencies.
🐛 Bug Fix
- Release main #833 (@intuit-svc)
- Refactor external action plugin #832 (@spentacular)
- catch runtime released exceptions from lifecycle callbacks #764 (@sugarmanz)
- Use
workspace:^for all internal workspace dependencies #804 (@Copilot @KetanReddy @spentacular) - Cancel stale-map polyfill animation on page transition #826 (@cehan-Chloe)
- Fix: Compose android view must launch on main thread #820 (@A1shK @kharrop)
- Removing docs-preview from forks #824 (@kharrop)
- Add Claude Code GitHub Workflow #822 (@spentacular)
- Use XLR pipeline for Common Types Plugin #807 (@KetanReddy)
📝 Documentation
- Add CLAUDE.md with guidelines for reporting and reviewing pull requests #827 (@spentacular)
Authors: 8
- @A1shK
- @Copilot
- @intuit-svc
- Chloeeeeeee (@cehan-Chloe)
- Jeremiah Zucker (@sugarmanz)
- Kelly Harrop (@kharrop)
- Ketan Reddy (@KetanReddy)
- Spencer Hamm (@spentacular)
0.15.1
🐛 Bug Fix
- Release main #823 (@intuit-svc)
- Add beforeTransition hook to Flow and parity test [iOS] #803 (@bsatyani @spentacular)
- Fix flaky tests in ManagedPlayerUITest #813 (@JunDangIntuit)
- fix autoscroll issue due to stale scrollableMap #815 (@cehan-Chloe)
- HBC #808 (@sugarmanz @brocollie08)
- CI: Consolidate Test/Coverage Steps for JS/JVM targets #810 (@KetanReddy)
- Updated CollectionAsset to render the label #811 (@JunDangIntuit)
- Snapshot API nested list recursive processing #809 (@brocollie08)
- Publicize Node.snapshot API #806 (@brocollie08)
- Cleanup Managed Player tests and remove async act #795 (@spentacular)
- Add Player Base Image for Codespaces #800 (@KetanReddy)
📝 Documentation
- Add guide to creating a CLI Preset #801 (@KVSRoyal)
- Document guide to writing DSL Plugin and Player CLI Plugin #792 (@KVSRoyal)
- Document
PlayerLanguageService#787 (@KVSRoyal)
Authors: 9
- @brocollie08
- @bsatyani
- @intuit-svc
- @JunDangIntuit
- Chloeeeeeee (@cehan-Chloe)
- Jeremiah Zucker (@sugarmanz)
- Ketan Reddy (@KetanReddy)
- Koriann South (@KVSRoyal)
- Spencer Hamm (@spentacular)
0.15.0
Release Notes
Remove async node tracking from core and rely on node-based caching (#777)
- Remove async node references from player core resolver.
- Allow the resolver to update using node changes instead of just data changes
- Add
markAsChangedfunction to theViewControllerto support triggering updates caused by node changes. - Update
AsyncNodePluginandAsyncNodePluginPluginto make use of the above. - Fixed a bug causing assets loaded using the
AsyncNodePluginto crash on android
Expand Docs on Using XLRs for Validations (#784)
Docs: Expanded content validation Docs
Remove chakra/emotion and unused Storybook components (#776)
- Remove Chakra/Emotion dependencies in Storybook.
feat(storybook): upgrade to version 10.1.4 (#767)
Upgraded Storybook from version 7.6.10 to latest 10.1.4. Also fixed broken images within stories and initial value for dark mode for the editors.
Add Back in Stamping for JavaScript Builds (#761)
Fix stamping in core/react builds for Player version and commit used to build the bundle
Markdown handle empty (#752)
Add option to provide a handler for when where nothing is returned from the markdown mapping.
Maintainance: Dependency Updates (#745)
Minor dependency updates to address security bulletins
🚀 Enhancement
- add asset render errors to each platform #765 (@tmarmer)
- feat(storybook): upgrade to version 10.1.4 #767 (@dtychshenko)
- Markdown handle empty #752 (@shahabdsh @KetanReddy)
🐛 Bug Fix
- Release main #799 (@intuit-svc)
- fix ios player not detecting view change when same flow reloads #796 (@nancywu1)
- Fix: CI Timeout During Docs Build #794 (@kharrop)
- Remove async node tracking from core and rely on node-based caching #777 (@tmarmer)
- Expand Docs on Using XLRs for Validations #784 (@KetanReddy @kharrop)
- Remove chakra/emotion and unused Storybook components #776 (@KetanReddy)
- fix tests with broken context mocks in android/player #774 (@tmarmer)
- fix(react-player): expose viewUpdateSubscription to render alt comp's #762 (@dtychshenko)
- Add Back in Stamping for JavaScript Builds #761 (@KetanReddy)
- Turn verbose back on for publishing while pipeline is unstable #759 (@KetanReddy)
- Set timeout of publish stage to 40m #758 (@KetanReddy)
- add full checkout for both stages and remove all contribs from auto #757 (@spentacular)
- fix circle checkout to not use blobless #756 (@spentacular)
- Maintainance: Dependency Updates #745 (@KetanReddy)
📝 Documentation
Authors: 8
- @intuit-svc
- @nancywu1
- Dmitriy Tychshenko (@dtychshenko)
- Kelly Harrop (@kharrop)
- Ketan Reddy (@KetanReddy)
- Shahab Deljoo (@shahabdsh)
- Spencer Hamm (@spentacular)
- Thomas Marmer (@tmarmer)
0.14.1
Release Notes
iOS ManagedPlayer only call unload in loading state (#749)
iOS Managed Player fix for SwiftuiPlayer's context unload being called in loaded state
- Fix: Only call context.unload if we are in a loading state not when its in loaded state
refactor: replace default exports with named exports (#732)
All default exports have been replaced with named exports across core packages, plugins, and React components.
Affected packages:
@player-ui/make-flow: identify function@player-ui/partial-match-registry: createObjectMatcher function@player-ui/player: Logger classes and view plugins@player-ui/react: ReactPlayer component and OnUpdatePlugin@player-ui/metrics-plugin: MetricsCorePlugin class@player-ui/auto-scroll-manager-plugin-react: scrollIntoViewWithOffset
Fix Broken Links in Doc Site (#737)
Fix a handful of broken links on the doc site
Codecov Bundle Analysis for JS Targets (#736)
Upload JS bundle size analysis to codecov
Adding docs-preview workflow, Canary release PR comments (#720)
This PR contains a few docs-related quality of life improvements, details below:
- Adds a pr-comment workflow that supports command-triggered PR comments - including:
/canary,/docs - Adds a docs preview workflow that is triggered when a collaborator adds a comment including
/docs, similar to our/canaryworkflow. This workflow will push static docs files to https://github.com/player-ui/player-ui.github.io and publish a URL that includes PR docs changes. - Adds a pr-closed workflow that will run when a PR is either closed manually or merged, which will automatically clean up the pr folder in the https://github.com/player-ui/player-ui.github.io. This workflow can be expanded on in the future if needed.
- Adds a PR comment that includes Canary release information after the "/canary" workflow is done and a new release becomes available, making it more clear to users which version is tied to when the command was run.
- Updated full release job to be dependent on docs build success
- Updated maybe_release to depend on android tests as well
export soloader from hermes (#733)
Export com.facebook.soloader:soloader from hermes artifacts
replace parallel hook with series hook in async node (#718)
- make the
onAsyncNodehook ofAsyncNodePluginanAsyncSeriesBailHookto allow taps to returnundefinedin order to skip resolving the node. - Remove
asyncNodehook fromAsyncNodePluginPluginbecause it never gets called or tapped.
allow for arrays of expressions in reference action asset dsl (#726)
- Extend type on
Actiondsl component props to allow forexpto be an array of expressions.
fix caching issues with resolved async nodes. (#716)
- fix an issue where resolving async nodes directly would sometimes not track correctly for the purpose of invalidating the cache.
🐛 Bug Fix
- Release main #751 (@intuit-svc)
- iOS ManagedPlayer only call unload in loading state #749 (@nancywu1)
- enable logs during cache check for android tests #747 (@sugarmanz)
- Improve PNPM security for installing packages #729 (@spentacular @KetanReddy @KVSRoyal)
- refactor: replace default exports with named exports #732 (@dtychshenko)
- Add docs for consuming Swift package #739 (@KVSRoyal)
- Update codeowners #743 (@spentacular)
- Lowercase URLs for docs preview #741 (@KVSRoyal)
- Codecov Bundle Analysis for JS Targets #736 (@KetanReddy)
- Adding docs-preview workflow, Canary release PR comments #720 (@kharrop)
- add asyncnodeplugin to podspec and package.swift #734 (@nancywu1 @spentacular)
- export soloader from hermes #733 (@sugarmanz)
- replace parallel hook with series hook in async node #718 (@tmarmer)
- allow for arrays of expressions in reference action asset dsl #726 (@tmarmer)
- fix caching issues with resolved async nodes. #716 (@tmarmer)
📝 Documentation
- Fix Broken Links in Doc Site #737 (@KetanReddy)
Authors: 9
- @intuit-svc
- @nancywu1
- Dmitriy Tychshenko (@dtychshenko)
- Jeremiah Zucker (@sugarmanz)
- Kelly Harrop (@kharrop)
- Ketan Reddy (@KetanReddy)
- Koriann South (@KVSRoyal)
- Spencer Hamm (@spentacular)
- Thomas Marmer (@tmarmer)
0.14.0
Release Notes
Remove support for J2V8 on Android (#712)
With the Android 15 16 KB page size requirement, Android Player is dropping support for J2V8 as it fails to meet those requirements. It will no longer be a transitive dependency, requiring the desired runtime module to be declared explicitly as a dependency of the app.
For example, Hermes is now the recommended runtime for Android Player use cases, and can be configured simply via including the dependency:
dependencies {
implementation("com.intuit.playerui", "hermes-android", $PLAYER_VERSION)
}add asyncNodePosition to createAsyncTransform options (#714)
- Added
asyncNodePositionas an option tocreateAsyncTransform. This lets user choose if the generated async node goes to the top or bottom of the generated multi-node.
update createAsyncTransform to allow for different node types (#708)
- Update the
createAsyncTransformutil to consider different incoming node types coming fromgetNestedAssetoption. Originally, this assumed that it would always be anassetnode type and would asset-wrap the node, but to allow for some additional flexibility, the following rules are applied:- Asset nodes and Applicability nodes with a value that is an asset node get asset wrapped like before.
- multi-nodes have their values spread into the initialized multi-node to keep the structure flat
- everything else gets added to the initialized multi-node as-is.
Migrate to Bazel 8 (#700)
- Update to Bazel 8
- Android SDK/NDK now only needed for Android targets
- Applicable to CI and local development
- Coverage for JVM modules
- Updated
justcommands and documentation
improve async node flattening and apply resolver cache to async nodes (#694)
- Simplify async node flattening to just check for multi-nodes inside multi-nodes after async nodes are resolved.
- Introduce async node id cache in the resolver to allow async nodes to be marked as dirty and limit scope of resolver update to the specific node and use cache for the rest of the update.
support boolean values in binding queries (#703)
- Update binding parser to allow for boolean value nodes
- Only use boolean values in query values as parts of the path should always be strings or numbers
🚀 Enhancement
- Remove support for J2V8 on Android #712 (@sugarmanz)
- improve async node flattening and apply resolver cache to async nodes #694 (@tmarmer)
🐛 Bug Fix
- Release main #722 (@intuit-svc)
- Release main #721 (@intuit-svc)
- add asyncNodePosition to createAsyncTransform options #714 (@tmarmer)
- Fix Android publishing #715 (@sugarmanz)
- Docs: Adding pages for complexity and metrics plugins, fixing redirects, restoring getting-started content #707 (@kharrop)
- update createAsyncTransform to allow for different node types #708 (@tmarmer)
- Migrate to Bazel 8 #700 (@sugarmanz @KetanReddy @KVSRoyal)
- Document common iOS Cache error and how to fix it #706 (@KVSRoyal)
- support boolean values in binding queries #703 (@tmarmer)
⚠️ Pushed to main
- fix docs build (@sugarmanz)
📝 Documentation
- Supplement Android + JVM platform documentation #719 (@sugarmanz)
Authors: 6
- @intuit-svc
- Jeremiah Zucker (@sugarmanz)
- Kelly Harrop (@kharrop)
- Ketan Reddy (@KetanReddy)
- Koriann South (@KVSRoyal)
- Thomas Marmer (@tmarmer)
0.13.0
Release Notes
update reference assets to support chat-ui demo from core plugin (#702)
- Update core reference assets plugin to handle chat-ui mock across platforms, including setup the async node plugin at the core level
add option to report unused disable directives in eslint (#697)
- add
linterOptions.reportUnusedDisableDirectives: "error"to eslint config
Docs: Updating Astro/Starlight, PageFind, Sidebar Enhancements (#698)
Updating Astro and Starlight to support linkable headers and other features, updating pagefind to support search enhancements, and updated sidebar navigation to simplify logic and highlight getting started.
track inProgressNodes to prevent duplicate async processes (#693)
- fix an issue where promises generated by
onAsyncNodecould be generated multiple times if a view update caused the same async node to get resolved again before the promise completed.
update core async node plugins to catch and handle errors (#666)
- Update the
AsyncNodePluginto include a new hookonAsyncNodeErrorfor catching errors triggered when resolving async nodes. - Not using the hook or failing to return fallback content will allow the error to bubble up and fail the player state.
- Fix cyclic deps between
//plugins/async-node/coreand//plugins/reference-assets/core - Scope the content cache on the
async-nodeto the view that generated it to prevent re-use of the cache across views, flows or player instances.
Build Tweaks (#685)
- Update codecov and android orb to latest
- Run iOS lint as a separate parallel step
- Remove rosetta and JDK install from mac stage
Fix ASYNC_ACTION Expressions Being Fired Multiple Times (#691)
Fix Issue with awaited ASYNC_ACTION state's expressions being fired multiple times if the Previous State was as ACTION state by deferring the awaited execution results rather than handling them in an async tap
add bench test for streaming player (#680)
- Add initial bench test to async-node plugin
- Add step to run bench tests in
justand in CI.
remove DefaultViewPlugins and move implementation into ViewController (#689)
- Remove
DefaultViewPluginsand add all plugins it uses into theViewController - Add and export types for the hooks on the
ViewControllerandViewInstance
Async Expression Support (#649)
Adds experimental support for asynchronous expressions within Player. This functionality should be consider in beta and effectively an unstable API, however the API of the ASYNC_ACTION itself should be considered stable.
The new built-in expression await can be used to block execution of expressions until the underlying Promise is resolved. The await expression can only be used when the expression-evaluator enables async expressions to be evaluated, which is currently only supported on ASYNC_ACTION navigation nodes. Async expressions can be used in a regular ACTION node but they can not be awaited on. Using await in an ACTION node will cause a runtime exception.
Fixes for manager becoming stale (#683)
Updates to the React Managed Player to ensure updates to the manager terminate the running instance and start a brand new instance.
🚀 Enhancement
- update core async node plugins to catch and handle errors #666 (@tmarmer @KetanReddy)
- Async Expression Support #649 (@adierkens @rafbcampos @KetanReddy)
🐛 Bug Fix
- Release main #704 (@intuit-svc)
- iOS: calling onupdate in main thread #701 (@nancywu1 @tmarmer @intuit-svc)
- update reference assets to support chat-ui demo from core plugin #702 (@tmarmer)
- add option to report unused disable directives in eslint #697 (@tmarmer @KetanReddy)
- Docs: Updating Astro/Starlight, PageFind, Sidebar Enhancements #698 (@KetanReddy @kharrop)
- track inProgressNodes to prevent duplicate async processes #693 (@tmarmer)
- fix: import queueMicrotask #696 (@sugarmanz)
- Fix iOS Build Stage #695 (@KetanReddy)
- Build Tweaks #685 (@KetanReddy)
- Fix
ASYNC_ACTIONExpressions Being Fired Multiple Times #691 (@KetanReddy) - add bench test for streaming player #680 (@tmarmer)
- remove DefaultViewPlugins and move implementation into ViewController #689 (@tmarmer)
- fix iOS ManagedPlayerViewModel memory leak #688 (@cehan-Chloe)
- Fixes for manager becoming stale #683 (@spentacular)
- update codeowners file with teams #682 (@spentacular)
Authors: 10
- @intuit-svc
- @nancywu1
- Adam Dierkens (@adierkens)
- Chloeeeeeee (@cehan-Chloe)
- Jeremiah Zucker (@sugarmanz)
- Kelly Harrop (@kharrop)
- Ketan Reddy (@KetanReddy)
- Rafael Campos (@rafbcampos)
- Spencer Hamm (@spentacular)
- Thomas Marmer (@tmarmer)
0.12.0
Release Notes
Fix default-view-plugin sort order (#679)
Change how player.hooks.view call is handled to ensure tap order comes from default plugins first.
Revert "Asset deprecation (#639)" + add async hydration tracker plugin as default (#676)
- Revert #639 for performance reasons
AsyncHydrationTrackerPluginis now a defaultAndroidPlayerPlugin
fix issues with react 18 suspense (#670)
- Fix dependencies using React 17 in Player
- Fix
Suspensestaying triggered viauseEffectcallbacks - Convert
useSubscribedStateto useuseSyncExternalStoreinstead ofuseEffectfor callbacks
feat(common-expressions): add substr and split string functions (#671)
Added substr and split functions to common expressions plugin that mirror their javascript implementation
Fix transforms on assets with applicability (#668)
Move AssetTransformCorePlugin application after applicability and switch view plugins to ensure transforms properly apply to conditional assets.
Updated docs, platform param (#660)
Updated contributing docs to include information around how the docs site is generated, re-added platform param capability so that the URL updates based on platform tab, updated team page.
Export Underlying Expressions from Common Expression Plugin (#657)
Update Common Expressions Plugin to export underlying functions to allow them to be converted to DSL functions as well as export them as XLRs for consumption by the XLR SDK.
🚀 Enhancement
- Revert "Asset deprecation (#639)" + add async hydration tracker plugin as default #676 (@sugarmanz)
- Renew hydration scope, wrap composableAsset and apply the modifiers to all assets through the compose call #630 (@A1shK @brocollie08 @nancywu1)
🐛 Bug Fix
- Release main #681 (@intuit-svc)
- Fix default-view-plugin sort order #679 (@spentacular)
- fix issues with react 18 suspense #670 (@spentacular)
- Revert "Fix/react 18 cleanup" #675 (@spentacular)
- Fix/react 18 cleanup #674 (@spentacular @KetanReddy)
- feat(common-expressions): add substr and split string functions #671 (@tusharagrawa @KetanReddy)
- Update Mac Build Executor to use M4 Pro Medium over M2 Pro Medium #673 (@KetanReddy)
- Fix transforms on assets with
applicability#668 (@sugarmanz) - Updated docs, platform param #660 (@kharrop)
- Central Portal Migration #662 (@sugarmanz)
- Prebuild Publishing Targets to Miinimize Chances of Releases Breaking #650 (@KetanReddy)
- Export Underlying Expressions from Common Expression Plugin #657 (@KetanReddy)
- Compose compile only #642 (@brocollie08)
- remove new line at end of VERSION file #659 (@brocollie08)
Authors: 9
- @A1shK
- @brocollie08
- @intuit-svc
- @nancywu1
- Jeremiah Zucker (@sugarmanz)
- Kelly Harrop (@kharrop)
- Ketan Reddy (@KetanReddy)
- Spencer Hamm (@spentacular)
- Tushar Agrawal (@tusharagrawa)
0.11.2
Release Notes
fix: CheckPathPlugin throws error with chained AsyncNode (#621)
fix CheckPathPlugin throws error with chained AsyncNode
🐛 Bug Fix
- iOS Anytype make unknowndata equatable #654 (@nancywu1)
- fix: CheckPathPlugin throws error with chained AsyncNode #621 (@cehan-Chloe @brocollie08)
- Async node structure reorg #623 (@brocollie08)
Authors: 3
- @brocollie08
- @nancywu1
- Chloeeeeeee (@cehan-Chloe)