Releases: GSTJ/magic-modal
Release list
Magic Modal Release 9.2.0
9.2.0 (2026-07-31)
🔨 Bug Fixes 🔨
- ci: ship the README in the npm tarball (#318) (c511b69), references react-native-magic-modal#release
- docs: polish interactive demos and responsive frames (#317) (2f95cd4)
- docs: stop the footer column clipping between 701px and 812px (#319) (40cfb2f)
🌠 New Features 🌠
➰ What a drag! ➰
Magic Modal Release 10.1.1
10.1.1 (2026-07-31)
🔨 Bug Fixes 🔨
-
release: ship the README in the tarball whichever way the publish is driven (#345)
packages/modal/README.mdis gitignored and generated bycopy:readme, which only ran because turbo hangs it off thereleasetask. Publishing from the package directory packed without it, so 10.1.0 landed on npm with an empty readme. It is aprepackscript now, which npm and pnpm both run before packing, so the tarball gets it from any entry point.
Same code as 10.1.0 otherwise. The feature notes for this line are in the 10.1.0 release.
Magic Modal Release 10.1.0
10.1.0 (2026-07-31)
🔨 Bug Fixes 🔨
- docs: show the download count people actually recognize (#342) (b8f9a3f), references #335
- release: drop the em-dashes from the deprecate message (#340) (62ce629)
🌠 New Features 🌠
-
modal: cut the web bundle by 83% (32.2 -> 5.3 KB gzip) going full DOM (#336) (89ae965), references #329
The browser entry no longer imports react-native-web. The web modal renders as plain DOM, with enter/exit driven by the Web Animations API and a static
<style>element for layout, andreactis the only remaining import. Measured with esbuild: 96.3 KB minified / 32.2 KB gzip before, 13.9 KB / 5.3 KB after. A realnext buildof examples/next-web drops 23.8 KB gzip of client JS.Web-only type and DOM changes come with it, and they land in a minor per this repo's versioning policy (patch never breaks, minor may, major is reserved for era-defining refactors like the v10 rename):
ModalProps["style"]andNewConfigProps["style"]:StyleProp<ViewStyle>->React.CSSProperties. RN style objects (arrays, registered handles, RN-only keys) are detected at runtime and warn once in dev with a migration table instead of being applied.entering/exitingremoved from the web type (Reanimated builders, already ignored on web).dist/index.d.tsno longer references react-native or reanimated types. The native entry's types are unchanged.- The backdrop is now
role="presentation", and elements carry stablemagic-modal-*class names instead of RNW's generatedcss-*ones. CSS targeting RNW internals breaks; targeting the new class names is supportable.
Migration notes are in
reference/modal-props.mdx, with a callout inplatforms/nextjs.mdx.
➰ What a drag! ➰
📚 Documentation 📚
Magic Modal Release 10.0.0
10.0.0 (2026-07-31)
⚠ BREAKING CHANGES
- modal: this package is now
magic-modalon npm, renamed from
react-native-magic-modal. The library is universal: since #334 the browser
bundle carries no Reanimated, gesture-handler or worklets, and the
react-nativeprefix no longer fits what ships.react-native-magic-modal
keeps shipping at the same version, depending onmagic-modaland re-exporting
it, so an existing install resolves to the same code; npm shows a deprecation
notice on it pointing here. Installmagic-modaland update the import
specifier.
🔨 Bug Fixes 🔨
- docs: serve the site from magic-modal.gabrieltaveira.dev (#337) (2e9790e), references #333 #335
- docs: update links to the renamed magic-modal repo (#333) (e4d1665)
- modal: mount the iOS overlay only while modals are on screen (#329) (8577b56), references #328
🌠 New Features 🌠
💨 Code Improvements 💨
- modal: rename the published package to magic-modal (#335) (4141a57), references #333 #332 #334 #334 #337 #329 #332 #333 #337 #334 #329
➰ What a drag! ➰
📚 Documentation 📚
- README with demo GIF and link updates (8fffdfd)
Magic Modal Release 9.1.0
9.1.0 (2026-07-29)
🔨 Bug Fixes 🔨
- changelog: render the types that reach the tarball (#307) (f241ff9), references #298 #300 #304
- ci: pin the turbo cache action and gate e2e on writable reviewers (#315) (429258d), references #309
- docs: override postcss and sharp past next's vulnerable pins (#309) (b0169bf), references #28 #30 #31 #32 #314
🌠 New Features 🌠
➰ What a drag! ➰
- deps: update dependency next to v16.2.12 (#314) (a2280e1)
- release: sync magic modal version with npm 9.0.1 (#304) (183d581)
- renovate: hold react and the reanimated pair to the Expo SDK line (#311) (d1f3353), references #305 #306 #305 #306
📚 Documentation 📚
Magic Modal Release 9.0.1
9.0.1 (2026-07-28)
🔨 Bug Fixes 🔨
- ci: compute the release bump from the magic-modal-* tags (#261) (4e6722d), references #241
- ci: put the e2e runner back on macos-15 (#293) (ada0a8a), references #284
- ci: retry the CI-opened PR when no pull_request run appears (#269) (483e2e1), references #260 #256 #264 #260 #251 #251 #260
- ci: stop bot-quoted breaking notes from driving the release bump (#301) (8a3dc87), references #295 #261
- ci: take includeIgnoreFile from @eslint/config-helpers (#267) (0b4bf1b), closes #262, references #262
- modal: launch modern docs and align package metadata (#303) (61ddf85)
💨 Code Improvements 💨
- ci: cut the iOS Maestro smoke job (#292) (2d5cae7)
- ci: run the iOS e2e on main so PRs start warm (#299) (65712a1), references #292 #292
➰ What a drag! ➰
- ci: dry-run the release sync PR path (#264) (137ffcb)
- ci: dry-run the release sync PR path (#273) (4560e42)
- ci: give branch-validation and e2e-ios explicit token scopes (#265) (1b2615b)
- ci: hold jest and RNTL to the Expo SDK line (#291) (1806366), references #280 #275
- ci: move three more actions to their node 24 majors (#266) (a9661ba), references #251 #251 #265 #253 #254 #258
- ci: pin @babel/core and @expo/metro-runtime to the Expo SDK line (#268) (bc54c18), references #259 #263
- deps: move react-native to 0.83.10, the SDK 55 line (#302) (46d9b3a)
- deps: update dependency @release-it/conventional-changelog to v12 (#272) (87d825d), references #8203
- deps: update dependency bunchee to v6.12.2 (#282) (d70df1c)
- deps: update dependency jest-expo to v57 (#281) (8a9bd0b)
- deps: update dependency jest-junit to v17 (#283) (8a13e84)
- deps: update dependency macos to v26 (#284) (8cc18ff)
- deps: update dependency node to v24 (#285) (a48080d), references #8203 #8203 #8203 #8203 #8203
- deps: update dependency pod-install to v1 (#286) (f20c156)
- deps: update dependency release-it to v21 (#287) (a14682e)
- deps: update dependency undici to v8 (#294) (0680b3e)
- deps: update dependency uuid to v14 (#295) (d6ed5c1), references #8203 #8203 #8203 #8203
- deps: update github actions (#296) (9256a73), references #8203
- migrate to the shared magic tooling stack (#270) (e0d342f)
- release: sync magic modal version with npm 9.0.0 (#260) (0a16e64)
Magic Modal Release 9.0.0
Nothing here is breaking. This should have been 8.1.0: the recommended bump was computed over a 53-commit range reaching back to the 6.x v* tags, so it re-counted the breaking marker on #241 that 8.0.0 already shipped. Fixed in #261.
9.0.0 (2026-07-27)
🔨 Bug Fixes 🔨
- ci: auto-merge the release sync PR past the required check (#255) (86dd808), closes #248 #196
- ci: move onto the node 24 action majors and unbreak the docs build (#251) (65b5e2c), closes #241 #239 #224 #248 #244 #245 #249
🌠 New Features 🌠
Magic Modal Release 8.0.0
8.0.0 (2026-07-27)
⚠ BREAKING CHANGES
- modal: the
react-native-gesture-handlerpeer range moves from
>=2.20.0to>=3.0.0.usePanGestureonly exists in 3.x, so there's no
2.x-compatible path. The modal's own API is unchanged. A
GestureHandlerRootViewabove the portal also becomes mandatory, since 3.x
throws where 2.x only logged a warning. Expo SDK 55 still pins gesture-handler
to 2.30, so Expo projects installing 3.x need it inexpo.install.exclude, or
can stay onreact-native-magic-modal7.x until Expo moves the pin.
🔨 Bug Fixes 🔨
- ci: stop registering two @typescript-eslint plugin instances (#236) (a8ce4f9), closes #228 #233 #219
- deps: drop the duplicate hasown entry that broke the lockfile (#220) (76f92fe)
🌠 New Features 🌠
Magic Modal Release 7.1.0
show() now hands back an update next to promise and modalID, for pushing new content into a modal that's already open (#158):
const { update } = magicModal.show(() => <UploadModal progress={0} />);
update(() => <UploadModal progress={42} />);The modal stays where it is and the promise from show keeps waiting. The content itself is a new component on every call, so it remounts. Keep anything that has to survive an update out of its useState, in a store or in context.
7.1.0 (2026-07-25)
🔨 Bug Fixes 🔨
🌠 New Features 🌠
Magic Modal Release 7.0.3
7.0.3 (2026-07-25)
⚠ BREAKING CHANGES
- bump Expo SDK 52 -> 55 (requires Reanimated 4) (#161)
- Removes individual
fullWindowOverlayconfig from
magicModal.show. IntroducesmagicModal.enableFullWindowOverlay()and
magicModal.disableFullWindowOverlay()in order to control overlay
behavior globally. This fixes exit animations on iOS. - improve type safety and docs
- support multiple modals (#81)
- To preserve compatibility, swipeDirection "top" and
"bottom" properties have been renamed back to "up" and "down". It also
makes more sense overall. - Renames "direction" to "swipeDirection"
- This is a big refactor that migrates our underlying
component from react-native-modal, unmaintained for two years, to
react-native-reanimated.
We gain way more control but lose some flexibility the library offers. I
recommend going through the docs to find matching props.
Let me know if there's any use-case not supported anymore.
The library also gained the ability to be used inside react-navigation
modal screens, being the major motivation for this update.
🔨 Bug Fixes 🔨
- ci: match BREAKING CHANGE only as a footer in skip probe (#196) (d89193f), closes #195 #195 #195 #192
- ci: post-SDK55 followup — unblock publish, docs, E2E iOS (#166) (bb57c7c), closes #161
- ci: unblock release git push + docs caching (#186) (670e2ec), closes #179
- cjs errors while importing & add fullWindowOverlay option (#113) (274a2a3), closes #112 #110 #91 #89
- deal with dynamic animationOutTiming's (e5f488f)
- enforce gesture handler on the app root to prevent android issues (e592345)
- fix bugs and improve performance (#40) (2694e60)
- fix magic modal for react compiler users (fee1735)
- make modals appear on top of react-native modals & add new animation props (#51) (0cbca82)
- make modals work properly on android again (56db344)
- make the magic modal respect keyboard avoiding views (bf27b8a)
- modal: stop the swipe gesture from eating taps (#205) (dc0a98c)
🌠 New Features 🌠
- add hideAll feature and forward 'hide' to onBackButtonPress and onBackdropPress. (53ab5c3)
- add web support (befa910)
- bump Expo SDK 52 -> 55 (requires Reanimated 4) (#161) (eaf8aec), closes #128 #129 #130 #132 #134 #148 #150 #151 #152 #154 expo/expo#44141
- eslint: add jiti as dep (b60f85e)
- eslint: publish eslint package (#140) (3595a63)
- expose modalRefForTests (fb135bd)
- expose modalRefForTests (b3a692e)
- improve type safety and docs (d3a7884)
- improve types and error messages (75cbaae)
- make example web-compatible & mark functions as worklets (#92) (713ee86)
- migrate to reanimated (#31) (b8a2882)
- rename swipeDirection "top" and "bottom" to "up" and "down" (#52) (c6107ff)
- support multiple modals (#81) (70da143)
💨 Code Improvements 💨
- configure full window overlay globally to address exit animation issues (#125) (e797c20)
- type import and props (92c169a)
🔗 Testing Updated 🔗
- bring jest back to life and run it in CI (#201) (1864ea9)
- magicmodalportal: add code coverage for automatic hides (8169147)
➰ Continuous Integrations ➰
- add automatic changelog file (cbe7540)
- attempt fix ci (bf7b898)
- cache node_modules (02b6b3b)
- change workflow name (d719470)
- fix cache (ad91f47)
- fix changelog (df0aa0d)
- fix check commit type regex (391da89)
- fix ci (#43) (101d45b)
- fix deploy script (1c754bb)
- fix deploys (15474e9)
- fix dist folder (cb4cd35)
- fix docs deploy (#34) ([17e74a4](17e74a4...