# Yellowstone Client Setup

> Configure TLS and authentication for TypeScript, Python, Go, and Rust clients.

Canonical: https://nolimitnodes.com/docs/api-reference/grpc/client-setup

Connect to:

```text
grpc.nln.clr3.org:443
```

Use TLS. Send your key through `x-token` with the Yellowstone TypeScript SDK or `x-api-key` with raw gRPC metadata.

## TypeScript

```bash
npm install @triton-one/yellowstone-grpc
```

```typescript

const client = new Client(
  "https://grpc.nln.clr3.org:443",
  process.env.NLN_API_KEY,
  { grpcMaxDecodingMessageSize: 64 * 1024 * 1024 },
)

await client.connect()
const response = await client.ping(1)
console.log(response.count)
```

Call `connect()` before any unary or streaming method.

## Python

Generate Python modules from `geyser.proto` and its Google proto imports.

```bash
python -m pip install grpcio grpcio-tools protobuf

python -m grpc_tools.protoc \
  -I ./proto \
  --python_out=. \
  --grpc_python_out=. \
  ./proto/geyser.proto
```

```python

channel = grpc.secure_channel(
    "grpc.nln.clr3.org:443",
    grpc.ssl_channel_credentials(),
)
client = rpc.GeyserStub(channel)
metadata = [("x-api-key", "YOUR_API_KEY")]

response = client.Ping(pb.PingRequest(count=1), metadata=metadata)
print(response.count)
```

## Go

Use the generated Yellowstone Go package. Create transport credentials from the system root certificate pool. Attach `x-api-key` metadata to the outgoing context.

```go
ctx := metadata.AppendToOutgoingContext(
    context.Background(),
    "x-api-key",
    os.Getenv("NLN_API_KEY"),
)
```

## Rust

Use `tonic` with the generated Yellowstone client.

```rust
let channel = tonic::transport::Channel::from_static(
    "https://grpc.nln.clr3.org:443"
)
.connect()
.await?;
```

Add `x-api-key` to each request metadata map before sending.

## Verify the connection

Run `Ping` first. A successful response echoes your integer count. `UNAUTHENTICATED` means the header is missing or invalid.
