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

# Up

> Start Langfuse + Langflow + observability in one command — with real health checks

`praisonai up` starts the Langfuse observability backend and the Langflow visual builder together, and reports a service as ready only after it passes a health check.

```mermaid theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
graph LR
    subgraph "praisonai up"
        Cmd[▶️ praisonai up] --> Start[🚀 Spawn services]
        Start --> Grace[⏳ 0.5s grace]
        Grace --> Alive{Still running?}
        Alive -->|No| Dead[❌ exited immediately]
        Alive -->|Yes| Health{Health check<br/>passes?}
        Health -->|No| NotReady[⚠️ not ready]
        Health -->|Yes| Ready[✅ Running]
    end

    classDef input fill:#6366F1,stroke:#7C90A0,color:#fff
    classDef process fill:#189AB4,stroke:#7C90A0,color:#fff
    classDef q fill:#F59E0B,stroke:#7C90A0,color:#fff
    classDef ok fill:#10B981,stroke:#7C90A0,color:#fff
    classDef bad fill:#8B0000,stroke:#7C90A0,color:#fff

    class Cmd input
    class Start,Grace process
    class Alive,Health q
    class Ready ok
    class Dead,NotReady bad
```

## Quick Start

**1. Start the full stack**

```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
praisonai up
```

Langfuse starts on port 3000, Langflow on port 7860, and observability is wired automatically.

**2. Start only one service**

```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
praisonai up --no-langfuse   # Langflow only
praisonai up --no-langflow   # Langfuse only
```

**3. Bind a custom host and port**

```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
praisonai up --host 0.0.0.0 --langfuse-port 3001
```

***

## Health-Check Semantics

A service is only reported as `✅ Running` once it is actually reachable — a dead or unreachable service is never shown as "Running".

```mermaid theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
sequenceDiagram
    participant User
    participant Up as praisonai up
    participant Service

    User->>Up: praisonai up
    Up->>Service: spawn process
    Note over Up: wait 0.5s grace period
    Up->>Service: poll()
    alt exited immediately
        Service-->>Up: exit code N
        Up-->>User: ❌ {name} exited immediately (code N)
    else still running
        Up->>Service: GET /api/v1/health
        alt healthy
            Service-->>Up: 200 OK
            Up-->>User: ✅ Running
        else timed out
            Service-->>Up: unreachable
            Up-->>User: ⚠️ not ready + install hint
        end
    end
```

| Situation | Behaviour |
| - | - |
| Service exits within 0.5s | Prints `❌ {name} exited immediately (code N)` and is removed from the managed list |
| `requests` not installed | Fails **closed** — the service is reported **not ready**, not blindly "Running". Install with `pip install requests` |
| Health check fails | The service is **not** added to the ready table; the install hint is printed (`pip install 'praisonai[langfuse]'` / `praisonai[flow]`) |
| Health check passes | The service is appended to the ready list and shown as `✅ Running` |

> [!NOTE]
>
> A service is only appended to the "Services Ready" table **after** its health
> check passes. Before this fix, services were listed as "Running" before the
> check, so a dead or unreachable service could still appear healthy.

***

## Configuration Options

| Flag | Type | Default | Description |
| - | - | - | - |
| `--langfuse-port` | `int` | `3000` | Langfuse port |
| `--no-langfuse` | `bool` | `False` | Skip starting Langfuse |
| `--langflow-port` | `int` | `7860` | Langflow port |
| `--no-langflow` | `bool` | `False` | Skip starting Langflow |
| `--observe` | `str` | `"langfuse"` | Enable observability backend |
| `--host` | `str` | `"127.0.0.1"` | Host to bind to |
| `--no-open` | `bool` | `False` | Don't open the browser |
| `--wait` | `int` | `60` | Seconds to wait for services to become healthy (`0` disables the check) |

Skipping both services (`--no-langfuse --no-langflow`) is rejected.

***

## Subcommands

| Command | Description |
| - | - |
| `praisonai up status` | Check each service's health and response time (`--langfuse-url`, `--langflow-url`) |
| `praisonai up logs` | Not implemented — exits non-zero. Use `docker logs <container>` instead |

***

## Best Practices

> [accordion] Install requests so health checks run
>
> Without `requests`, `praisonai up` cannot confirm a service is healthy and
> reports it as not ready. Install it: `pip install requests`.

> [accordion] Disable the wait with --wait 0 for fast local loops
>
> Set `--wait 0` to skip the health check when you know the services are
> already reachable — but note nothing then verifies readiness.

> [accordion] Read the install hint when a service fails
>
> A failed start prints the exact extra to install: `pip install
>         'praisonai[langfuse]'` or `pip install 'praisonai[flow]'`.

***

## Related

> [card] [Serve](https://praison.ai/docs/cli/serve.md)
>
> Launch individual PraisonAI servers

> [card] [Flow](https://praison.ai/docs/cli/flow.md)
>
> The Langflow visual builder command


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.