## What's `felt`? `felt` stands for "Flutter Engine Local Tester". It's a cli tool that aims to make development in the Flutter web engine more productive and pleasant. ## What can `felt` do? `felt` supports multiple commands as follows: 1. **`felt check-licenses`**: Checks that all Dart and JS source code files contain the correct license headers. 2. **`felt test`**: Runs all or some tests depending on the passed arguments. 3. **`felt build`**: Builds the engine locally so it can be used by Flutter apps. It also supports a watch mode for more convenience. You could also run `felt help` or `felt help ` to get more information about the available commands and arguments. ## How can I use `felt`? Once you have your local copy of the engine [setup](https://github.com/flutter/flutter/wiki/Setting-up-the-Engine-development-environment), it's recommended that you add `/path/to/engine/src/flutter/lib/web_ui/dev` to your `PATH`. Then you would be able to use the `felt` tool from anywhere: ``` felt check-licenses ``` or: ``` felt build --watch ``` If you don't want to add `felt` to your path, you can still invoke it using a relative path like `./web_ui/dev/felt ` ## Speeding up your builds You can speed up your builds by using more CPU cores. Pass `-j` to specify the desired level of parallelism, like so: ``` felt build [-w] -j 100 ``` If you are a Google employee, you can use an internal instance of Goma to parallelize your builds. Because Goma compiles code on remote servers, this option is effective even on low-powered laptops. ## Running web engine tests To run all tests: ``` felt test ``` To run a single test: ``` felt test test/golden_tests/engine/canvas_golden_test.dart ``` To debug a test: ``` felt test --debug test/golden_tests/engine/canvas_golden_test.dart ``` ## Configuration files `browser_lock.yaml` contains the version of browsers we use to test Flutter for web. Versions are not automatically updated whenever a new release is available. Instead, we update this file manually once in a while. `goldens_lock.yaml` refers to a revision in the https://github.com/flutter/goldens repo. Screenshot tests are compared with the golden files at that revision. When making engine changes that affect screenshots, first submit a PR to flutter/goldens updating the screenshots. Then update this file pointing to the new revision. ## Developing the `felt` tool If you are making changes in the `felt` tool itself, you need to be aware of Dart snapshots. We create a Dart snapshot of the `felt` tool to make the startup faster. To make sure you are running the `felt` tool with your changes included, you would need to stop using the snapshot. This can be achived through the environment variable `FELT_USE_SNAPSHOT`: ``` FELT_USE_SNAPSHOT=false felt ``` or ``` FELT_USE_SNAPSHOT=0 felt ``` _**Note**: if `FELT_USE_SNAPSHOT` is omitted or has any value other than "false" or "0", the snapshot mode will be enabled._