
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
An atomic state management library for React.
AtomSphere is very similar to Jotai but with a slightly different API. It lets you create Atoms and use them in your React components.
When using atoms, you get a fine-grained reactivity system that only updates the components that depend on the atom that changed (as opposed to the traditional React context system, which re-renders all the components under the context when the state changes).
Creating and using an atom is pretty simple and straightforward.
You can create an atom using the atom function, and read it using the useAtom hook:
// Counter.tsx
import { atom, useAtom } from 'atomsphere';
const countAtom = atom(0);
function Counter() {
const [count, setCount] = useAtom(countAtom);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount((c) => c + 1)}>Increment</button>
</div>
);
}
In the example above, we're creating an atom outside the component scope, and using it inside the Counter component.
if you want, you can create your atoms in a separate file and import them in multiple components, the choice is yours:
// atoms.ts
import { atom } from 'atomsphere';
export const countAtom = atom(0);
export const nameAtom = atom('John Doe');
// Counter.tsx
import { useAtom } from 'atomsphere';
import { countAtom } from './atoms';
function Counter() {
const [count, setCount] = useAtom(countAtom);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount((c) => c + 1)}>Increment</button>
</div>
);
}
// Name.tsx
import { useAtom } from 'atomsphere';
import { nameAtom } from './atoms';
function Name() {
const [name, setName] = useAtom(nameAtom);
return (
<div>
<p>Name: {name}</p>
<input value={name} onChange={(e) => setName(e.target.value)} />
</div>
);
}
AtomSphere also supports derived atoms, which are atoms that depend on other atoms.
In order to create a derived atom, instead of passing an initial value to the atom function, you pass a function that calculates the value of the atom.
You'll receive a get function as an argument that will allow you to get the value of other atoms:
// Derived.tsx
import { atom, useAtom } from 'atomsphere';
const countAtom = atom(0);
const doubleCountAtom = atom((get) => get(countAtom) * 2);
function Derived() {
const [count, setCount] = useAtom(countAtom);
const doubleCount = useAtom(doubleCountAtom);
return (
<div>
<p>Count: {count}</p>
<p>Double Count: {doubleCount}</p>
<button onClick={() => setCount((c) => c + 1)}>Increment</button>
</div>
);
}
Each time the countAtom changes, the doubleCountAtom will be recalculated, and the components that depend on it will be updated.
The dependency tracking is done automatically by AtomSphere, so you don't have to worry about it.
FAQs
An atomic state management library for React
We found that atomsphere demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers 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.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.