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:
- Each function, compiled and ready to serve.
- 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.