2016-05-12 21:57:48 +00:00
# Standard Readme
2015-12-27 21:01:27 +00:00
[![ ](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square )](http://ipn.io)
[![ ](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square )](http://ipfs.io/)
2015-12-28 21:59:34 +00:00
[![ ](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square )](http://webchat.freenode.net/?channels=%23ipfs)
2015-12-27 21:01:27 +00:00
2016-05-12 22:00:56 +00:00
> Readme Standard Style
2015-12-27 21:01:27 +00:00
2016-05-12 21:26:29 +00:00
This repo is for standardizing how READMEs should look. The goal is to have:
- A well defined specification that other people could look to;
- An example README that can be used for comparison (this README.md is the example);
- A linter that can be used to look at errors in a given Readme;
- A generator that can be used to quickly scaffold out new READMEs.
2015-12-27 23:13:58 +00:00
2016-05-13 16:32:26 +00:00
## Table of Contents
2016-05-12 21:26:29 +00:00
2016-05-13 16:43:16 +00:00
- [Background ](#background )
- [Goals: ](#goals )
2016-05-13 16:20:03 +00:00
- [Installation ](#installation )
2016-05-12 21:26:29 +00:00
- [Usage ](#usage )
- [Specification ](#specification )
- [Requirements ](#requirements )
- [Sections ](#sections )
2016-05-13 16:20:03 +00:00
- [Title ](#title )
- [Banner ](#banner )
- [Badges ](#badges )
- [Short Description ](#short-description )
- [Long Description ](#long-description )
2016-05-13 16:43:16 +00:00
- [Table of Contents ](#table-of-contents-1 )
2016-05-13 16:20:03 +00:00
- [Security ](#security )
- [Background section ](#background-section )
- [Installation ](#installation-1 )
2016-05-12 21:26:29 +00:00
- [Usage Section ](#usage-section )
2016-05-13 16:20:03 +00:00
- [Extra Sections ](#extra-sections )
2016-05-12 21:26:29 +00:00
- [API ](#api )
2016-05-13 16:43:16 +00:00
- [Contribute ](#contribute )
2016-05-12 21:26:29 +00:00
- [License ](#license )
2016-05-13 16:43:16 +00:00
- [Contribute ](#contribute-1 )
2016-05-12 21:26:29 +00:00
- [License ](#license-1 )
2016-05-13 16:20:03 +00:00
## Background
Standard Readme started with in the issue originally posed by [@maxogden ](https://github.com/maxogden ) over at [feross/standard ](https://github.com/feross/standard ) in [this issue ](https://github.com/feross/standard/issues/141 ). A lot of that discussion ended up in [zcei's standard-readme ](https://github.com/zcei/standard-readme/issues/1 ) repository. While working on maintaining the [IPFS ](https://github.com/ipfs ) repositories, I needed a way to standardize Readmes. This is a result of that.
2016-05-23 12:37:03 +00:00
> Your documentation is complete when someone can use your module without ever
having to look at its code. This is very important. This makes it possible for
you to separate your module's documented interface from its internal
implementation (guts). This is good because it means that you are free to
change the module's internals as long as the interface remains the same.
> Remember: the documentation, not the code, defines what a module does.
2016-06-01 15:58:49 +00:00
~ [Ken Williams, Perl Hackers ](http://mathforum.org/ken/perl_modules.html#document )
2016-05-23 12:37:03 +00:00
2016-05-13 16:20:03 +00:00
### Goals:
1. A well defined **specification** . This can be found in the [Specification ](#specification ) section. It is a constant work in progress; please open issues to discuss changes.
2. **An example README** . This Readme is fully standard-readme compliant.
3. A **linter** that can be used to look at errors in a given Readme. Please refer to the [tracking issue ](https://github.com/RichardLitt/standard-readme/issues/5 ).
2016-05-13 16:32:26 +00:00
4. A **generator** that can be used to quickly scaffold out new READMEs. Please refer to the [tracking issue ](https://github.com/RichardLitt/standard-readme/issues/6 ).
5. A **compliant badge** for users.
2016-05-13 16:20:03 +00:00
2016-05-12 21:26:29 +00:00
## Installation
2016-05-12 22:10:19 +00:00
This project uses [node][] and [npm][]. Go check them out if you don't have them locally installed.
2016-05-12 21:26:29 +00:00
```sh
2016-05-13 16:20:03 +00:00
$ npm i -g standard-readme
2016-05-12 21:26:29 +00:00
```
2015-12-27 23:13:58 +00:00
## Usage
2016-05-13 16:20:03 +00:00
Currently, this is only a Readme spec.
2015-12-27 23:13:58 +00:00
2016-05-13 16:20:03 +00:00
```
$ standard-readme
// Will output spec (this Readme)
```
2015-12-27 23:13:58 +00:00
2016-05-23 11:48:02 +00:00
### Example Readmes
To see how the specification has been applied, see the [example-readmes ](example-readmes/ ).
2016-05-12 21:26:29 +00:00
## Specification
### Requirements
A compliant README must:
- Be called README.md (with capitalization).
- Be a valid Markdown file.
2016-05-13 16:20:03 +00:00
- Sections must appear in order delineated below. Optional sections may be omitted.
- Must be new lines between each section.
2016-05-12 21:26:29 +00:00
2016-05-28 21:52:26 +00:00
**Suggestions:**
- A "Back to Top" link for longer sections can be useful, but is not required by any means.
2016-05-12 21:26:29 +00:00
### Sections
2016-05-13 16:20:03 +00:00
#### Title
**Status:** Required.
**Requirements:**
2016-05-12 21:26:29 +00:00
- Must match repository name. If it cannot, there must be a note in the long description about why.
- Must match package manager name. If it cannot, there must be a note in the long description about why.
2016-05-13 16:20:03 +00:00
**Suggestions:**
- Should be self-evident.
2016-05-12 21:26:29 +00:00
#### Banner
**Status:** Optional.
**Requirements:**
- Must link to local image in current repository.
- Must appear directly after the title.
#### Badges
2016-05-13 16:20:03 +00:00
**Status:** Optional.
2016-05-12 21:26:29 +00:00
**Requirements:**
- Must be newline delimited.
2016-05-12 22:10:19 +00:00
#### Short Description
2016-05-13 16:20:03 +00:00
**Status:** Required.
**Requirements:**
2016-05-12 21:58:32 +00:00
- Must be less than 120 characters.
- Must start with `> `
- Must be on it's own line.
2016-05-12 22:10:19 +00:00
- Must match the description in the packager manager's `description` field.
2016-05-12 21:58:32 +00:00
- Must match GitHub's description (if on GitHub).
**Suggestions:**
- Use [gh-description ](https://github.com/RichardLitt/gh-description ) to set and get GitHub description.
2016-05-12 22:10:19 +00:00
- Use `npm show . description` to show the description from a local [npm][] package.
2016-05-12 21:26:29 +00:00
2016-05-13 16:20:03 +00:00
#### Long Description
**Status:** Optional.
**Requirements:**
- Must have no heading.
**Suggestions:**
- If too long, consider moving to the [Background ](#background ) section.
- Cover the main reasons for building the repository.
2016-06-01 15:58:49 +00:00
- "This should describe your module in broad terms,
2016-05-23 12:37:03 +00:00
generally in just a few paragraphs; more detail of the module's
routines or methods, lengthy code examples, or other in-depth
material should be given in subsequent sections.
Ideally, someone who's slightly familiar with your module should be
able to refresh their memory without hitting "page down". As your
reader continues through the document, they should receive a
2016-06-01 15:58:49 +00:00
progressively greater amount of knowledge."
~ [Kirrily "Skud" Robert, perlmodstyle ](http://perldoc.perl.org/perlmodstyle.html )
2016-05-23 12:37:03 +00:00
2016-05-13 16:20:03 +00:00
2016-05-12 21:26:29 +00:00
#### Table of Contents
2016-05-13 16:20:03 +00:00
**Status:** Required.
**Requirements:**
- Must link to all Markdown sections in the file.
2016-05-13 16:31:22 +00:00
- Must start with the next section; do not include the title or Table of Contents headings.
2016-05-26 14:32:59 +00:00
- Must be at least one-depth: must capture all `##` headings.
**Suggestions:**
- May capture third and fourth depth headings. If it is a long ToC, these are optional.
2016-05-13 16:20:03 +00:00
#### Security
**Status**: Optional.
**Requirements:**
- May go here if visibility of security section is important. Otherwise, should be in [Extra Sections ](#extra-sections ).
#### Background section
**Status:** Optional.
**Requirements:**
- Cover motivation.
- Cover abstract dependencies.
2016-05-13 16:28:41 +00:00
- Cover intellecutal provenance: A `See Also` section is also fitting.
2016-05-13 16:20:03 +00:00
#### Installation
**Status:** Required.
**Requirements:**
- Code block illustrating how to install.
Subsections:
- `Dependencies` . Required if necessary.
- `Updating` . Optional.
**Suggestions:**
- Link to prerequisite sites for language. [npmjs][], [godocs][], etc.
- Include any system-specific information needed for Installation.
- Subsection for dependencies needed for install to work.
2016-05-12 21:26:29 +00:00
#### Usage Section
2016-05-13 16:20:03 +00:00
**Status:** Required.
**Requirements:**
- Code block illustrating common usage.
- If CLI compatible, code block indicating common usage.
- If importable, code block indicating both import functionality and usage.
Subsections:
- `CLI` . Required if CLI functionality exists.
2016-05-13 16:28:41 +00:00
- If relevant, point to a runnable file for the usage code.
2016-05-13 16:20:03 +00:00
**Suggestions:**
- Cover basic choices that may affect usage: for instance, if JavaScript, cover promises/callbacks, ES6 here.
#### Extra Sections
**Status**: Optional.
**Requirements:**
- None.
2016-05-12 21:26:29 +00:00
#### API
2016-05-13 16:20:03 +00:00
**Status:** Optional.
**Requirements:**
2016-05-13 16:28:41 +00:00
- Describe exported functions and objects.
2016-05-12 21:26:29 +00:00
2016-05-13 16:20:03 +00:00
**Suggestions:**
- Describe signatures, return types, callbacks, and events.
2016-05-13 16:28:41 +00:00
- Cover types covered where not obvious.
2016-05-13 16:20:03 +00:00
- Describe caveats.
2016-05-26 14:36:11 +00:00
- If using an external API generator (like go-doc, js-doc, or so on), point to an external `API.md` file. This can be the only item in the section, if present.
2016-05-13 16:20:03 +00:00
#### Contribute
**Status**: Required.
**Requirements:**
- Link to `CONTRIBUTE.md` file if there is one.
- State where users can ask questions.
- State whether PRs are accepted.
- List any requirements for contributing; for instance, having a sign-off on commits.
2016-06-02 09:35:00 +00:00
- Link to Code of Conduct.
2016-05-13 16:20:03 +00:00
**Suggestions:**
- Be as friendly as possible.
- Link to the GitHub issues.
2016-05-12 21:26:29 +00:00
#### License
2016-05-13 16:20:03 +00:00
**Status:** Required.
**Requirements:**
- State license initials or name.
- State license owner.
- Must be last section.
2016-05-12 21:26:29 +00:00
2016-05-13 16:20:03 +00:00
**Suggestions:**
- Link to longer License file in local repository.
2016-05-12 21:26:29 +00:00
2016-05-13 16:20:03 +00:00
## Contribute
Feel free to dive in! [Open an issue ](https://github.com/RichardLitt/standard-readme/issues/new ) or submit PRs.
2016-05-12 21:26:29 +00:00
2015-12-27 23:13:58 +00:00
## License
2015-12-28 16:01:03 +00:00
MIT (c) Protocol Labs
2016-05-12 22:10:19 +00:00
[node]: http://nodejs.org
2016-05-12 22:11:29 +00:00
[npm]: https://npmjs.com