# Protocol Buffers - Prototiller design documents

This directory contains historical design documents that describe plans for
implementing Prototiller, a tool for updating proto files to be conformant with Protobuf Editions functionality. For design documents related to Protobuf Editions, see [the README](../editions/README.md).

These files represent the state that the original documents were in at the time
that they were published to this repository. While some updates *may* be made to
the files after their initial upload, you should consider the possibility that
they are outdated as you read them. These are purely for historical value and
should not be treated as documentation of the current state.

Note that the authors listed in the topics were the authors of the *original*
version of the document; it may have changed since they last worked on the
document.

## Design Documents

The following topics are in this repository:

*   [Prototiller Requirements for Editions](prototiller-reqs-for-editions.md)
*   [Prototiller Requirements for Edition Zero](prototiller-reqs-for-edition-zero.md)
*   [Editions Tooling](editions-tooling.md)