Getting Started
This guide covers both self-hosted production setup (via Docker Compose) and local development from source. If you'd rather skip running infrastructure yourself, sign up at verba.nubisco.io for the managed version (free tier: up to 3 projects).
Self-Hosted Setup (Docker Compose)
Prerequisites
- Docker and Docker Compose v2+
- A domain name or local IP for the web UI (optional for local testing)
1. Clone the repository
git clone https://github.com/nubisco/verba.git
cd verba2. Run the setup wizard
Verba ships with an interactive CLI wizard that guides you through first-time configuration:
node packages/cli/dist/index.js setupThe verba setup wizard will:
- Ask whether to use SQLite (simple, single-file) or PostgreSQL (recommended for teams)
- Generate a secure random
JWT_SECRET - Optionally configure SMTP for email / OTP login
- Write
apps/api/.envwith all your settings - Run database migrations automatically
Tip: If you prefer to configure manually, copy
apps/api/.env.exampletoapps/api/.envand edit the values. See Self-Hosting for the full variable reference.
3. Start the services
docker compose up -dThe web UI is available at http://localhost:3000 and the API at http://localhost:4000.
On first run you will be prompted to create the initial admin account.
Local Development Setup
Prerequisites
npm install -g pnpm@91. Clone and install
git clone https://github.com/nubisco/verba.git
cd verba
pnpm install2. Configure the API
cp apps/api/.env.example apps/api/.envThe defaults work out of the box for local development:
PORT=4000
CORS_ORIGIN=http://localhost:5173
DATABASE_URL=file:./dev.db
JWT_SECRET=change-me-in-production3. Run database migrations
pnpm --filter @nubisco/verba-api exec prisma migrate devThis creates apps/api/prisma/dev.db with the full schema.
4. Start the dev servers
pnpm devBoth services start concurrently:
| Service | URL |
|---|---|
| Web | http://localhost:5173 |
| API | http://localhost:4000 |
First Steps: Creating Your First Project
1. Create a project
After logging in, click New Project on the dashboard. Give the project a name. Verba will generate a 2-letter avatar from the initials automatically.
2. Add locales
Inside the project, go to Settings → Locales and add the languages you need. Use BCP-47 tags such as en, pt-PT, de, ja, etc.
en → English (source language)
pt-PT → Portuguese (Portugal)
de → German
fr → French3. Add namespaces
Namespaces group related keys. Go to Settings → Namespaces and create at least one:
common → Shared UI strings (buttons, labels)
auth → Login, registration, password reset
dashboard → Dashboard-specific strings4. Add your first key
Go to Translation Keys and click New Key. Enter a flat key name and choose the namespace:
Key: common.welcome_message
Namespace: commonKeys are always flat strings internally. The dot-notation is a convention, not a hierarchy.
5. Assign translators
Go to Settings → Members to:
- Invite users (or add existing users) to the project with a role.
- Assign specific locales to each translator so they only see their languages.
| Role | What they can do |
|---|---|
| ADMIN | Full project management |
| MAINTAINER | Approve translations, manage keys |
| TRANSLATOR | Edit and submit translations |
| READER | Read-only access |
6. Start translating
Translators can now:
- Navigate to Translation Keys and click a key to open the editor.
- Select their assigned locale tab (or "My Languages" to see only their locales).
- Enter the translation and click Save. Status moves from
TODOtoIN_PROGRESSautomatically. - Click Submit for Review when ready. Status moves to
SUBMITTED.
A maintainer or admin then reviews and approves.
Project Structure (for developers)
verba/
├── apps/
│ ├── api/ # Node.js + Fastify backend
│ └── web/ # Vue 3 frontend
├── packages/
│ ├── shared/ # Shared TypeScript types
│ └── cli/ # verba setup / verba migrate CLI
└── docs/ # This documentation (VitePress)Useful Commands
| Command | Description |
|---|---|
pnpm dev | Start all services (API + web) |
pnpm build | Build all packages |
pnpm --filter @nubisco/verba-api test | Run API tests |
pnpm --filter @nubisco/verba-api exec prisma migrate dev | Run DB migrations (dev) |
pnpm docs:dev | Start docs dev server |
node packages/cli/dist/index.js setup | Run the setup wizard |
node packages/cli/dist/index.js migrate | Run migrations (production) |
Next Steps
- Core Concepts: understand projects, namespaces, workflow, and roles
- Workflow Guide: day-to-day translation flow for all team members
- Import & Export: bring in existing translations and export for production
- Self-Hosting: production deployment, environment variables, and upgrades