
Research
/Security News
11 Malicious NuGet Tools Pose as Game Cheats to Drop a Windows Host-Surveillance Payload
11 malicious NuGet tools pose as game cheats to deploy Windows payloads, track hosts, and use Google Sheets for telemetry and control.
alpine-screens
Advanced tools
A plugin for Alpine.js that provides a simple way to manage screen states and transitions.
Small Alpine plugin for screen-based UI flow (title, playing, win, etc.).
screen) with:
currentScreenchangeScreen(screenName)initialScreen.x-screen="name" directive to show only the matching screen.$changeScreen('name') magic helper.screen-exit on the previous screen element(s)screen-enter on the next screen element(s)npm install alpine-screens
import Alpine from 'alpinejs';
import screenPlugin from 'alpine-screens';
Alpine.plugin(screenPlugin({ initialScreen: 'title' }));
Alpine.start();
Load the plugin script before Alpine so it can register during Alpine init.
<script defer src="https://unpkg.com/alpine-screens@latest/dist/cdn.min.js"></script>
<script defer src="https://unpkg.com/alpinejs@latest/dist/cdn.min.js"></script>
<div x-data>
<section x-screen="title">
<h1>Title Screen</h1>
<button @click="$changeScreen('playing')">Start</button>
</section>
<section x-screen="playing">
<h1>Playing Screen</h1>
<button @click="$changeScreen('win')">Win</button>
</section>
<section x-screen="win">
<h1>Win Screen</h1>
<button @click="$changeScreen('title')">Back to Title</button>
</section>
</div>
This example demonstrates all features:
x-screen visibility switching$changeScreen() navigationcurrentScreenscreen-enter and screen-exit events<div x-data="gameUi()">
<p>Current: <strong x-text="$store.screen.currentScreen || 'none'"></strong></p>
<p>Last event: <strong x-text="lastEvent"></strong></p>
<section
x-screen="title"
@screen-enter="lastEvent = 'title entered (from ' + ($event.detail.oldScreen || 'none') + ')'"
>
<h2>Title Screen</h2>
<button @click="$changeScreen('playing')">Start Game</button>
</section>
<section
x-screen="playing"
@screen-enter="flashPlaying = true; setTimeout(() => flashPlaying = false, 300); lastEvent = 'playing entered'"
:style="flashPlaying ? 'outline: 3px solid #22c55e;' : ''"
>
<h2>Playing Screen</h2>
<button @click="$changeScreen('win')">Finish Level</button>
<button @click="$changeScreen('title')">Quit</button>
</section>
<section
x-screen="win"
@screen-exit="fadeWin = true; setTimeout(() => fadeWin = false, 350); lastEvent = 'win exiting to ' + $event.detail.newScreen"
:style="fadeWin ? 'opacity: 0.45;' : ''"
>
<h2>Win Screen</h2>
<button @click="$changeScreen('title')">Play Again</button>
</section>
</div>
<script>
function gameUi() {
return {
lastEvent: 'none',
flashPlaying: false,
fadeWin: false,
init() {
this.$changeScreen('title');
}
};
}
</script>
screen-enter{ oldScreen: 'previous-screen-name-or-null' }
screen-exit{ newScreen: 'next-screen-name' }
You can configure the plugin with storeName and initialScreen:
import Alpine from 'alpinejs';
import screenPlugin from 'alpine-screens';
Alpine.plugin(screenPlugin({
storeName: 'ui',
initialScreen: 'title'
}));
Alpine.start();
Then access it with $store.ui.currentScreen.
storeName (string, default: screens): Name of the Alpine store.initialScreen (string | null, default: null): The first active screen when Alpine initializes.npm run release:patch
npm run release:minor
npm run release:major
npm run release:publish
npm run release:push
FAQs
A plugin for Alpine.js that provides a simple way to manage screen states and transitions.
We found that alpine-screens 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.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
11 malicious NuGet tools pose as game cheats to deploy Windows payloads, track hosts, and use Google Sheets for telemetry and control.

Research
/Security News
4 compromised asyncapi packages deliver miasma botnet loader on macOS, Linux and Windows.

Research
/Security News
A compromised jscrambler npm release added a malicious preinstall hook that runs hidden native binaries on Linux, macOS, and Windows.