mrkeyoor.com_
Wed 07 Oct 06:44 UTC
Dev Toolsevaluationupdated 07 Oct 2026

expo-dynamic-notifications review

Expo Dynamic Notifications is a React Native template for in-app alerts that drop from a Dynamic Island-style pill into a card. It gives an Expo app animated content, tap and swipe handling, custom timing, and a render hook for replacing the default notification body.

Verdict

Our install pulled 596 packages and occupied 1,361 MB, yet the repository supplied no build or test target, so this is expensive source to adopt without an automated safety net. Use it when the exact morphing interaction is worth owning the component code and its native dependencies. Pick a packaged notifier if you mainly need reliable alerts rather than this particular visual effect.

We ran it

Lab card: what happened when we ran expo-dynamic-notificationsScreenshot of expo-dynamic-notifications (github.com/rit3zh/expo-dynamic-notifications)
Install✓ · 23s596 packages · 1361 MB
Buildn/ano build script
Testsn/ano test script
Repo103 files~4,315 lines of source · 1.8 MB · 0 CI workflows

Answers from our run

Does expo-dynamic-notifications build from source?

Dependencies installed in 23 seconds (596 packages), and the project has no separate build step. We cloned commit 5de059a into a clean Debian container with 3 CPUs and no project-specific setup.

Does expo-dynamic-notifications have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Who should not use expo-dynamic-notifications?

Teams expecting an npm library: package.json marks the project private, and the README installs it by cloning the whole app.

What are the alternatives to expo-dynamic-notifications?

React Native Toast Message, React Native Notifier, Sonner Native Toasters. Our install pulled 596 packages and occupied 1,361 MB, yet the repository supplied no build or test target, so this is expensive source to adopt without an automated safety net.

Setup2/523-second install grew to 1,361 MB and still needs native setup
Docs4/5The API is clear, but packaging and accessibility are not covered
Community2/5226 stars, no open queue, and only one day of commit history
Maturity2/5No release, CI workflow, test target, or public package

Who it’s for

Expo teams that want a polished in-app notification treatment and are already using Skia and Reanimated.
Designers who need control over the island, card geometry, colors, blur, and animation feel.
Developers comfortable copying local source from a template into their own app.
Apps that show one alert at a time and can live with a single pending replacement.

Who it’s NOT for

Teams expecting an npm library: package.json marks the project private, and the README installs it by cloning the whole app.
Apps that need a durable notification queue: the timeline stores one active item and one queued item, so another trigger replaces the pending item.
Projects pinned below Expo 57 or React Native 0.86: those are the versions declared by the template.
Release processes that require CI and automated tests: our scan found no CI workflows, no tests directory, and no test target.
Teams that need documented screen-reader behavior before adoption: the README covers gestures and visuals but gives no accessibility guidance.

Setup reality

Our sandbox installed commit 5de059a in 23 seconds, pulling 596 packages and using 1,361 MB. The 1.8 MB checkout had 103 files and about 4,315 lines of source. There was no build script and no test target, so both steps were skipped.

The README's path is to clone the repository, run Expo prebuild, install with Bun, and launch iOS. There are no service credentials in the documented flow, but the component depends on Skia, Reanimated, Worklets, Gesture Handler, Safe Area Context, Expo Blur, Expo Image, and Expo Symbols.

This is a private Expo app template, not a published package. Moving it into an existing app means copying source, resolving its @/ imports, matching native dependencies, and rebuilding the native project.

This is a private Expo 57 template, not an npm library

Expo Dynamic Notifications looks like a reusable component in the README, but the distribution tells a different story. Its package is marked private, the entry point is an Expo Router app, and installation begins with cloning the whole repository. The notification code lives under src/components, src/hooks, and neighboring project folders. Adopting it means taking ownership of source rather than adding a maintained package version to your lockfile.

That can be reasonable for a signature interaction. The component turns a small black pill into a hanging notification card with a neck and droplet shape. Skia draws the goo effect, Reanimated drives its values, Gesture Handler covers taps and upward swipes, and safe-area measurements place it around the top inset. The result is more specific than a toast. It also carries far more native rendering machinery.

One active alert gets one pending replacement

The public API is small enough to understand in one sitting. Wrap the application in DynamicNotifications, call trigger() from the hook, and pass a title plus optional message, avatar, symbol, color, duration, press handler, or custom renderer. A root duration applies by default, while null keeps an alert visible until code or a gesture dismisses it. The README documents the card's dimensions and color controls in detail.

