
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.
@airstate/react
Advanced tools
A set of powerful and opensource hooks for React that help you build any kind of real-time collaboration experiences.
pnpm add @airstate/client @airstate/react
# or
npm install --save @airstate/client @airstate/react
Note: @airstate/client is a required peer dependency of the
React SDK
Get your appId from console.airstate.dev
import { configure } from '@airstate/client';
// Call this before you start using the hooks
// (it's safe to call outside react components)
configure({
appId: '[your app id]',
});
useSharedStateThis is a drop-in replacement for React's useState.
Every client at the same URL path will see the same data, and can update this data for it to be synced in real-time to all clients.
// assume curent page url: example.com/tomato
import {useSharedState} from '@airstate/react';
export function App() {
// every client on example.com/tomato will see the
// save value in `state`
const [state, setState] = useSharedState<boolean>(false);
const toggle = () => {
setState((prev) => !prev);
};
return (
<button onClick={toggle}>
{state ? 'ON' : 'OFF'} - Click to Toggle
</button>
);
}
Read The Docs for more details on useSharedState
and its options.
useSharedPresenceUse this to build things like avatar stacks, live cursors, or location sharing. Use cases where allowing everyone to edit everyone's data doesn't make sense.
By default, every client at the same URL can see each other's data, but each client can only update their own data.
Here is an example to build real-time cursors:
// assume current page url: example.com/tomato
import { useSharedPresence, usePersistentNanoId } from '@airstate/react';
export function App() {
const peerId = usePersistentNanoId();
// every client on example.com/tomato is now part of the same room
// and is sharing their state in real-time
const { others, setState } = useSharedPresence({
peer: peerId, // replace this with any string that uniquely identifies the user
initialState: {
x: 0,
y: 0,
},
});
return (
// a blue 512 x 512 square
<div
className={'absolute bg-blue-200 top-0 left-0 w-[512] h-[512]'}
onMouseMove={(ev) => {
// update dynamic state on mouse move
setState({
x: ev.clientX,
y: ev.clientY,
});
}}>
{/* other people's cursors */}
{Object.values(others).map((other) => (
<div
className={'absolute bg-red-500 w-[2] h-[2] rounded-full'}
style={{
left: other.state.x - 1,
top: other.state.y - 1,
}}></div>
))}
</div>
);
}
Read The Docs for more details on useSharedPresence
and its options.
MIT
FAQs
The AirState React Context API wrappers
We found that @airstate/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.
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.