Skip to content

Core Concepts

Every app starts with createSnapshot(). The returned object owns the API client, token storage, query cache, hooks, route guards, and provider.

import { createSnapshot } from "@lastshotlabs/snapshot";
const snap = createSnapshot({ apiUrl: "/api" });
const { user } = snap.useUser();
const login = snap.useLogin();
ImportWhat you get
@lastshotlabs/snapshotcreateSnapshot, runtime types, auth helpers
@lastshotlabs/snapshot/uiStandalone components, tokens, actions, icons, UI hooks

Query hooks read data and cache it:

const { user, isLoading } = snap.useUser();
const { sessions } = snap.useSessions();

Mutation hooks perform writes:

const login = snap.useLogin();
login.mutate({ email, password });

Every Snapshot hook should render inside the runtime’s provider.

<snap.QueryProvider>
<App />
</snap.QueryProvider>

Snapshot UI components are regular React components.

import { ButtonBase, CardBase, DataTableBase } from "@lastshotlabs/snapshot/ui";
<CardBase title="Settings">
<ButtonBase label="Save" onClick={save} />
</CardBase>

Components accept className, style, and component-specific slots. For shared theming, generate Snapshot CSS variables with resolveTokens().

import { resolveTokens } from "@lastshotlabs/snapshot/ui";
const css = resolveTokens({ flavor: "neutral" });

Run snapshot sync when you want typed API helpers and React Query hooks from your Slingshot OpenAPI schema.

Terminal window
snapshot sync --api http://localhost:3000