Skip to main content
Version: v3

Integrated Dev Server

Stencil comes with an integrated dev server in order to simplify development. By integrating the build process and the dev server, Stencil is able to drastically improve the development experience without requiring complicated build scripts and configuration. As app builds and re-builds take place, the compiler is able to communicate with the dev server, and vice versa.

Hot Module Replacement

The compiler already provides a watch mode, but coupled with the dev server it's able to go one step farther by reloading only what has changed within the browser. Hot Module Replacement allows the app to keep its state within the browser, while switching out individual components with their updated logic after file saves.

Style Replacement

Web components can come with their own css, can use shadow dom, and can have individual style tags. Traditionally, live-reload external css links usually does the trick, however, updating components with inline styles within shadow roots has been a challenge. With the integrated dev server, Stencil is able to dynamically update styles for all components, whether they're using shadow dom or not, without requiring a page refresh.

Development Errors

When errors happen during development, such as printing an error for invalid syntax, Stencil will not only log the error and the source of the error in the console, but also overlay the app with the error so it's easier to read.

Open In Editor

When a development error is shown and overlays the project within the browser, line numbers pointing to the source text are clickable, which will open the source file directly in your IDE.

Dev Server Config

PropertyDescriptionDefault
addressIP address used by the dev server. The default is 0.0.0.0, which points to all IPv4 addresses on the local machine, such as localhost.0.0.0.0
basePathBase path to be used by the server. Defaults to the root pathname./
httpsBy default the dev server runs over the http protocol. Instead you can run it over https by providing your own SSL certificate and key (see example below).false
initialLoadUrlThe URL the dev server should first open to./
logRequestsEvery request to the server will be logged within the terminal.false
openBrowserBy default, when dev server is started the local dev URL is opened in your default browser. However, to prevent this URL to be opened change this value to false.true
reloadStrategyWhen files are watched and updated, by default the dev server will use hmr (Hot Module Replacement) to update the page without a full page refresh. To have the page do a full refresh use pageReload. To disable any reloading, use null.hmr
portSets the server's port.3333

Example

import { readFileSync } from 'fs';
import { Config } from '@stencil/core';

export const config: Config = {
devServer: {
reloadStrategy: 'pageReload',
port: 4444,
https: {
cert: readFileSync('cert.pem', 'utf8'),
key: readFileSync('key.pem', 'utf8')
}
}
};