Rove

Docs

Install a package. Watch people move.

Rove lives at rovestats.com. Wrap your app, send a few events, and the dashboard tells the story — people, visits, and what they did.

01

Start here

    01

    Create a workspace

    Sign up at rovestats.com and add a web or mobile app. You get a write key shown once.

    02

    Install the package

    @rovestudio/web for Next.js and other web apps. @rovestudio/react-native for Expo and React Native.

    03

    Point it at Rove

    Host is https://rovestats.com. The package only POSTs events. It never reads your dashboard or database.

Longer guides: how to add analytics to your app, Expo analytics, React Native analytics, Next.js analytics, mobile analytics.

02

Web

@rovestudio/web on npm. Sessions and page views start as soon as you wrap the app.

Install

npm install @rovestudio/web

.env.local

NEXT_PUBLIC_ROVE_KEY=rov_live_YOUR_WRITE_KEY
NEXT_PUBLIC_ROVE_HOST=https://rovestats.com

app/rove-provider.tsx

"use client";

import { RoveProvider } from "@rovestudio/web";

export function Rove({ children }: { children: React.ReactNode }) {
  return (
    <RoveProvider
      writeKey={process.env.NEXT_PUBLIC_ROVE_KEY!}
      host={process.env.NEXT_PUBLIC_ROVE_HOST!}
    >
      {children}
    </RoveProvider>
  );
}

app/layout.tsx

import { Rove } from "./rove-provider";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>
        <Rove>{children}</Rove>
      </body>
    </html>
  );
}

RoveProvider records session start and page views, including App Router client navigations. Keep the root layout a Server Component. No React? Use initRove and rove in any JavaScript app.

03

Mobile

@rovestudio/react-native on npm. Same events, same host. Async Storage keeps the queue if the process dies.

Expo

npx expo install @rovestudio/react-native @react-native-async-storage/async-storage

React Native

npm install @rovestudio/react-native @react-native-async-storage/async-storage

Env

EXPO_PUBLIC_ROVE_KEY=rov_live_YOUR_WRITE_KEY
EXPO_PUBLIC_ROVE_HOST=https://rovestats.com

Root layout

import { RoveProvider } from "@rovestudio/react-native";

export default function RootLayout({ children }) {
  return (
    <RoveProvider
      writeKey={process.env.EXPO_PUBLIC_ROVE_KEY}
      host={process.env.EXPO_PUBLIC_ROVE_HOST}
    >
      {children}
    </RoveProvider>
  );
}

RoveProvider records session start plus app foreground and background. Call rove.screen on important screens if you are not using a navigator hook.

04

What to send

Automatic events cover the session. Add names that a person would understand — signup, purchase, invite sent — not raw system noise.

rove.track(name, properties?)

Something someone did. Use a short name and a few properties, like value or plan.

rove.identify(userId, traits?)

Tie the anonymous device to your signed-in user. Call this after login if you already have auth.

rove.reset()

Forget the user on sign-out. The next visitor starts a fresh path.

rove.page(path?) / rove.screen(name)

A page or screen you care about. Web already records navigations; screen is for mobile.

rove.flush()

Send the queue now. Do this before a redirect so the last event is not lost.

Custom events

import { rove } from "@rovestudio/web";

rove.track("purchase", { value: 9.99, currency: "USD" });
rove.identify("user_123", { plan: "pro" });
rove.page("/pricing");

05

HTTP, if you skip the package

Both packages POST here. You can do the same from iOS, Android, or anything that can send JSON.

POST https://rovestats.com/api/v1/events

curl -X POST https://rovestats.com/api/v1/events \
  -H "Authorization: Bearer rov_live_YOUR_WRITE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"events":[{"id":"<uuid v4>","name":"session_start","distinct_id":"dev_1"}]}'
  • Event names start with a letter, then letters, numbers, _, ., :, -
  • At most 50 events per request
  • Each event needs a UUID id, a name, and a distinct_id
  • Optional identify object ties the device to your user
  • Write key in Authorization: Bearer, or X-Rove-Key

06

Keys and the host

Write key

Starts with rov_live_. It can only ingest. We store a hash, not the secret. Shown once — rotate it from the app if you lose it. Do not commit it.

Host

Production host is https://rovestats.com. No trailing path. The SDK appends /api/v1/events.