---
title: Overview
sidebar_position: 0
toc_min_heading_level: 2
toc_max_heading_level: 3
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# Overview

TypeSpec library and emitter for Protobuf (gRPC)

## Install

<Tabs>
<TabItem value="spec" label="In a spec" default>

```bash
npm install @typespec/protobuf
```

</TabItem>
<TabItem value="library" label="In a library" default>

```bash
npm install --save-peer @typespec/protobuf
```

</TabItem>
</Tabs>

## Emitter usage

[See documentation](./emitter.md)

## TypeSpec.Protobuf

### Decorators

- [`@field`](./decorators.md#@TypeSpec.Protobuf.field)
- [`@message`](./decorators.md#@TypeSpec.Protobuf.message)
- [`@package`](./decorators.md#@TypeSpec.Protobuf.package)
- [`@reserve`](./decorators.md#@TypeSpec.Protobuf.reserve)
- [`@service`](./decorators.md#@TypeSpec.Protobuf.service)
- [`@stream`](./decorators.md#@TypeSpec.Protobuf.stream)

### Models

- [`Extern`](./data-types.md#TypeSpec.Protobuf.Extern)
- [`Map`](./data-types.md#TypeSpec.Protobuf.Map)
- [`PackageDetails`](./data-types.md#TypeSpec.Protobuf.PackageDetails)

## TypeSpec.Protobuf.WellKnown

### Models

- [`Any`](./data-types.md#TypeSpec.Protobuf.WellKnown.Any)
- [`Empty`](./data-types.md#TypeSpec.Protobuf.WellKnown.Empty)
- [`LatLng`](./data-types.md#TypeSpec.Protobuf.WellKnown.LatLng)
- [`Timestamp`](./data-types.md#TypeSpec.Protobuf.WellKnown.Timestamp)
