---
layout: default
---

# Transport

<img src="/images/generated/transport.jpg" alt="Transport" style="width: 100%; border-radius: 8px; margin: 1rem 0 1.5rem;" />

The transport layer is responsible for communication between services.

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

## Implementations
Supported transports include:
- HTTP (default)
- NATS (`go-micro.dev/v5/transport/nats`)
- gRPC (`go-micro.dev/v5/transport/grpc`)
- Memory (`go-micro.dev/v5/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/v5/server/grpc"
    grpcClient "go-micro.dev/v5/client/grpc"
)

// Important: Server must be specified before Name
service := micro.NewService(
    micro.Server(grpcServer.NewServer()),
    micro.Client(grpcClient.NewClient()),
    micro.Name("myservice"),
)
```

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

Plugins are scoped under `go-micro.dev/v5/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/v5"
    "go-micro.dev/v5/transport/grpc"
)

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

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

func main() {
    t := tnats.NewTransport()
    service := micro.NewService(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.
