nvoke

Use case

Small endpoints for your own tools.

Not every endpoint needs to live in your main backend. Internal dashboards, admin tools, Slack slash commands, one-off CLI helpers — these are the endpoints that slow a monolith down. Host them on nvoke instead.

// Internal endpoint for the on-call dashboard
export default async function (req) {
  const { team } = req.body;
  const rows = await db.query(
    "select name, pager from users where team = $1 and on_call_until > now()",
    [team]
  );
  return { team, on_call: rows };
}
An internal endpoint for a team on-call dashboard.

The endpoint-shaped work

Most internal tools are a UI talking to a small number of custom endpoints. The UI lives in a Notion embed, a Retool app, a Slack bot, or a CLI someone on the team maintains. The endpoints are usually thin: query a database, do a bit of transformation, return JSON. They do not belong in your customer-facing backend because they slow down deploys and widen the blast radius of internal bugs.

nvoke is built exactly for this. Each endpoint is a function, deployable in seconds, with logs you can read when the Slack bot starts acting weird. The URL is stable, so the consumer does not break when you refactor the implementation.

Connecting to your database

nvoke functions can reach any public or VPC-peered database. Paste the connection string as a secret, import your driver of choice (pg, mysql2, @planetscale/database, @neondatabase/serverless), query, return. For serverless databases with HTTP-based drivers (Neon, PlanetScale, Turso), the story is particularly clean because the driver does not hold long-lived TCP connections.

For databases behind a private network, nvoke supports outbound egress through a static IP on the Scale plan. Whitelist that IP on your database and you are done.

When to graduate off nvoke

If an internal endpoint grows into a real service — shared code across many functions, complex state, sustained throughput — it is probably time to fold it into your main backend. nvoke is for the small stuff. We will never tell you that an abstraction sitting at two hundred lines is the same as one sitting at ten thousand.

Build your internal tool today.

Ship the endpoints on nvoke. Ship the UI wherever you want. Done in an afternoon.