Fast
Multiplayer
Data.

Lark is the realtime data store tuned for speed and simplicity. Web apps, mobile apps, and multiplayer games. Get started in 5 minutes, scale to hundreds of thousands, all without breaking the bank.

Get in touch
Live demo

See Lark in Action

These checkboxes sync in realtime across all visitors. Check one, someone across the world sees it instantly -- in just a few dozen lines of code.

import { LarkDatabase } from '@lark-sh/client';

const db = new LarkDatabase('landing-page/checkboxes', {
  anonymous: true
});

// Subscribe to realtime updates
db.ref('boxes').on('value', (snapshot) => {
  const boxes = snapshot.val() || {};

  // Update each checkbox element
  for (let i = 0; i < 100; i++) {
    const el = document.getElementById(`box-${i}`);
    el.classList.toggle('checked', !!boxes[i]);
  }
});

// Toggle a checkbox on click
async function toggle(id) {
  const ref = db.ref(`boxes/${id}`);
  const snap = await ref.once();
  await ref.set(!snap.val());
}
import { useEffect, useState } from 'react';
import { LarkDatabase } from '@lark-sh/client';

const db = new LarkDatabase('landing-page/checkboxes', {
  anonymous: true
});

function Checkboxes() {
  const [boxes, setBoxes] = useState({});

  useEffect(() => {
    return db.ref('boxes').on('value', snap => {
      setBoxes(snap.val() || {});
    });
  }, []);

  const toggle = async (id) => {
    const ref = db.ref(`boxes/${id}`);
    const snap = await ref.once();
    await ref.set(!snap.val());
  };

  return (
    <div className="grid">
      {Array(100).fill(0).map((_, i) => (
        <div
          key={i}
          className={boxes[i] ? 'checked' : ''}
          onClick={() => toggle(i)}
        />
      ))}
    div>
  );
}
100 Checkboxes

Connecting...

Why Lark

Simple multiplayer data

Every data store on Lark is just JSON. Write to it and watch all of your connected clients get the updates. It's easy to reason about, but powerful enough to back any app. And our dashboard lets you view and edit the data in real-time -- super useful for debugging and seeing what's happening behind the scenes -- without needing to write SQL.

On-demand flexibility

With Lark, you can spin up data stores on demand, each following the rules you've set for your project. Making a multiplayer game? Use one per room. Making a web app? How about one per user, or one per project. They're created on-demand, so your apps and games scale up as fast as your audience.

Speed when you need it

Unlike traditional realtime databases, Lark also features volatile data paths, which are optimized for frequent, fire-and-forget updates -- perfect for cursor movements in web apps or player movement in games. With WebTransport support on web and KCP over UDP in Unity, your persistent data and your fast-twitch updates can both work in harmony.

Reasonable pricing

If you've used other realtime databases like Firebase, you know that pricing gets out of hand quickly. We've designed Lark from the ground up to keep costs low and predictable, so we can enable you build amazing apps and games without sweating your hosting bill.

Use Cases

Web Apps

JSON is the lingua franca of the web, and Lark speaks it natively. Use our JavaScript client with vanilla JS, React, Vue, or whatever you're building with. The API is Firebase-compatible, so if you've used Firebase Realtime Database before, you already know how Lark works.

Mobile Apps

Building with React Native and Expo? Lark's JavaScript client works out of the box. The same realtime sync that powers your web app works identically on iOS and Android -- one codebase, same data, instant updates everywhere.

Co-Op Games

Lark's Unity client uses KCP over UDP for low-latency sync. Volatile fields handle frequent updates for player positions and hand tracking. Ephemeral data stores mean game rooms spin up instantly and clean themselves up when everyone leaves.

AI Native

Lark ships with an MCP server that plugs directly into AI coding assistants like Claude Code. Your AI can set up data stores, write security rules, query data, and push updates -- all from inside your editor.