diff --git a/website/docs/api/cli.md b/website/docs/api/cli.md
index 685f998ff..62e1b22e6 100644
--- a/website/docs/api/cli.md
+++ b/website/docs/api/cli.md
@@ -16,6 +16,7 @@ menu:
- ['package', 'package']
- ['project', 'project']
- ['ray', 'ray']
+ - ['huggingface-hub', 'huggingface-hub']
---
spaCy's CLI provides a range of helpful commands for downloading and training
@@ -1273,3 +1274,49 @@ $ python -m spacy ray train [config_path] [--code] [--output] [--n-workers] [--a
| `--verbose`, `-V` | Display more information for debugging purposes. ~~bool (flag)~~ |
| `--help`, `-h` | Show help message and available arguments. ~~bool (flag)~~ |
| overrides | Config parameters to override. Should be options starting with `--` that correspond to the config section and value to override, e.g. `--paths.train ./train.spacy`. ~~Any (option/flag)~~ |
+
+## huggingface-hub {#huggingface-hub new="3.1"}
+
+The `spacy huggingface-cli` CLI includes commands for uploading your trained
+spaCy pipelines to the [Hugging Face Hub](https://huggingface.co/).
+
+> #### Installation
+>
+> ```cli
+> $ pip install spacy-huggingface-hub
+> $ huggingface-cli login
+> ```
+
+
+
+To use this command, you need the
+[`spacy-huggingface-hub`](https://github.com/explosion/spacy-huggingface-hub)
+package installed. Installing the package will automatically add the
+`huggingface-hub` command to the spaCy CLI.
+
+
+
+### huggingface-hub push {#huggingface-hub-push tag="command"}
+
+Push a spaCy pipeline to the Hugging Face Hub. Expects a `.whl` file packaged
+with [`spacy package`](/api/cli#package) and `--build wheel`. For more details,
+see the spaCy project [integration](/usage/projects#huggingface_hub).
+
+```cli
+$ python -m spacy huggingface-hub push [whl_path] [--org] [--msg] [--local-repo] [--verbose]
+```
+
+> #### Example
+>
+> ```cli
+> $ python -m spacy huggingface-hub push en_ner_fashion-0.0.0-py3-none-any.whl
+> ```
+
+| Name | Description |
+| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
+| `whl_path` | The path to the `.whl` file packaged with [`spacy package`](https://spacy.io/api/cli#package). ~~Path(positional)~~ |
+| `--org`, `-o` | Optional name of organization to which the pipeline should be uploaded. ~~str (option)~~ |
+| `--msg`, `-m` | Commit message to use for update. Defaults to `"Update spaCy pipeline"`. ~~str (option)~~ |
+| `--local-repo`, `-l` | Local path to the model repository (will be created if it doesn't exist). Defaults to `hub` in the current working directory. ~~Path (option)~~ |
+| `--verbose`, `-V` | Output additional info for debugging, e.g. the full generated hub metadata. ~~bool (flag)~~ |
+| **UPLOADS** | The pipeline to the hub. |
diff --git a/website/docs/images/huggingface_hub.jpg b/website/docs/images/huggingface_hub.jpg
new file mode 100644
index 000000000..5618df020
Binary files /dev/null and b/website/docs/images/huggingface_hub.jpg differ
diff --git a/website/docs/usage/projects.md b/website/docs/usage/projects.md
index d30a50302..cb71f361b 100644
--- a/website/docs/usage/projects.md
+++ b/website/docs/usage/projects.md
@@ -49,6 +49,7 @@ production.
Serve your models and host APIsDistributed and parallel trainingTrack your experiments and results
+Upload your pipelines to the Hugging Face Hub
### 1. Clone a project template {#clone}
@@ -1013,3 +1014,68 @@ creating variants of the config for a simple hyperparameter grid search and
logging the results.
+
+---
+
+### Hugging Face Hub {#huggingface_hub}
+
+The [Hugging Face Hub](https://huggingface.co/) lets you upload models and share
+them with others. It hosts models as Git-based repositories which are storage
+spaces that can contain all your files. It support versioning, branches and
+custom metadata out-of-the-box, and provides browser-based visualizers for
+exploring your models interactively, as well as an API for production use. The
+[`spacy-huggingface-hub`](https://github.com/explosion/spacy-huggingface-hub)
+package automatically adds the `huggingface-hub` command to your `spacy` CLI if
+it's installed.
+
+> #### Installation
+>
+> ```cli
+> $ pip install spacy-huggingface-hub
+> # Check that the CLI is registered
+> $ python -m spacy huggingface-hub --help
+> ```
+
+You can then upload any pipeline packaged with
+[`spacy package`](/api/cli#package). Make sure to set `--build wheel` to output
+a binary `.whl` file. The uploader will read all metadata from the pipeline
+package, including the auto-generated pretty `README.md` and the model details
+available in the `meta.json`. For examples, check out the
+[spaCy pipelines](https://huggingface.co/spacy) we've uploaded.
+
+```cli
+$ huggingface-cli login
+$ python -m spacy package ./en_ner_fashion ./output --build wheel
+$ cd ./output/en_ner_fashion-0.0.0/dist
+$ python -m spacy huggingface-hub push en_ner_fashion-0.0.0-py3-none-any.whl
+```
+
+After uploading, you will see the live URL of your pipeline packages, as well as
+the direct URL to the model wheel you can install via `pip install`. You'll also
+be able to test your pipeline interactively from your browser:
+
+
+
+In your `project.yml`, you can add a command that uploads your trained and
+packaged pipeline to the hub. You can either run this as a manual step, or
+automatically as part of a workflow. Make sure to set `--build wheel` when
+running `spacy package` to build a wheel file for your pipeline package.
+
+
+```yaml
+### project.yml
+- name: "push_to_hub"
+ help: "Upload the trained model to the Hugging Face Hub"
+ script:
+ - "python -m spacy huggingface-hub push packages/en_${vars.name}-${vars.version}/dist/en_${vars.name}-${vars.version}-py3-none-any.whl"
+ deps:
+ - "packages/en_${vars.name}-${vars.version}/dist/en_${vars.name}-${vars.version}-py3-none-any.whl"
+```
+
+
+
+Get started with uploading your models to the Hugging Face hub using our project
+template. It trains a simple pipeline, packages it and uploads it if the
+packaged model has changed. This makes it easy to deploy your models end-to-end.
+
+
diff --git a/website/docs/usage/v3-1.md b/website/docs/usage/v3-1.md
index 5e3181b36..da6fa6070 100644
--- a/website/docs/usage/v3-1.md
+++ b/website/docs/usage/v3-1.md
@@ -199,6 +199,41 @@ sure you have the
[`spacy-lookups-data`](https://github.com/explosion/spacy-lookups-data) package
installed, which provides the relevant tables.
+### Upload your pipelines to the Hugging Face Hub {#huggingface-hub}
+
+The [Hugging Face Hub](https://huggingface.co/) lets you upload models and share
+them with others, and it now supports spaCy pipelines out-of-the-box. The new
+[`spacy-huggingface-hub`](https://github.com/explosion/spacy-huggingface-hub)
+package automatically adds the `huggingface-hub` command to your `spacy` CLI. It
+lets you upload any pipelines packaged with [`spacy package`](/api/cli#package)
+and `--build wheel` and takes care of auto-generating all required meta
+information.
+
+After uploading, you'll get a live URL for your model page that includes all
+details, files and interactive visualizers, as well as a direct URL to the wheel
+file that you can install via `pip install`. For examples, check out the
+[spaCy pipelines](https://huggingface.co/spacy) we've uploaded.
+
+```cli
+$ pip install spacy-huggingface-hub
+$ huggingface-cli login
+$ python -m spacy package ./en_ner_fashion ./output --build wheel
+$ cd ./output/en_ner_fashion-0.0.0/dist
+$ python -m spacy huggingface-hub push en_ner_fashion-0.0.0-py3-none-any.whl
+```
+
+You can also integrate the upload command into your
+[project template](/usage/projects#huggingface_hub) to automatically upload your
+packaged pipelines after training.
+
+
+
+Get started with uploading your models to the Hugging Face hub using our project
+template. It trains a simple pipeline, packages it and uploads it if the
+packaged model has changed. This makes it easy to deploy your models end-to-end.
+
+
+
## Notes about upgrading from v3.0 {#upgrading}
### Pipeline package version compatibility {#version-compat}
diff --git a/website/src/components/code.js b/website/src/components/code.js
index 4dd7a8eb8..6e9f0c22e 100644
--- a/website/src/components/code.js
+++ b/website/src/components/code.js
@@ -14,7 +14,7 @@ import GitHubCode from './github'
import classes from '../styles/code.module.sass'
const WRAP_THRESHOLD = 30
-const CLI_GROUPS = ['init', 'debug', 'project', 'ray']
+const CLI_GROUPS = ['init', 'debug', 'project', 'ray', 'huggingface-hub']
export default props => (