---
title: "Configure Clients"
description: "Configure Olm for connecting to Pangolin clients"
---

## Mac and Windows

Each respective client has a preferences window with all currently available configuration parameters like DNS override and preferred DNS servers. In your desktop client, click the menu bar or system tray icon, select More in the menu, and click Preferences.

<Frame caption="Screenshot of how to access preferences window on Mac client. The steps are the same on Windows.">
  <img src="/images/mac-client-preferences.png" centered/>
</Frame>

## Pangolin CLI

Refer to the [documentation in the official repository](https://github.com/fosrl/cli/blob/main/docs/pangolin.md) for the available commands, default values, and more.

## Olm CLI

### Flags

<ResponseField name="id" type="string" required>
  Olm ID generated by Pangolin to identify the client.
  
  **Example**: `31frd0uzbjvp721`
</ResponseField>

<ResponseField name="secret" type="string" required>
  A unique secret used to authenticate the client ID with the websocket.
  
  **Example**: `h51mmlknrvrwv8s4r1i210azhumt6isgbpyavxodibx1k2d6`
  
  <Warning>
  Keep this secret private and secure. It's used for authentication.
  </Warning>
</ResponseField>

<ResponseField name="endpoint" type="string" required>
  The endpoint where both Gerbil and Pangolin reside for websocket connections.
  
  **Example**: `https://pangolin.example.com`
</ResponseField>

<ResponseField name="mtu" type="integer">
  MTU for the WireGuard interface.
  
  **Default**: `1280`
</ResponseField>

<ResponseField name="dns" type="string">
  DNS server to use for resolving the endpoint.
  
  **Default**: `8.8.8.8`
</ResponseField>

<ResponseField name="log-level" type="string">
  The log level to use for Olm output.
  
  **Options**: `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`
  
  **Default**: `INFO`
</ResponseField>

<ResponseField name="ping-interval" type="string">
  Interval for pinging the server.
  
  **Default**: `3s`
</ResponseField>

<ResponseField name="ping-timeout" type="string">
  Timeout for each ping.
  
  **Default**: `5s`
</ResponseField>

<ResponseField name="holepunch" type="boolean">
  Enable NAT hole punching mode instead of relaying through the VPS.
  
  **Default**: `false`
</ResponseField>

<ResponseField name="config-file" type="string">
  Path to a configuration file containing the same arguments as command line.
  
  **Example**: `/etc/olm/config.yaml`
</ResponseField>

### Environment Variables

All CLI arguments can be set using environment variables as an alternative to command line flags. Environment variables are particularly useful when running Olm in containerized environments.

<Note>
When both environment variables and CLI arguments are provided, CLI arguments take precedence.
</Note>

<ResponseField name="PANGOLIN_ENDPOINT" type="string">
  Endpoint of your Pangolin server (equivalent to `--endpoint`)
</ResponseField>

<ResponseField name="OLM_ID" type="string">
  Olm ID generated by Pangolin (equivalent to `--id`)
</ResponseField>

<ResponseField name="OLM_SECRET" type="string">
  Olm secret for authentication (equivalent to `--secret`)
</ResponseField>

<ResponseField name="OLM_MTU" type="integer">
  MTU for the WireGuard interface (equivalent to `--mtu`)
  
  **Default**: `1280`
</ResponseField>

<ResponseField name="OLM_DNS" type="string">
  DNS server to use for resolving the endpoint (equivalent to `--dns`)
  
  **Default**: `8.8.8.8`
</ResponseField>

<ResponseField name="OLM_LOG_LEVEL" type="string">
  Log level (equivalent to `--log-level`)
  
  **Default**: `INFO`
</ResponseField>

<ResponseField name="OLM_PING_INTERVAL" type="string">
  Interval for pinging the server (equivalent to `--ping-interval`)
  
  **Default**: `3s`
</ResponseField>

<ResponseField name="OLM_PING_TIMEOUT" type="string">
  Timeout for each ping (equivalent to `--ping-timeout`)
  
  **Default**: `5s`
</ResponseField>

<ResponseField name="OLM_HOLEPUNCH" type="boolean">
  Enable NAT hole punching mode (equivalent to `--holepunch`)
  
  **Default**: `false`
</ResponseField>

<ResponseField name="OLM_HEALTH_FILE" type="string">
  Path to health file for connection monitoring (equivalent to `--health-file`)
</ResponseField>

<ResponseField name="OLM_CONFIG_FILE" type="string">
  Load the config from this file instead of command line arguments (equivalent to `--config-file`)
</ResponseField>