The source reveals the queue limit. One ref holds the active notification and another holds a single queued notification. If you call trigger() during an active alert, the current item exits and the new one waits. A further call before that transition settles overwrites the waiting value. This fits occasional social or upload alerts. It is a poor match for chat bursts, monitoring events, or any flow where every pending item must be shown.

What happened when we ran it

Our sandbox installed commit 5de059a in 23 seconds with Bun. That step pulled 596 packages and used 1,361 MB on disk, a striking expansion from a 1.8 MB checkout. The repository contained 103 files and about 4,315 lines of source. The container had 3 CPUs, 8 GB of RAM, Node 22, no secrets, and no elevated privileges. Installation itself completed successfully.

There was no build script or target, so we skipped that step. The package scripts offer Expo start, Android, iOS, web, lint, and a reset helper, but no build command. There was also no test script or target, so no tests ran. Our scan found no CI workflow files, Dockerfile, or tests directory. We therefore have no lab result for native compilation, animation behavior, or gestures on a device.

Those omissions change how to read the 23-second install. It proves the JavaScript dependency graph resolved in our fresh container. It does not prove bun ios, Expo prebuild, Skia rendering, or the Reanimated worklets work in your existing native project. The 1,361 MB footprint also lands before Xcode artifacts, Android tooling, or caches enter the picture.

Eight peer technologies make the visual effect costly to transplant

The README lists Skia, Reanimated 4, Worklets, Gesture Handler 2, Safe Area Context, Expo Blur, Expo Image, and Expo Symbols as peer technologies already configured in the template. Package metadata pins Expo 57.0.23, React Native 0.86.3, React 19.2.3, Skia 2.6.2, and Reanimated 4.5.1. An app near those versions may absorb the code cleanly. An older Expo app has a migration project hiding behind the animation.

Source imports use the @/ alias across configuration, constants, context, geometry, hooks, interfaces, and UI code. Copying the visible component folder alone will not be enough. You need its neighboring modules and your bundler alias must resolve the same paths, or you must rewrite them. This is why the repository makes more sense as an interaction reference or starter than as a drop-in dependency.

Gesture behavior is documented, accessibility behavior is not

A tap invokes the notification's onPress callback and then begins dismissal. An upward swipe dismisses after either the configured distance or velocity threshold, while an incomplete swipe springs the card back. The root receives onDismiss only after the exit animation settles. These are useful, inspectable rules, and custom content still receives the same surrounding motion and gesture behavior.

The README does not explain screen-reader announcements, focus movement, reduced-motion handling, keyboard or switch access, or what happens when a notification covers interactive content. The source we inspected does not turn that absence into a confirmed accessibility failure. It does put validation on the adopter. Test VoiceOver and TalkBack, add a reduced-motion path, and decide whether an in-app alert should be announced before shipping it.

Five commits on September 18 leave little maintenance history

GitHub showed 226 stars, zero open issues and pull requests, and no releases on October 7, 2026. All five visible commits landed on September 18, with the feature implementation followed by a preview link and README wording edits. The repository was pushed that same day. It is recent, but one day of history cannot show how the component handles Expo upgrades or bug reports.

The code is appealing when the animation itself is the product decision. You get explicit geometry, custom bodies, timed dismissal, and a source-level design you can change. You also inherit 596 packages, a 1,361 MB install, native graphics dependencies, and no automated checks from the repository. For a standard success banner or queued messages, choose a package built around notification behavior. Choose this template when the morph is worth maintaining.

Alternatives

ProjectWhat it isPick it when
React Native Toast MessageA configurable toast component distributed as a regular React Native package.pick this instead when easy package installation matters more than a Dynamic Island-style morph.
React Native NotifierA focused package for banners and in-app notification cards.pick this instead when you need a conventional notifier with less rendering machinery.
Sonner Native ToastersA React Native port of Sonner's opinionated toast interface.pick this instead when stacked toast behavior and a package API matter more than island geometry.

What people are saying

  1. [velocity-scout] rit3zh/expo-dynamic-notifications

Sources

  1. Expo Dynamic Notifications repository and README
  2. Package metadata
  3. Notification timeline source
  4. Repository commit history

More dev tools reviews

skills · niimbot · sys1grep · ZygiskNext · AirCard-iOS · wx-cli-again · the whole board →