Serving static assets
This page provides a walkthrough on serving static assets (HTML, CSS, JavaScript, images, and others) from a PartyKit project.
Serving static assets
You can pass a static assets path via CLI: --serve path/to/assets or add it to your partykit.json:
{  //...  "serve": "path/to/assets"}While PartyKit defaults should satisfy most needs, you can override some optional configs:
{  //...  "serve": {    "path": "path/to/assets",    // cache in the browser    browserTTL: 1000 * 60 * 60 * 24 * 365, // any number of seconds    // cache on the edge    edgeTTL: 1000 * 60 * 60 * 24 * 365, // any number of seconds
    // serve in "single page app" mode    singlePageApp: true    // COMING SOON: exclude files from being served    exclude: ["**/*.map"] // PartyKit already excludes dotfiles and node_modules    // COMING SOON: include files to be served    include: ["**/*.map"]  }}Passing build field
Modern apps usually need a compiler of some kind, for example, for TypeScript, JSX, bundle splitting, and so on. PartyKit addresses this need. Pass a build field:
{  // ...  "serve": {    "path": "path/to/assets",    // ...    "build": "path/to/entry.ts"  }}You can further customize the build command by passing additional configuration arguments:
{  // ...  "serve": {    "path": "path/to/assets",    // ...    "build": {      "entry": "path/to/entry.ts", // can also be an array of paths      "bundle": true, // bundle all dependencies, defaults to true      "splitting": true, // split bundles, defaults to true      "outdir": "path/to/outdir", // defaults to serve.path + "dist"      "minify": true, // minify bundles, defaults to false in dev and to true in deploy      "format": "esm", // "esm" | "cjs" | "iife", default "esm"      "sourcemap": true, // generate sourcemaps, defaults to true      "define": {        // define global constants, defaults to {}        "process.env.xyz": "123"        // you can pass values via the CLI with --define key=value      },      "external": ["react", "react-dom"], // externalize modules, defaults to []      "loader": {        // configure loaders, defaults to {}        ".png": "file" // see https://esbuild.github.io/content-types/ for more info      }    }  }}Please give us feedback on Discord or Twitter if you use this feature - your insights will make PartyKit better 🥳