LILYLILYDOCS
Docs/Getting Started

Getting Started

Five minutes from zero to a live URL on the LILY fleet.

LILY is one CLI, one binary, one verb at a time. You install lly, sign in through the browser, compile a Next.js project into a brick, and deploy it to the fleet. The four steps below take a few minutes end to end. Nothing else gets installed, no Docker daemon, no language runtime, no SDK.

The journey

Each step has its own page with the full detail. Read them in order the first time. After that, the four-line happy path at the bottom of this page is all you ever need.

The happy path

Here is the entire flow from a clean shell to a live URL. Assume you already have a Next.js App Router project in the current directory. If you do not, the hello world page walks you through scaffolding one.

zero-to-deploy
$ curl -sSL rc.lilylabs.io/install.sh | bash → fetching lly v0.9.4 (x86_64-linux, 18 MB) ✓ installed /usr/local/bin/lly run lly doctor to verify your environment $ lly login → opening browser: https://auth.lilylabs.io/cli?code=K3F-9PQ ✓ signed in as leon@lilylabs.io token cached in ~/.lly/credentials (expires in 24h) $ lly nextjs void → nextjs v0.7.1 · App Router · 12 routes · 4 server actions → bundling client islands (esbuild, 1 chunk, 38 KB) → linking WASM modules (single-brick, wasi-preview1) ✓ wrote void.brick (4.2 MB · sha256:8f2c…a13e · 6.8s) $ lly void deploy ./void.brick → uploading 4.2 MB to platform.lilylabs.io → raptor placed on cap-eu-west-2 (slug: lazy-fox) ✓ live at https://lazy-fox.app.lilylabs.io tail logs with lly void logs lazy-fox

What just happened

The install script downloaded a single statically linked binary. lly login spoke WebSocket to auth.lilylabs.io, the browser confirmed your identity, and the CLI cached a short-lived token. lly nextjs void ran the Next.js plugin, which is a util-binary in ~/.lly/plugins/nextjs/. It read your App Router tree, compiled every route to WASM, bundled the client islands with esbuild, and packed everything into one content-addressed brick.

lly void deploy uploaded the brick to the platform, which recorded ownership and called Raptor. Raptor picked a CAP with free capacity in the closest region, pushed the brick over to it, allocated a slug, and returned the URL. The CAP runtime instantiated the brick in Wasmtime and started answering HTTPS within a few hundred milliseconds.

What to read next

If you want the conceptual model first, jump to concepts. If you want to keep building, the CLI reference documents every subcommand and the nextjs plugin guide covers App Router specifics including Server Actions, ISR, parallel routes, and the void target. To check fleet health at any time, see status.lilylabs.io.