Skip to main content

guides/getting_started.md

# Getting Started with PhoenixGenApiTui

PhoenixGenApiTui is a terminal-based interactive explorer for PhoenixGenApi applications. Navigate your services, function configs, call flows, cluster topology, rate limits, and runtime health โ€” without leaving the terminal.

## Installation

Add `phoenix_gen_api_tui` to your dependencies:

```elixir
def deps do
  [
    {:phoenix_gen_api_tui, "~> 0.1.0"}
  ]
end
```

For development-only exploration, restrict to `:dev`:

```elixir
{:phoenix_gen_api_tui, "~> 0.1.0", only: :dev}
```

## Quick Start

Start your application and open IEx:

```bash
iex -S mix
```

Then launch the TUI:

```elixir
iex> PhoenixGenApiTui.ui()
```

## UI Layout

```
โ•ญโ”€ ๐Ÿ”ฅ PhoenixGenApi TUI Explorer  โ”‚  UserService โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
โ•ญโ”€ Search โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ•ญโ”€ user_service โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ / search...          โ”‚ โ”‚ Functions โ”‚ Call Flows โ”‚ Cluster โ”‚ Health โ”‚.. โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
โ•ญโ”€ Navigation 2s ยท 3f โ”€โ•ฎ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ โ–ถ โ—† user_service (2)  โ”‚ โ”‚ Request Type  Version  Response  Nodes       โ”‚
โ”‚     โ”œ get_user        โ”‚ โ”‚ get_user      1.0.0     sync      [node1]   โ”‚
โ”‚     โ”” create_user     โ”‚ โ”‚ create_user   1.0.0     sync      [node1]   โ”‚
โ”‚   โ—† blog_service (1)  โ”‚ โ”‚                                              โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
โ”‚ j/k navigate  โŽ select  h/l panels  Tab tabs  / search  r refresh  q   โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
```

## How It Works

PhoenixGenApiTui reads runtime configuration from your running PhoenixGenApi application:

```
iex> PhoenixGenApiTui.ui()
  โ†’ PhoenixGenApiTui.Introspection.load()
  โ†’ PhoenixGenApi.ConfigDb.get_all_functions()
  โ†’ PhoenixGenApi.Diagnostics.list_call_flows()
  โ†’ PhoenixGenApi.Diagnostics.cluster_view()
  โ†’ PhoenixGenApi.Diagnostics.health_check()
  โ†’ PhoenixGenApi.Diagnostics.statistics()
  โ†’ PhoenixGenApi.RateLimiter.get_configured_limits()
  โ†’ Pre-loaded into navigable state struct
  โ†’ ExRatatui.App renders it (local, SSH, or distributed)
```

No database connection is needed. The tool reads the *shape* of your running system, not its data.

## Data Caching

The explorer caches introspection data with a 30-second TTL to avoid excessive RPC calls. Press `r` at any time to force a refresh. The header shows a status indicator:

- `โ—` โ€” All subsystems loaded successfully
- `โš ` โ€” Some subsystems unavailable (partial data)
- `โ—‹` โ€” Connection error

## See Also

- [Keyboard Reference](keyboard_reference.md) โ€” all keybindings
- [Transports](transports.md) โ€” SSH and distributed mode
- [Tab Reference](tabs.md) โ€” what each tab shows