Guides

Deploy a local folder

Put an app online straight from a folder on your computer — no GitHub required. The desktop picker, the browser upload, and the one-command CLI way.

Not everything lives on GitHub. Sometimes the code is just a folder on your laptop — one you cloned ages ago, downloaded, or started from scratch. Alaf Server can take that folder and put it online, no git remote needed. Think of it like mailing a parcel instead of a letter: you hand over the whole box of files, and Alaf Server unpacks it, figures out what's inside, builds it, and gives you back a real web address.

What you need first

  • Alaf Server up and running (you can see the dashboard). If not, start with Installation.
  • A folder on disk with your app in it — a website, an API, anything.
  • You do not need Docker, a server config, or any special files. Alaf Server reads your folder and works out the rest.

What actually gets uploaded

Alaf Server sends your source files — the code you wrote — and nothing else. The heavy, rebuildable stuff is skipped: node_modules, .git, and build output like dist and .next never go over the wire. Your dependencies get reinstalled fresh during the build, so leaving them behind is exactly what you want. It keeps the upload small and your build clean.

The desktop app is the exception: it reads your folder straight from disk and uploads nothing at all.

In the dashboard

Open the Library page (the New project button lands you here too) and choose the Folder tab.

What you see next depends on how you're using Alaf Server. The desktop app can read a folder directly off your computer. A web browser (talking to a self-hosted or cloud instance) can't peek at your filesystem, so it uploads a copy of the folder instead. Pick the tab that matches you.

The desktop app runs on the same machine as your files, so it opens them straight from disk — nothing is uploaded.

Open the Folder tab and press Import

The Folder tab shows your Local Projects. The very first time it's empty — you'll see "No local projects yet" and an Import Project button. Once you've added some, the panel lists them with an Import button at the top for adding more.

Screenshot

Library page, Folder tab on the desktop app — the "Local Projects" panel (or the empty "No local projects yet" state) with the Import button. (screenshot pending)

Pick your folder

A folder picker opens. Browse to your project folder and select it — that's all Alaf Server needs.

No folder picker?

On some setups the native picker isn't available. Instead you'll see an Import from folder form: type the folder's full absolute path (like /Users/you/projects/my-app), or press Browse, then press Scan. Alaf Server shows the Detected stack and an editable Project name — press Import Project to add it to your Local Projects list, then deploy it from there.

Press Deploy and watch it go live

Alaf Server takes you to the deploy screen with the detected stack already filled in — the framework, the package manager, and the build and start commands. For most apps there's nothing to change. Press Deploy and the build screen streams the logs live. When it finishes, you get a link — click it and your app is online. 🎉

Screenshot

The deploy screen for a local folder — the detected stack on the left and the summary panel with the Deploy button on the right. (screenshot pending)

In a browser, Alaf Server can't see your disk — so you tell it what you're deploying, then hand it the folder and it packs and uploads a copy.

Pick your stack

The Folder tab asks "What are you deploying?" Choose the tile that matches your app (for example Next.js, Vite, or Express). This tells Alaf Server which build environment to prepare.

Screenshot

Library page, Folder tab in a browser — the "What are you deploying?" stack grid. (screenshot pending)

Drop in your folder

Drag your project folder onto the drop zone, or click to browse for it. The panel notes what gets left out — node_modules, .git, and build output are skipped. Once it's picked, you'll see a summary line with the folder name and how many files it contains.

Screenshot

The folder drop zone showing "Drop your project folder or click to browse". (screenshot pending)

Press Continue

Alaf Server packs the folder in your browser and uploads it, then takes you to the deploy screen. The button shows a short Packing folder… then Uploading… while it works — bigger folders take a little longer.

Press Deploy and watch it go live

On the deploy screen, press Deploy. The build screen streams the logs as it goes, and when it's done you get a live link. 🎉

Prefer the terminal?

The CLI does the whole thing in one command. When you run alaf server deploy in a folder that isn't a git repository, it automatically packages that folder, uploads it, auto-detects the stack, creates the project (or reuses one that already has the same name), and deploys it — the same pipeline as the browser upload above.

# From inside your project folder:
alaf server deploy --name my-app --watch
  • --name sets the project's name (without it, the folder's name is used).
  • --watch follows the build logs in your terminal until it finishes. Leave it off and Alaf Server prints a command to follow the logs later.

Deploying inside a git repo?

If the folder is a git repository, alaf server deploy deploys from git instead of uploading the folder. To upload the files directly, run it from a folder without a .git — or use Deploy from GitHub for the git flow.

Deploy to the same project again

Alaf Server matches your folder to a project by name. Run alaf server deploy --name my-app a second time from the same folder and it updates that project instead of making a new one — so repeat deploys just ship new versions.

To pin the folder to one exact project — even if you rename it or forget the --name flag — link it once with alaf server init:

alaf server init          # pick a project to link this folder to
alaf server deploy        # from now on, deploys to the linked project

alaf server init writes a small .alaf server/project.json file so later commands know which project this folder belongs to. It links to a project that already exists, so create one first — with a folder deploy, or in the dashboard — then run alaf server init to pin future deploys to it.

If something goes wrong

“That folder looks empty” when you pick it

Everything in the folder was on the skip list (like node_modules and .git), or you picked a folder with no source in it. Choose the folder that actually contains your app's code — the one with your package.json (or go.mod, Cargo.toml, and so on).

The browser upload can't find your folder's path

A web browser only gives Alaf Server the folder's name, not its full location on disk. When the form asks for a path, type the full absolute path (like /Users/you/projects/my-app) and press Scan. Or use the desktop app, which can open the folder directly.

The build failed

Open the build screen and read the last few red lines — that's the real reason. First-time failures are almost always one of three things: a missing build command, a missing environment variable, or the app listening on the wrong port. See Troubleshooting → Deployments for fixes.

What next?

On this page