Need help with
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

461 Stars 651 Forks Other 10.2K Commits 180 Opened issues


The AMP Project Website.

Services available


Need anything else?

Contributors list

Staging Production

The official homepage of the AMP Project.


We welcome contributions to

  • Bug reports and feature requests: something missing or not working on Please file an issue here.
  • Documentation & Guides: see this guide for more information on how to contribute documentation to
  • Code samples & demos: see this guide for more information on how to contribute sample code to

Note: fixing spelling mistakes and other small changes are often easiest by directly editing the file on Github.

Inline editing on Github



Note: For those intending to conduct development on this repository beyond fixing typos, Linux and macOS are the only currently supported operating systems. Windows is not supported at this time.

  1. Install the LTS version of Node.js. An easy way to do so is by using nvm.
   $ nvm install --lts
  1. If it has not already been done, install Python 3 and ensure pip is properly set up by adding the pip user base binary directory to


  1. Install Homebrew.
  2. Run the following command to ensure everything is up to date. Xcode version 10.3 or the most recent stable version is required.
      $ brew doctor
  3. Run the following command to install Python. Version 3.7 is required at latest.
      $ brew install python
  4. Run the following command to add the pip user base binary directory to
      $ echo "export PATH=\"$(python -m site --user-base)/bin\":\$PATH" >> ~/.bash_profile
  5. Run the following command for the changes to take effect.
      $ source ~/.bash_profile

Linux (Debian-based)

Note: If using Linux, refer to the section of pip's official documentation titled Ensure you can run pip from the command line for pip installation troubleshooting.

  1. Run the following command to add the pip user base binary directory to
      $ echo "export PATH=\"$(python -m site --user-base)/bin\":\$PATH" >> ~/.bashrc
  2. Run the following command for the changes to take effect.
      $ source ~/.bashrc
  3. Run the following command to use a faster YAML parser.

      $ sudo apt install -y python-yaml
    1. Install Grow, the static site generator used to build Do so by using
      instead of its installer. Using
      will enable importing from the
      package in Python later on.

Note: Be sure to use the

command associated with Python 3 as Grow 1 depends on Python 3.
   $ pip3 install --user grow

Fork & clone the repository

To get started with contributing to, you first need to fork the repository. Once you've done that you can clone the repository:

$ git clone

... and then install the dependencies via NPM:

$ cd
$ npm install


If it's your first time working on, it is recommended to bootstrap your local environment. To do so, make sure you have set up a valid GitHub access token in an environment variable named

like so:
$ export AMP_DOC_TOKEN="c59f6..."

This command enables the import from GitHub to run flawlessly. The actual import occurs by running the following command, which will also build the Playground and Boilerplate Generator once.

$ npm run bootstrap

Tip: Due to bad network conditions or GitHub's API rate-limiting there might be errors during import. Try running the above command with the

-- --queue-imports
flag to prevent them.

You can then start developing in your local environment with the command below. The task will take care of building and copying all files, watching them for changes, and rebuilding them when needed. Beware that changes to the Express backend require the Gulp task to be restarted.

$ npm run develop

This command prints a lot to the shell and will most likely end on

Server ready. Press ctrl-c to quit.
. Seeing this line means everything went fine so far unless otherwise stated in the logs; the site should be available at http://localhost:8080/. The service running on port
is only Grow rendering the pages.

You can contribute your changes back to the main repository by creating a pull request.



Made changes to a lot of Grow documents at once and not quite sure if all references are still valid? You can run

npm run lint:grow
to pick up broken ones.

Run a test build

To run a local test build that does all the minifying and vends the static pages instead of proxying them through to Grow you can run:

$ npm run build:local
$ npm run start:local

Tip: For more rapid local testing, it may be preferable to only build a subset of specified locales. Run the following command with

being a comma seperated list of locale abbreviations you want to build, e.g.
or even just
npm run build:local -- --locales 


Caution: starting a build will automatically clean all locations of possible remainings from previous builds. Make sure you don't have anything there that you want to keep - additionally check your working copy for eventual unintended local changes.

npm run build:local -- --locales 

To perform a build run the following command with

being one of the following valid environments:
$ npx gulp build --env 

This command builds all parts of the project and might take a while. Usually, all builds on and are built using Travis CI. In case you want to reproduce one of those remote builds in your local environment, you can fetch the build artifacts by running:

$ npx gulp fetchArtifacts --travis-build 

Copyright 2019 The AMP HTML Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.