Skip to main content

Build & deploy

Two commands take a project from source to a live URL: owly build compiles your functions, and owly deploy ships them.

owly build

owly build

For each function in owly.yaml, this compiles your handler and writes the result under .owly/build/<name>/. TypeScript/JavaScript functions are type-checked and bundled (your npm dependencies are included); Go functions are compiled with TinyGo. You don't pass any flags — the language and entrypoint come from owly.yaml.

If your project sets publicBuild, that command runs too (e.g. a static-site generator producing your publicDir).

.owly/build/ is regenerated every build — keep it gitignored.

owly deploy

owly deploy

Deploy builds the project, then uploads:

  1. Each function, compiled and ready to serve.
  2. Static files from publicDir, if set — packed and uploaded as-is.

Choosing the server

Deploy targets an Owly server. Set it with --server or the OWLY_SERVER environment variable (default http://localhost:8080):

owly deploy --server https://my-owly-host.example.com
# or
OWLY_SERVER=https://my-owly-host.example.com owly deploy

Project name → URL

Your project is served at a subdomain derived from name in owly.yaml. A project named docs is reachable at docs.<host>; rename the project to change the subdomain. (If you request a subdomain for a project that hasn't been deployed, the server reports it as unknown.)

The first request: cold start

The first request to a freshly deployed function is a cold start — Owly restores a snapshot of your function rather than starting it from scratch. You don't need to do anything to benefit. See Cold starts.

Static-only projects

A project with functions: [] has nothing to compile — owly build just runs publicBuild, and owly deploy uploads publicDir. Scaffold one with owly init --static. See the owly.yaml reference for the static-site shape.