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 touchThese 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();
await db.connect('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();
function Checkboxes() {
const [boxes, setBoxes] = useState({});
useEffect(() => {
db.connect('landing-page/checkboxes', { anonymous: true });
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>
);
}
Connecting...
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 power 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.
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.
In addition to Websockets for web and mobile apps, our UDP-based transport for games provides fast-twitch speed and minimal latency. And with volatile fields you can send 30 FPS updates for VR positions or cursor movements -- try doing that with a typical database.
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 run on bare metal, so we can keep costs low and predictable and help you build amazing apps and games without sweating your hosting bill.
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.
Need live cursors or typing indicators? Our volatile fields let you sync high-frequency updates (like cursor positions) without the overhead of guaranteed delivery (something Firebase never really got right).
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.
Make your mobile app multiplayer or just give yourself an easy to use data store to save your user's data to the cloud so they can get it anywhere they go.
Oscar Mike builds software for solar grazing operations -- yes, that's using sheep and goats to manage vegetation at solar farms instead of herbicides or mowers.
Their mobile app lets field crews log animal health checks, fence conditions, and grazing progress while managers track the big picture from the office. Lark handles the sync between crews in remote fields and the planning dashboard back at HQ.
Lark's Unity client uses KCP over UDP for the kind of low-latency sync that multiplayer games demand. Player positions, hand tracking, physics objects -- volatile fields handle 60fps updates without breaking a sweat.
When you want to go beyond raw data, our rules engine can handle basic game logic server-side: prop ownership, turn order, win conditions. Enabling Lark's ephemeral data stores mean game rooms spin up instantly and clean themselves up when everyone leaves.
And since your game sessions are backed by an actual data store, late joiners, reconnections, and P2P hassles like host migration are a thing of the past.
Smash Smash is the hit VR game with gorilla movement and infinite crafting madness. Players drop into a shared room filled with props, then discover new items by smashing things together. A banana plus a boomerang? Who knows what you'll get.
Lark syncs player movements and prop physics at VR framerates, while the rules system ensures only one player can grab a prop at a time. The crafting combinations are powered by Lark too, so new discoveries can be added without shipping an update.
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.
This isn't just about convenience. We think Lark is a natural fit for the next generation of AI-built applications: simple enough that an LLM can reason about the data model, powerful enough to handle real production workloads.
Imagine describing your app's data needs in plain English and having your AI assistant shape the JSON data store, write the security rules, and scaffold the client code. That's what Lark's MCP integration enables.
As AI coding assistants become an even more powerful way to build software, the data layer needs to keep up. Lark's JSON-native approach and simple API make it easy for AI to understand, modify, and debug your data layer. And of course you can easily pop into the dashboard and see the data for yourself, even if you've never written a line of SQL.