Quick Start

Get up and running with Storken in less than 5 minutes!

1. Create Your Store

Create a new file called store.ts:

import { create } from 'storken';

// Create your store with initial values
export const [useStorken, getStore, setStore] = create({
  initialValues: {
    counter: 0,
    user: null,
    todos: [] as string[]
  }
});

2. Use in Your Components

Now you can use your store in any React component:

import { useStorken } from './store';

function Counter() {
  // Full API: [value, setter, reset, loading]
  const [count, setCount, resetCount, loading] = useStorken('counter', 0);

  return (
    <div>
      <h2>Count: {loading ? '...' : count}</h2>
      <button onClick={() => setCount(prev => prev + 1)}>
        Increment
      </button>
      <button onClick={() => setCount(prev => prev - 1)}>
        Decrement
      </button>
      <button onClick={resetCount}>
        Reset
      </button>
    </div>
  );
}

3. Async Operations

Storken supports async operations out of the box with loading states:

import { create } from 'storken';

export const [useStorken] = create({
  initialValues: {
    user: null
  },
  
  // Async getter - fetches data
  getters: {
    user: async () => {
      const response = await fetch('/api/user');
      return response.json();
    }
  },
  
  // Async setter with side effects
  setters: {
    user: async (storken, value) => {
      await fetch('/api/user', {
        method: 'POST',
        body: JSON.stringify(value)
      });
      console.log('User updated!');
    }
  }
});

4. TypeScript Support

Storken provides full TypeScript support with type inference:

interface User {
  id: string;
  name: string;
  email: string;
}

const [useStorken] = create({
  initialValues: {
    user: null as User | null,
    isLoggedIn: false
  }
});

// TypeScript knows the types!
function Profile() {
  const [user, setUser] = useStorken('user', null);
  // user is typed as User | null
  
  if (!user) return <div>Please log in</div>;
  
  return <div>Welcome, {user.name}!</div>;
}

✅ That's it!

You now have a fully functional, type-safe state management system with async support and loading states!