Skip to content

Groveback

Open-source Backend-as-a-Service for MongoDB. Auth, a policy-gated data API, storage, functions, realtime and vector search — with a local emulator and a config bundle you commit.

Start in one command

No database, no account, no config file.

Terminal window
npx grove dev --seed --persist

An empty project in memory, a dashboard link with the key already in it, and your work saved back into the repo when you stop it.

The app layer is the authority

MongoDB has no row-level security, so clients never talk to the database directly. Policies compile to query fragments injected with $and — Mongo enforces them natively, indexes still work, pagination stays intact.

Shape lives in git

Collections, policies, functions and roles mirror to a groveback/ bundle you commit. grove push plans the diff and asks before applying; it never deletes.

Build it by conversation

The MCP admin server exposes the admin API as tools, so Claude Code, Claude Desktop or Cursor can create collections, schemas, policies and functions for you.

Auth Email/password with sessions, refresh rotation, email verification, password recovery, rate limiting — plus Google and GitHub social login, configured per project.
Data API Per-collection REST CRUD with per-document policy filters, optional JSON-Schema validation, and relations.
GraphQL A per-project schema at POST /api/v1/graphql, generic or typed from your collections. Every resolver goes through the same policy engine as REST.
Realtime WebSocket subscriptions backed by policy-filtered Change Streams — a user never receives an event for a document they cannot read.
Functions Sandboxed handlers on database, auth and storage events, plus custom HTTP endpoints. pre hooks can abort or mutate a write; post hooks run after it.
Storage Buckets over S3-compatible object storage, or Mongo when no S3 is configured.
Vector search Embeddings and similarity queries for RAG-shaped apps.
Admin A Supabase-style dashboard, an OpenAPI 3.1 spec, an MCP server, and a grove CLI that generates a typed client.