Set up a web development configuration file
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 using 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&emdash;host, port, HTTPS settings, and proxy rules&emdash;ensuring a consistent development environment.
Create a configuration file
#Add a web_dev_config.yaml
file to the root directory of your Flutter project. If you haven't set up a Flutter project, visit Building a web application with Flutter to get started.
Add configuration settings
#Basic server configuration
#You can define the host, port, and HTTPS settings for your development server.
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.
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.
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
is forwarded tohttp://localhost:5000/users/names
. - A request to
/data/2023/
is forwarded tohttp://localhost:4000/report/2023
becausereplace: “/report/”
replaces the/data/
prefix. - A request to
/products/item/123
is forwarded tohttp://localhost:4000/item/123
becausereplace: ""
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.
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 is forwarded tohttp://localhost:5000/users/123/
. - A request to
/api/v1/users/profile/
starts with the second rule path so it is forwarded tohttp://localhost:4000/users/profile/?apiVersion=v1
.
Configuration precedence
#Remember the order of precedence for settings:
- Command-line arguments (such as
--web-hostname
,--web-port
) web_dev_config.yaml
settings- Built-in default values
Unless stated otherwise, the documentation on this site reflects the latest stable version of Flutter. Page last updated on 2025-09-25. View source or report an issue.