> ## Documentation Index
> Fetch the complete documentation index at: https://docs.velahq.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> Vela is an open-source event ingestion and notification platform. Send structured events from your backend, validate them against schemas, and get real-time alerts on Slack, Discord, Email, or webhooks.

<img className="block dark:hidden" src="https://mintcdn.com/vela-ffa57f8d/u9aRHCdF9_CF0f8i/images/hero-light.svg?fit=max&auto=format&n=u9aRHCdF9_CF0f8i&q=85&s=7b85192415f25788799a3d5e08891b47" alt="Vela Platform" width="2400" height="1350" data-path="images/hero-light.svg" />

<img className="hidden dark:block" src="https://mintcdn.com/vela-ffa57f8d/u9aRHCdF9_CF0f8i/images/hero-dark.svg?fit=max&auto=format&n=u9aRHCdF9_CF0f8i&q=85&s=75f7b0ba37ee555f983f2706d6e94891" alt="Vela Platform" width="2400" height="1350" data-path="images/hero-dark.svg" />

## What is Vela?

Vela sits between your application and your team's alerting tools. You send structured events from your backend — Vela validates them, stores them, evaluates your notification rules, and delivers alerts to the right channels automatically.

**The problem Vela solves:** Most teams duct-tape event tracking together with scattered log statements, hardcoded Slack messages, and cron jobs polling the database. When something breaks at 2am, there's no single place to look. Vela gives you that place.

## How it works

<Steps>
  <Step title="Define your event schemas">
    Describe the shape of events your application produces. Vela validates every incoming event against its schema — invalid data is rejected at the door before it can pollute your system.

    ```json theme={null}
    {
      "eventName": "order.placed",
      "fields": [
        { "id": "f1", "name": "orderId",     "type": "string", "required": true },
        { "id": "f2", "name": "amountCents", "type": "number", "required": true }
      ]
    }
    ```
  </Step>

  <Step title="Send events from your backend">
    One SDK call. Vela handles validation, storage, and routing.

    ```typescript theme={null}
    import { VelaIngestClient } from '@vela-event/sdk';

    const vela = new VelaIngestClient(process.env.VELA_API_KEY);

    await vela.ingest({
      event: 'order.placed',
      data: { orderId: 'ord_123', amountCents: 4999 },
      level: 'info',
    });
    ```
  </Step>

  <Step title="Set up notification rules">
    Define which events trigger alerts and where they go — no code changes needed. Rules are managed in the dashboard and can match on any payload field.

    **Example:** *"When `payment.failed` arrives with `amountCents > 10000`, post to #alerts on Slack."*
  </Step>
</Steps>

## Core concepts

| Concept               | Description                                                                                                   |
| --------------------- | ------------------------------------------------------------------------------------------------------------- |
| **App**               | An isolated workspace that owns schemas, events, and rules. One app per service or environment.               |
| **Schema**            | Defines the fields an event must contain. Enforced at ingest time — invalid payloads are rejected with `400`. |
| **Event**             | A structured payload sent to Vela. Validated, stored, and routed through the rules engine.                    |
| **Notification Rule** | A condition-based trigger. Fires when an event matches, then routes to a destination.                         |
| **Destination**       | Where alerts are sent — Slack, Discord, Email, or a custom webhook.                                           |

## Choose your integration

<CardGroup cols={3}>
  <Card title="TypeScript SDK" icon="js" href="/sdks/typescript/overview">
    Zero-dependency client for Node.js 18+. Full TypeScript types. Works in browsers and edge runtimes.
  </Card>

  <Card title="Python SDK" icon="python" href="/sdks/python/overview">
    Sync and async support via httpx. Python 3.9+. Fully typed.
  </Card>

  <Card title="CLI" icon="terminal" href="/cli/overview">
    Manage schemas as JSON files, version-control them, push to Vela. Like Prisma for your events.
  </Card>
</CardGroup>

## Quick links

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/quickstart">
    Send your first event in under 5 minutes.
  </Card>

  <Card title="Core Concepts" icon="lightbulb" href="/concepts">
    Understand apps, schemas, events, and rules in depth.
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference/introduction">
    Full HTTP API docs with curl examples.
  </Card>

  <Card title="Credentials" icon="key" href="/credentials/overview">
    Client secrets vs API keys — when to use each.
  </Card>
</CardGroup>

## Self-hosting

Vela is fully open source under AGPL-3.0. The only dependencies are PostgreSQL and RabbitMQ — both included in the Docker Compose file.

```bash theme={null}
git clone https://github.com/vela-event/vela.git
cd vela
cp .env.sample .env
docker compose -f docker-compose.infra.yml up -d
pnpm install && pnpm migration:run && pnpm start:dev
```

API available at `http://localhost:3000`. Swagger docs at `http://localhost:3000/docs`.
