# Documentation

- [PostCSS Architecture](https://github.com/postcss/postcss/blob/main/docs/architecture.md#postcss-architecture)
  - [Overview](https://github.com/postcss/postcss/blob/main/docs/architecture.md#overview)
  - [Workflow](https://github.com/postcss/postcss/blob/main/docs/architecture.md#workflow)
  - [Core Structures](https://github.com/postcss/postcss/blob/main/docs/architecture.md#core-structures)
  - [API Reference](https://github.com/postcss/postcss/blob/main/docs/architecture.md#api-reference)
- [PostCSS Plugins](https://github.com/postcss/postcss/blob/main/docs/plugins.md#postcss-plugins)
  - [Control](https://github.com/postcss/postcss/blob/main/docs/plugins.md#control)
  - [Packs](https://github.com/postcss/postcss/blob/main/docs/plugins.md#packs)
  - [Future CSS Syntax](https://github.com/postcss/postcss/blob/main/docs/plugins.md#future-css-syntax)
  - [Fallbacks](https://github.com/postcss/postcss/blob/main/docs/plugins.md#fallbacks)
  - [Language Extensions](https://github.com/postcss/postcss/blob/main/docs/plugins.md#language-extensions)
  - [Colors](https://github.com/postcss/postcss/blob/main/docs/plugins.md#colors)
  - [Images and Fonts](https://github.com/postcss/postcss/blob/main/docs/plugins.md#images-and-fonts)
  - [Grids](https://github.com/postcss/postcss/blob/main/docs/plugins.md#grids)
  - [Optimizations](https://github.com/postcss/postcss/blob/main/docs/plugins.md#optimizations)
  - [Shortcuts](https://github.com/postcss/postcss/blob/main/docs/plugins.md#shortcuts)
  - [Others](https://github.com/postcss/postcss/blob/main/docs/plugins.md#others)
  - [Analysis](https://github.com/postcss/postcss/blob/main/docs/plugins.md#analysis)
  - [Reporters](https://github.com/postcss/postcss/blob/main/docs/plugins.md#reporters)
  - [Fun](https://github.com/postcss/postcss/blob/main/docs/plugins.md#fun)
- [PostCSS and Source Maps](https://github.com/postcss/postcss/blob/main/docs/source-maps.md#postcss-and-source-maps)

- [How to Write Custom Syntax](https://github.com/postcss/postcss/blob/main/docs/syntax.md#how-to-write-custom-syntax)
  - [Syntax](https://github.com/postcss/postcss/blob/main/docs/syntax.md#syntax)
  - [Parser](https://github.com/postcss/postcss/blob/main/docs/syntax.md#parser)
    - [Main Theory](https://github.com/postcss/postcss/blob/main/docs/syntax.md#main-theory)
    - [Performance](https://github.com/postcss/postcss/blob/main/docs/syntax.md#performance)
    - [Node Source](https://github.com/postcss/postcss/blob/main/docs/syntax.md#node-source)
    - [Raw Values](https://github.com/postcss/postcss/blob/main/docs/syntax.md#raw-values)
    - [Tests](https://github.com/postcss/postcss/blob/main/docs/syntax.md#tests)
  - [Stringifier](https://github.com/postcss/postcss/blob/main/docs/syntax.md#stringifier)
    - [Main Theory](https://github.com/postcss/postcss/blob/main/docs/syntax.md#main-theory-1)
    - [Builder Function](https://github.com/postcss/postcss/blob/main/docs/syntax.md#builder-function)
    - [Raw Values](https://github.com/postcss/postcss/blob/main/docs/syntax.md#raw-values-1)
    - [Tests](https://github.com/postcss/postcss/blob/main/docs/syntax.md#tests-1)
- [Writing a PostCSS Plugin](https://github.com/postcss/postcss/blob/main/docs/writing-a-plugin.md#writing-a-postcss-plugin)
  - [Links](https://github.com/postcss/postcss/blob/main/docs/writing-a-plugin.md#links)
  - [Step 1: Create an idea](https://github.com/postcss/postcss/blob/main/docs/writing-a-plugin.md#step-1-create-an-idea)
  - [Step 2: Create a project](https://github.com/postcss/postcss/blob/main/docs/writing-a-plugin.md#step-2-create-a-project)
  - [Step 3: Find nodes](https://github.com/postcss/postcss/blob/main/docs/writing-a-plugin.md#step-3-find-nodes)
  - [Step 4: Change nodes](https://github.com/postcss/postcss/blob/main/docs/writing-a-plugin.md#step-4-change-nodes)
  - [Step 5: Fight with frustration](https://github.com/postcss/postcss/blob/main/docs/writing-a-plugin.md#step-5-fight-with-frustration)
  - [Step 6: Make it public](https://github.com/postcss/postcss/blob/main/docs/writing-a-plugin.md#step-6-make-it-public)

**Guidlines**

- [PostCSS Plugin Guidelines](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#postcss-plugin-guidelines)
  - [API](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#1-api)
    - [1.1 Clear name with `postcss-` prefix](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#11-clear-name-with-postcss--prefix)
    - [1.2. Do one thing, and do it well](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#12-do-one-thing-and-do-it-well)
    - [1.3. Do not use mixins](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#13-do-not-use-mixins)
    - [1.4. Keep `postcss` to `peerDependencies`](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#14-keep-postcss-to-peerdependencies)
    - [1.5. Set `plugin.postcssPlugin` with plugin name](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#15-set-pluginpostcssplugin-with-plugin-name)
  - [Processing](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#2-processing)
    - [2.1. Plugin must be tested](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#21-plugin-must-be-tested)
    - [2.2. Use asynchronous methods whenever possible](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#22-use-asynchronous-methods-whenever-possible)
    - [2.3. Use fast node’s scanning](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#23-use-fast-nodes-scanning)
    - [2.4. Set `node.source` for new nodes](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#24-set-nodesource-for-new-nodes)
    - [2.5. Use only the public PostCSS API](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#25-use-only-the-public-postcss-api)
  - [Dependencies](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#3-dependencies)
    - [3.1. Use messages to specify dependencies](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#31-use-messages-to-specify-dependencies)
  - [Errors](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#4-errors)
    - [4.1. Use `node.error` on CSS relevant errors](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#41-use-nodeerror-on-css-relevant-errors)
    - [4.2. Use `result.warn` for warnings](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#42-use-resultwarn-for-warnings)
  - [Documentation](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#5-documentation)
    - [5.1. Document your plugin in English](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#51-document-your-plugin-in-english)
    - [5.2. Include input and output examples](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#52-include-input-and-output-examples)
    - [5.3. Maintain a changelog](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#53-maintain-a-changelog)
    - [5.4. Include `postcss-plugin` keyword in `package.json`](https://github.com/postcss/postcss/blob/main/docs/guidelines/plugin.md#54-include-postcss-plugin-keyword-in-packagejson)

- [PostCSS Runner Guidelines](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#postcss-runner-guidelines)
  - [API](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#1-api)
    - [1.1. Accept functions in plugin parameters](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#11-accept-functions-in-plugin-parameters)
  - [Processing](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#21-set-from-and-to-processing-options)
    - [2.1. Set `from` and `to` processing options](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#21-set-from-and-to-processing-options)
    - [2.2. Use only the asynchronous API](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#22-use-only-the-asynchronous-api)
    - [2.3. Use only the public PostCSS API](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#23-use-only-the-public-postcss-api)
    - [3.1. Rebuild when dependencies change](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#31-rebuild-when-dependencies-change)
  - [Output](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#4-output)
    - [4.1. Don’t show JS stack for `CssSyntaxError`](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#41-dont-show-js-stack-for-csssyntaxerror)
    - [4.2. Display `result.warnings()`](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#42-display-resultwarnings)
    - [4.3. Allow the user to write source maps to different files](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#43-allow-the-user-to-write-source-maps-to-different-files)
  - [Documentation](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#5-documentation)
    - [5.1. Document your runner in English](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#51-document-your-runner-in-english)
    - [5.2. Maintain a changelog](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#52-maintain-a-changelog)
    - [5.3. `postcss-runner` keyword in `package.json`](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#53-postcss-runner-keyword-in-packagejson)
    - [5.4. Keep postcss to peerDependencies](https://github.com/postcss/postcss/blob/main/docs/guidelines/runner.md#54-keep-postcss-to-peerdependencies)
