
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
@entrancekit/react
Advanced tools
Turn any intro animation — a video, a Lottie file, or your own React component — into a correct, self-removing app entrance. EntranceKit owns the lifecycle; you keep owning the animation.
Turn an intro animation you already have — a video, a Lottie file, or your own React component — into a correct app entrance, without writing the lifecycle yourself.
The animation is the easy part. The flow around it is not: playing it on load without blocking the app, honoring reduced motion, falling back on slow or failed loads, exiting by the model you chose, and tearing down cleanly. EntranceKit owns that flow. You keep owning the animation.
prefers-reduced-motion is honored by default (no flash).npm install @entrancekit/react
# Lottie support is optional and lazy-loaded:
npm install @lottiefiles/dotlottie-react
import { EntranceVideo } from '@entrancekit/react';
export default function Root() {
return (
<>
<App /> {/* renders and stays interactive the whole time */}
<EntranceVideo
id="launch"
sources={[
{ src: '/intro.webm', type: 'video/webm' },
{ src: '/intro.mp4', type: 'video/mp4' },
]}
poster="/intro-poster.png"
fallbackAfter={2500}
/>
</>
);
}
import { EntranceController } from '@entrancekit/react';
<EntranceController id="launch">
{({ shouldAnimate, complete, skip }) => (
<MyIntro
play={shouldAnimate} // start when told
onComplete={complete} // its OWN done-signal — the preferred path
onError={skip} // never trap the user
/>
)}
</EntranceController>;
EntranceKit owns one canonical state machine:
idle → preload → play → resolve → done
Every way an entrance can end — the animation's own done-signal, a user skip, a timeout, an
error, or a reduced-motion suppression — funnels through a single resolve carrying a
reason, so teardown is deterministic on every path. Wire your animation's native end event
to complete(); fallbackAfter is only a safety net for a hung or slow load, never a cap on
a correctly-signalling animation.
| Export | What it is |
|---|---|
EntranceController | Render-prop for a bring-your-own animation. The core. |
EntranceVideo | MP4/WebM convenience entry point (prefers native ended). |
EntranceLottie | Lottie JSON entry point (optional, lazy-loaded player). |
useEntrance | The same engine, headless, for a fully custom overlay. |
Shared props: id (required), fallbackAfter (default 4000), reducedMotion
('skip' | 'play', default 'skip'), skipControl (true | render-fn | false),
outro (number | { durationMs, render }), container, and
onResolve / onError / onStateChange.
There is no
mode, no persistence, and no show-policy in v0.1.0 — an entrance is a transient overlay that plays and leaves, not a once-per-user gate.
The docs site and live Playground (every source, every scenario, every exit model) is at
terminalis.github.io/entrancekit (deployed by
CI from website). Run it locally:
npm install && npm run build
npm --prefix website install
npm --prefix website run dev
MIT
FAQs
Turn any intro animation — a video, a Lottie file, or your own React component — into a correct, self-removing app entrance. EntranceKit owns the lifecycle; you keep owning the animation.
The npm package @entrancekit/react receives a total of 0 weekly downloads. As such, @entrancekit/react popularity was classified as not popular.
We found that @entrancekit/react demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.