🍀 Atomic state management for Roblox https://npmjs.org/package/@rbxts/charm
Find a file
2024-05-26 21:31:28 -07:00
.github/workflows refactor: polish code, logo 2024-02-25 12:05:59 -08:00
.vscode feat: initial commit 2024-02-25 03:41:09 -08:00
bin feat: initial commit 2024-02-25 03:41:09 -08:00
images refactor: polish code, logo 2024-02-25 12:05:59 -08:00
src refactor!: rename derive, map 2024-05-26 21:31:28 -07:00
.eslintrc feat: initial commit 2024-02-25 03:41:09 -08:00
.gitattributes feat: initial commit 2024-02-25 03:41:09 -08:00
.gitignore feat: initial commit 2024-02-25 03:41:09 -08:00
.luaurc feat: initial commit 2024-02-25 03:41:09 -08:00
.prettierrc feat: initial commit 2024-02-25 03:41:09 -08:00
aftman.toml feat: initial commit 2024-02-25 03:41:09 -08:00
default.project.json feat: initial commit 2024-02-25 03:41:09 -08:00
dev.project.json feat: initial commit 2024-02-25 03:41:09 -08:00
LICENSE.md feat: initial commit 2024-02-25 03:41:09 -08:00
package.json refactor!: design overhaul (#1) 2024-03-25 19:53:28 -07:00
pnpm-lock.yaml feat: initial commit 2024-02-25 03:41:09 -08:00
README.md refactor!: rename derive, map 2024-05-26 21:31:28 -07:00
selene.toml feat: initial commit 2024-02-25 03:41:09 -08:00
testez-companion.toml feat: initial commit 2024-02-25 03:41:09 -08:00
testez.yml feat: initial commit 2024-02-25 03:41:09 -08:00
tsconfig.json feat: initial commit 2024-02-25 03:41:09 -08:00
wally.lock feat: initial commit 2024-02-25 03:41:09 -08:00
wally.toml feat: initial commit 2024-02-25 03:41:09 -08:00

Logo

Charm

Atomic state management for Roblox.
npm package →

GitHub Workflow Status NPM Version GitHub License

Charm is an atomic state management library inspired by Jotai. Designed to be a unique alternative to Reflex, Charm aims to provide a simple and composable interface for your game's state.

Note

Charm is incomplete and not ready for production use.

📦 Setup

TypeScript

npm install @rbxts/charm
yarn add @rbxts/charm
pnpm add @rbxts/charm

Wally

Add littensy/charm to your wally.toml file.

[dependencies]
Charm = "littensy/charm@VERSION"

📚 API Reference

Charm

atom(state, options?)

effect(callback)

subscribe(atom, listener)

computed(atom, options?)

observe(atom, observer)

mapped(atom, mapper)

peek(atom)

React

useAtom(atom, dependencies?)

Sync

sync.client(options)

Client.sync(payload)

sync.server(options)

Server.connect(callback)

Server.hydrate(player)

🚀 Examples

Counter atom

import { atom, subscribe } from "@rbxts/charm";

const counterAtom = atom(0);
const doubleCounterAtom = () => counterAtom() * 2;

subscribe(doubleCounterAtom, (value) => {
	print(value);
});

counterAtom(1);
counterAtom((count) => count + 1);

Counter component

import React from "@rbxts/react";
import { useAtom } from "@rbxts/charm";
import { counterAtom } from "./counter-atom";

function Counter() {
	const [count, setCount] = useAtom(counterAtom);

	return (
		<textlabel
			Text={`Count: ${count}`}
			Size={new UDim2(0, 100, 0, 50)}
			Event={{
				Activated: () => setCount(count + 1),
			}}
		/>
	);
}

Charm is released under the MIT License.

MIT License