---
title: "Introduction"
description: "What wervt is and how it works."
canonical_url: "https://wervt.app/getting-started/introduction"
---
# Introduction

> What wervt is and how it works.

wervt (from *Werft*, German for shipyard) hosts small Nuxt apps, the kind an agent writes in an
afternoon: a tracker, a sign-up sheet, a dashboard for a game server. Running each of them as its own
container works, but it wastes memory on apps that get a few requests a day.

wervt runs every app in an **isolate** instead. One runtime process hosts all apps, starts an app's
isolate on its first request and stops it when it goes idle.

## What an app gets

- **A Nuxt 5 app** with the `@wervt/nuxt` module. Server routes use `nuxt/server`, input is validated
with valibot.
- **Its own Postgres schema and role.** Drizzle ORM v1 for queries, migrations run on deploy.
- **Live data.** Shapes stream table changes to the browser through Electric, rendered on the
server first.
- **Sign-in.** Apps are private until you open them; wervt signs people in and tells the app who
they are.
- **Files** in its own bucket on the stack's Garage, through ablage.
- **Tasks** on a schedule, run by wervt even though the isolate sleeps.
- **Logs**: a wide event per request plus what the runtime saw, searchable for 14 days.
- **Static assets** served by the runtime, so asset requests never start the isolate.

## How a request flows

```text
browser ──todos.wervt.app──▶ main worker ──static asset──▶ apps/todos/public
                                  │
                                  └──everything else──▶ todos isolate ──DATABASE_URL──▶ Postgres (app_todos)
                                                             │
                                                             └──shape + app token──▶ Electric gateway ──▶ Electric
```

1. The **main worker** reads the app name from the host (`todos.wervt.app` → `todos`).
2. It serves files from the app's `public/` directly, or forwards the request to the app's isolate,
creating it if needed. The isolate gets `DATABASE_URL` for the app's own role.
3. Live data requests go through the **Electric gateway**, which only lets an app read tables in its
own schema.

<note>

wervt is early, and runs a handful of apps in production. Deploys (from the CLI or GitHub Actions),
private apps, logs, tasks, files and the [dashboard](https://wervt.app/guides/dashboard) work; direct uploads to
storage, preview deploys and video are next.

</note>


## Sitemap

See the full [sitemap](https://wervt.app/sitemap.md) for all pages.
