npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

zutron

v0.8.0

Published

A streamlined state management library for Electron applications using Zustand.

Downloads

965

Readme

streamlined electron state management

Why

tldr: I want to use Zustand in my Electron app, seamlessly

Zustand is a great state management library. As with other state libraries such as Redux, it is recommended that a single store is used in your app.

For Electron apps this is an awkward problem as you need access to the store in both the main and renderer processes.

Zutron enables a single store workflow with Zustand in Electron apps, effectively simplifying the use of Zustand in this context by abstracting away the necessary IPC and dispatch management.

Features

  • Use Zustand everywhere in your Electron app
  • Single store workflow across IPC boundary
  • Works with the latest Electron security recommendations
  • Supports different Zustand usage patterns
  • Handles thunks, inline actions or Redux-style action objects

How It Works

Zutron uses an additional Zustand store in the renderer process, this store is synchronized in one direction with your application store in the main process.

Actions from the renderer process are dispatched across IPC to the main process store, which handles them and updates state accordingly. The renderer store then receives these state updates over IPC and updates itself accordingly.

Accessing The Store

  • Renderer process
    • Store state can be accessed via the useStore hook
    • Actions & thunks can be dispatched via the useDispatch hook
  • Main process
    • Store state can be accessed directly in the same way you normally use Zustand
    • Actions & thunks can be dispatched via the dispatch helper

Getting Started

See the docs.

There are minimal example applications featuring three different Zustand usage patterns:

Inspiration / Prior Art

This project would not exist without Reduxtron, shout out to vitordino for creating it!

  • vitordino/reduxtron

    • Redux store in the main process, optionally synced to Zustand in the renderer
    • Zutron is based on Reduxtron
    • Great for Redux users, not an option if you want to use Zustand everywhere
  • klarna/electron-redux

    • Bi-directional sync between one Redux store in the main process, and another in the renderer
    • No longer maintained
    • I created a fork to enable support for electron >= 14, however I won't be spending any more time on this approach