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

# Quickstart

> Install pd, log in, and move your first record.

<Steps>
  <Step title="Install pd">
    Download the binary and put it on your `PATH`:

    ```bash theme={null}
    curl -fL "https://pipedata.io/download/pd" -o pd
    chmod +x pd && mv pd "$HOME/.local/bin/pd"
    ```

    Later, upgrade in place with `pd self-update`.
  </Step>

  <Step title="Log in">
    ```bash theme={null}
    pd login
    ```

    `pd` prints a device code and a URL. Open the URL in a browser, paste the code, and approve. Credentials are saved to `~/.pd/config.json`.

    <Tip>Override the region with `pd login --host eu-central-1.pipedata.io` (default).</Tip>
  </Step>

  <Step title="Send your first record">
    ```bash theme={null}
    echo '{"hello":"world"}' | pd push demo
    ```

    `pd push` creates the pipe `demo` if it doesn't exist, then writes one NDJSON record into it.
  </Step>

  <Step title="Read it back">
    ```bash theme={null}
    pd pull demo
    ```

    `pd pull` writes NDJSON to stdout, one record per line. The local cursor advances so a second `pd pull demo` returns nothing — pass `--start-id 0` to replay from the top.
  </Step>
</Steps>

## Where next

<Columns cols={3}>
  <Card title="Send data" icon="arrow-right-to-bracket" href="/guides/send">
    Push from stdin or accept HTTP webhooks.
  </Card>

  <Card title="Forward to a webhook" icon="arrow-up-right-from-square" href="/guides/forward">
    Pipe records to any HTTP endpoint with retries.
  </Card>

  <Card title="All commands" icon="terminal" href="/reference/commands">
    Every `pd` command with flags and examples.
  </Card>
</Columns>
