firekitNode subscribes to a single RTDB path and keeps data in sync.
import { firekitNode } from 'svelte-firekit';
const counter = firekitNode<number>('counters/page-views');
<p>Page views: {counter.data}</p>
// Merge partial object (for object nodes)
await counter.update({ count: 10 });
// One-time fetch (no listener)
const value = await counter.fetchOnce();
firekitNodeList subscribes to an RTDB path as an ordered list. Each item in list includes a key property (the RTDB push key).
import { firekitNodeList } from 'svelte-firekit';
const messages = firekitNodeList<Message>('chat/messages');
{#each messages.list as msg (msg.key)}
<p><strong>{msg.userId}</strong>: {msg.text}</p>
// Push a new item (generates a push key)
await messages.push({ text: 'Hello!', userId: uid, createdAt: Date.now() });
// Set the entire list node
await messages.set({ /* … */ });
// Update specific children
await messages.update({ 'msg-key/text': 'Updated' });
// Remove the entire node
const items = await messages.fetchOnce();
import { rtdbServerTimestamp, rtdbIncrement } from 'svelte-firekit';
await counter.set(rtdbIncrement(1));
await node.update({ lastSeen: rtdbServerTimestamp() });
| Helper | Description |
|---|
rtdbServerTimestamp() | Server-side timestamp |
rtdbIncrement(delta) | Atomic numeric increment / decrement |
import { Node } from 'svelte-firekit';
<Node path="chat/messages">
{#snippet data(messages)}
{#each Object.values(messages) as msg}
| Prop | Type | Required | Description |
|---|
path | string | Yes | RTDB path to subscribe to |
| Snippet | Arguments | Description |
|---|
data | Raw RTDB value | Rendered when data is available |
loading | — | Rendered while loading |
error | Error | Rendered on failure |