dispose() contract. Same signal shape. Same error format. Learn the pattern once — every new package feels familiar from line one.node_modules, no version conflicts six months from now.import { createForm } from '@vielzeug/forge';
import { s } from '@vielzeug/spell';
import { createApi } from '@vielzeug/courier';
import { createLogger } from '@vielzeug/rune';
const log = createLogger('auth');
const api = createApi({ baseUrl: 'https://api.example.com' });
const LoginSchema = s.object({
email: s.string().email(),
password: s.string().min(8),
});
const form = createForm({
defaultValues: { email: '', password: '' },
schema: LoginSchema,
});
form.submit(async (values) => {
const user = await api.post('/auth/login', { body: values });
log.info('Login successful', { user });
});@vielzeug/codex is an MCP server that bundles the entire documentation, package APIs, and Refine component metadata into a single offline snapshot. Wire it into Claude Desktop, Copilot Chat, or any MCP-compatible client — then ask anything. get-docs({ packageSlug: "arsenal", page: "api" })
debounce(fn, wait) — returns a version of fn that delays invoking until wait ms after the last call. Pass { leading: true } to fire on the first call instead.import { debounce } from '@vielzeug/arsenal'; const save = debounce(persistToDb, 300); input.addEventListener('input', save);