| # Chrome DevTools frontend |
| |
| <!-- [START badges] --> |
| [![NPM package](https://img.shields.io/npm/v/chrome-devtools-frontend.svg)](https://npmjs.org/package/chrome-devtools-frontend) |
| <!-- [END badges] --> |
| |
| The client-side of the Chrome DevTools, including all JS & CSS to run the DevTools webapp. |
| |
| ### Source code |
| The frontend is available on [chromium.googlesource.com](https://chromium.googlesource.com/devtools/devtools-frontend). |
| |
| ### Design Guidelines |
| Please be aware that DevTools follows additional [development guidelines](DESIGN_GUIDELINES.md). |
| |
| ### Workflows |
| |
| In order to make changes to DevTools frontend, build, run, test, and submit changes, several workflows exist. Having [depot_tools](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up) set up is a common prerequisite. |
| |
| #### Standalone workflow |
| As a standalone project, Chrome DevTools frontend can be checked out and built independently from Chromium. The main advantage is not having to check out and build Chromium. However, there is also no way to run layout tests in this workflow. |
| <details> |
| |
| ##### Checking out source |
| |
| To check out the source for DevTools frontend only, follow these steps: |
| |
| ```bash |
| mkdir devtools |
| cd devtools |
| fetch devtools-frontend |
| ``` |
| |
| ##### Build |
| |
| To build, follow these steps: |
| ```bash |
| cd devtools-frontend |
| gn gen out/Default |
| autoninja -C out/Default |
| ``` |
| The resulting build artifacts can be found in `out/Default/resources/inspector`. |
| |
| ##### Update to latest |
| |
| To update to latest tip of tree version: |
| ```bash |
| git fetch origin |
| git checkout origin/master |
| gclient sync |
| ``` |
| |
| ##### Run in Chromium |
| |
| These steps work with Chromium 79 or later. |
| To run the production build, use |
| |
| **(Requires `brew install coreutils` on Mac.)** |
| |
| ```bash |
| <path-to-chrome>/chrome --custom-devtools-frontend=file://$(realpath out/Default/resources/inspector) |
| ``` |
| |
| To run the debug build (directly symlinked to the original unminified source files), |
| build both Chromium and DevTools frontend with the [GN flag](https://www.chromium.org/developers/gn-build-configuration) `debug_devtools=true`, and use |
| |
| ```bash |
| <path-to-chrome>/chrome --custom-devtools-frontend=file://$(realpath out/Default/resources/inspector/debug) |
| ``` |
| |
| You can inspect DevTools with DevTools by undocking DevTools and then open the developers tools (F12 on Windows/Linux, Cmd+Option+I on Mac). |
| |
| ##### Test |
| Test are available by running scripts in `scripts/test/`. |
| |
| ##### Create a change |
| Usual [steps](https://chromium.googlesource.com/chromium/src/+/master/docs/contributing.md#creating-a-change) for creating a change work out of the box. |
| |
| ##### Managing dependencies |
| - To sync dependencies from Chromium to DevTools frontend, use `scripts/deps/roll_deps.py`. |
| - To roll the HEAD commit of DevTools frontend into Chromium, use `scripts/deps/roll_to_chromium.py`. |
| - To update DevTools frontend's DEPS, use `roll-dep`. |
| </details> |
| |
| #### Chromium workflow |
| DevTools frontend can also be developed as part of the full Chromium checkout. |
| <details> |
| |
| ##### Checking out source |
| Follow [instructions](https://www.chromium.org/developers/how-tos/get-the-code) to check out Chromium. DevTools frontend can be found under `third_party/devtools-frontend/src/`. |
| |
| ##### Build |
| Refer to [instructions](https://www.chromium.org/developers/how-tos/get-the-code) to build Chromium. To only build DevTools frontend, use `devtools_frontend_resources` as build target. The resulting build artifacts for DevTools frontend can be found in `out/Default/resources/inspector`. |
| |
| Consider building with the [GN flag](https://www.chromium.org/developers/gn-build-configuration) `debug_devtools=true` to symlink to the original unminified source. |
| |
| ##### Run |
| Run Chrome with DevTools frontend bundled: |
| ```bash |
| out/Default/chrome |
| ``` |
| |
| ##### Test |
| Test are available by running scripts in `third_party/devtools-frontend/src/scripts/test/`. |
| After building content shell, we can also run layout tests that are relevant for DevTools frontend: |
| ```bash |
| autoninja -C out/Default content_shell |
| third_party/blink/tools/run_web_tests.py http/tests/devtools |
| ``` |
| |
| ##### Create a change |
| Usual [steps](https://chromium.googlesource.com/chromium/src/+/master/docs/contributing.md#creating-a-change) for creating a change work out of the box, when executed in `third_party/devtools-frontend/src/`. |
| </details> |
| |
| #### Integrate standalone checkout into Chromium |
| If you prefer working on a standalone checkout of DevTools frontend, but want to build, test, and run inside the full Chromium checkout. This way, you combine the best of both worlds. |
| <details> |
| |
| Disable `gclient sync` for DevTools frontend inside of Chromium by editing `.gclient` config. From `chromium/src/`, simply run |
| ```bash |
| vim $(gclient root)/.gclient |
| ``` |
| |
| In the `custom_deps` section, insert this line: |
| ```python |
| "src/third_party/devtools-frontend/src": None, |
| ``` |
| |
| Then run |
| ```bash |
| gclient sync -D |
| ``` |
| This removes the DevTools frontend dependency. We now create a symlink to refer to the standalone checkout: |
| |
| **(Note that the folder names do NOT include the trailing slash)** |
| |
| ```bash |
| ln -s path/to/standalone/devtools-frontend third_party/devtools-frontend/src |
| ``` |
| |
| </details> |
| |
| Running `gclient sync` in `chromium/src/` will update dependencies for the Chromium checkout. Running `gclient sync` in `chromium/src/third_party/devtools-frontend/src` will update dependencies for the standalone checkout. |
| |
| ### Testing |
| Please refer to the [overview document](https://docs.google.com/document/d/1c2KLKoFMqLB2A9sNAHIhYb70XFyfBUBs5BZSYfQAT-Y/edit). The current test status can be seen at the [test waterfall]. |
| |
| ### Additional references |
| * DevTools documentation: [devtools.chrome.com](https://devtools.chrome.com) |
| * [Debugging protocol docs](https://developer.chrome.com/devtools/docs/debugger-protocol) and [Chrome Debugging Protocol Viewer](http://chromedevtools.github.io/debugger-protocol-viewer/) |
| * [awesome-chrome-devtools](https://github.com/paulirish/awesome-chrome-devtools): recommended tools and resources |
| * Contributing to DevTools: [bit.ly/devtools-contribution-guide](http://bit.ly/devtools-contribution-guide) |
| * Contributing To Chrome DevTools Protocol: [docs.google.com](https://docs.google.com/document/d/1c-COD2kaK__5iMM5SEx-PzNA7HFmgttcYfOHHX0HaOM/edit?usp=sharing) |
| * DevTools Design Review Guidelines: |
| [DESGN_GUIDELINES.MD](DESIGN_GUIDELINES.MD) |
| |
| ### Merges and Cherry-Picks |
| |
| *Merge request/approval is handled by Chromium Release Managers. DevTools follows [The |
| Zen of Merge |
| Requests](https://www.chromium.org/developers/the-zen-of-merge-requests). In exceptional |
| cases please get in touch with hablich@chromium.org.* |
| |
| Step-by-step guide on how to merge: |
| 1. Request and receive approval to merge |
| 1. Backmerges are done to the chromium/xxxx (e.g. chromium/3979) branch respectively on the DevTools frontend repo |
| 1. Use [Omahaproxy](https://omahaproxy.appspot.com/) to find out what |
| branch a major Chromium version has (column true_branch). |
| Open the to-be-merged commit in Gerrit e.g. |
| [Example](https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/1928912) |
| 1. Click hamburger menu on the top right and select Cherry Pick |
| 1. Select branch to merge to e.g. chromium/3968 |
| 1. Cherry Pick CL is created e.g. |
| [Example](https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/1928913) |
| 1. Get it reviewed if necessary |
| 1. Click hamburger menu on the cherry pick CL and select Submit |
| 1. Done |
| |
| ### Useful Commands |
| |
| #### `npm run format-py` |
| Formats your Python code using [yapf](https://github.com/google/yapf) |
| |
| > Note: Yapf is a command line tool. You will have to install this manually, either from PyPi through `pip install yapf` or if you want to enable multiprocessing in Python 2.7, `pip install futures` |
| |
| ### Source mirrors |
| DevTools frontend repository is mirrored on [GitHub](https://github.com/ChromeDevTools/devtools-frontend). |
| |
| DevTools frontend is also available on NPM as the [chrome-devtools-frontend](https://www.npmjs.com/package/chrome-devtools-frontend) package. It's not currently available via CJS or ES2015 modules, so consuming this package in other tools may require [some effort](https://github.com/paulirish/devtools-timeline-model/blob/master/index.js). |
| |
| The version number of the npm package (e.g. `1.0.373466`) refers to the Chromium commit position of latest frontend git commit. It's incremented with every Chromium commit, however the package is updated roughly daily. |
| |
| ### Getting in touch |
| * All devtools commits: [View the log] or follow [@DevToolsCommits] on Twitter |
| * [All open DevTools tickets] on crbug.com |
| * File a new DevTools ticket: [new.crbug.com](https://bugs.chromium.org/p/chromium/issues/entry?labels=OS-All,Type-Bug,Pri-2&components=Platform%3EDevTools) |
| * Code reviews mailing list: [devtools-reviews@chromium.org] |
| * [@ChromeDevTools] on Twitter |
| * Chrome DevTools mailing list: [groups.google.com/forum/google-chrome-developer-tools](https://groups.google.com/forum/#!forum/google-chrome-developer-tools) |
| |
| [devtools-reviews@chromium.org]: https://groups.google.com/a/chromium.org/forum/#!forum/devtools-reviews |
| [View the log]: https://chromium.googlesource.com/devtools/devtools-frontend/+log/master |
| [@ChromeDevTools]: http://twitter.com/ChromeDevTools |
| [@DevToolsCommits]: http://twitter.com/DevToolsCommits |
| [all open DevTools tickets]: https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3APlatform%3EDevTools&sort=&groupby=&colspec=ID+Stars+Owner+Summary+Modified+Opened |
| [test waterfall]: https://ci.chromium.org/p/devtools-frontend/g/main/console |