Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions src/content/platform-integration/web/web-dev-config-file.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
---
title: Set up a web development configuration file
description: Centralize web development settings including a development proxy
short-title: Web development configuration
---

# Set up a web development configuration file
**By Sydney Bao**

Flutter web includes a development server that defaults to serving your application in the `localhost` domain via HTTP on a randomly assigned port. While command-line arguments offer a quick way to modify the server’s behavior, this document focuses on a more structured approach: defining your server's behavior through a centralized `web_dev_config.yaml` file. This configuration file allows you to customize server settings---host, port, HTTPS settings, and proxy rules---ensuring a consistent development environment.

## Create a configuration file

Add a `web_dev_config.yaml` file in the root directory of your Flutter project. If you haven’t set up a Flutter project, visit [Building a web application with Flutter](https://docs.flutter.dev/platform-integration/web/building) to get started.

## Add configuration settings

### Basic server configuration

You can define the host, port, and HTTPS settings for your development server!

```yaml
#web_dev_config.yaml
server:
host: "0.0.0.0" # Defines the binding address <string>
port: 8080 # Specifies the port <int> for the development server
https:
cert-path: "/path/to/cert.pem" # Path <string> to your TLS certificate
cert-key-path: "/path/to/key.pem" # Path <string> to TLS certificate key
```

### Custom headers

You can also inject custom HTTP headers into the development server’s responses!

```yaml
#web_dev_config.yaml
server:
headers:
- name: "X-Custom-Header" # Name <string> of the HTTP header
value: "MyValue" # Value <string> of the HTTP header
- name: "Cache-Control"
value: "no-cache, no-store, must-revalidate"
```

### Proxy configuration

Requests are matched in order from the `web_dev_config.yaml` file.

#### Basic string proxy

Use the `prefix` field for simple path prefix matching!

```yaml
#web_dev_config.yaml
server:
proxy:
- target: "http://localhost:5000/" # Base URL <string> of your backend
prefix: "/users/" # Path <string>
- target: "http://localhost:3000/"
prefix: "/data/"
replace: "/report/" # Replacement <string> of path in redirected URL (optional)
- target: "http://localhost:4000/"
prefix: "/products/"
replace: ""
```

**Explanation:**

* A request to `/users/names` will be forwarded to `http://localhost:5000/users/names`.
* A request to `/data/2023/` will be forwarded to `http://localhost:4000/report/2023` because `replace: “/report/”` replaces the `/data/` prefix
* A request to `/products/item/123` will be forwarded to `http://localhost:4000/item/123`. `replace: ""` removes the `/products/` prefix by replacing it with an empty string

#### Advanced regex proxy

You can also use the `regex` field for more flexible and complex matching!

```yaml
#web_dev_config.yaml
server:
proxy:
- target: "http://localhost:5000/"
regex: "/users/(\d+)/$" # Path <string> matches requests like /users/123/
- target: "http://localhost:4000/"
regex: "^/api/(v\d+)/(.*)" # Matches requests like /api/v1/users
replace: "/$2?apiVersion=$1" # Allows capture groups (optional)
```

**Explanation:**

* A request to `/users/123/` matches the first rule exactly, so it will be forwarded to `http://localhost:5000/users/123/`
* A request to `/api/v1/users/profile/` starts with the second rule path, so it will be forwarded to `http://localhost:4000/users/profile/?apiVersion=v1`

## Configuration precedence

Remember the order of precedence for settings:

1. **Command-line arguments** (such as `--web-hostname`, `--web-port`)
2. **`web_dev_config.yaml` settings**
3. **Built-in default values**