# Transport

> The transport layer is responsible for communication between services.

---

LLMS index: [llms.txt](/llms.txt)

---

![Transport](transport.jpg)

## Features
- Pluggable transport implementations
- Secure and efficient communication

## Implementations
Supported transports include:
- HTTP (default)
- NATS (`go-micro.dev/v6/transport/nats`)
- gRPC (`go-micro.dev/v6/transport/grpc`)
- Memory (`go-micro.dev/v6/transport/memory`)

## Important: Transport vs Native gRPC

The gRPC **transport** uses gRPC as an underlying communication protocol, similar to how NATS or RabbitMQ might be used. It does **not** provide native gRPC compatibility with tools like `grpcurl` or standard gRPC clients generated by `protoc`.

If you need native gRPC compatibility (to use `grpcurl`, polyglot gRPC clients, etc.), you must use the gRPC **server** and **client** packages instead:

```go
import (
    grpcServer "go-micro.dev/v6/server/grpc"
    grpcClient "go-micro.dev/v6/client/grpc"
)

service := micro.NewService("myservice",
    micro.Server(grpcServer.NewServer()),
    micro.Client(grpcClient.NewClient()),
)
```

See [Native gRPC Compatibility](guides/grpc-compatibility) for a complete guide.

Plugins are scoped under `go-micro.dev/v6/transport/<plugin>`.

You can specify the transport when initializing your service or via env vars.

## Example Usage

Here's how to use a custom transport (e.g., gRPC) in your Go Micro service:

```go
package main

import (
    "go-micro.dev/v6"
    "go-micro.dev/v6/transport/grpc"
)

func main() {
    t := grpc.NewTransport()
    service := micro.NewService("transport-example",
        micro.Transport(t),
    )
    service.Init()
    service.Run()
}
```

NATS transport:
```go
import (
    "go-micro.dev/v6"
    tnats "go-micro.dev/v6/transport/nats"
)

func main() {
    t := tnats.NewTransport()
    service := micro.NewService("transport-example", micro.Transport(t))
    service.Init()
    service.Run()
}
```

## Configure via environment

```bash
MICRO_TRANSPORT=nats MICRO_TRANSPORT_ADDRESS=nats://127.0.0.1:4222 go run main.go
```

Common variables:
- `MICRO_TRANSPORT`: selects the transport implementation (`http`, `nats`, `grpc`, `memory`).
- `MICRO_TRANSPORT_ADDRESS`: comma-separated list of transport addresses.
