# protobuf-dt

## About
This project provides IDE integration to Eclipse users when working on protobuf
files.  Contributions can be made through
[Google Source](https://protobuf-dt.googlesource.com).
For more info see
[CONTRIBUTING](https://protobuf-dt.googlesource.com/protobuf/+/master/CONTRIBUTING.md)

## License
The
[Eclipe Public License](https://protobuf-dt.googlesource.com/protobuf/+/master/com.google.eclipse.protobuf.feature/epl-v10.html)
can be found in com.eclipse.protobuf.feature.

## Installing protobuf-dt
The update site for protobuf-dt is
http://google.github.io/protobuf-dt/updates/latest/.

As of version 2.3.0, the Protocol Buffer requires Eclipse Neon or greater.

### Install using Eclipse Install tool
Navigate to "Help" > "Install New Software...".

Click **Add...**.

Enter _Protobuf Editor_ into the "Name:" field.

Paste _http://google.github.io/protobuf-dt/updates/latest/_
into the "Location:" field.

Click **OK**.

From the dropdown labeled "Work with:" select the repository you just added.

Make sure that "Group items by category" is deselected.

"Google Inc." should be listed in the repository explorer window.

Select the checkbox next to "Google Inc.".

Click **Next**.

Click **Next** again on the "Item Details" page.

Accept the terms of the license agreement and click **Finish**.

### Install using the Eclipse Marketplace
Navigate to "Help" > "Eclipse Marketplace...".

Search for _protobuf-dt_.

"protobuf-dt" should be listed in the search window.

Click "Install".

Accept the terms of the license agreement and click **Finish**.

