---
title: Web hosting and custom domains
nav: Hosting and domains
group: Build your app
updated: 2026-11-14
description: Host a website and your own routes next to your SashiDo app, and serve the app's API, files and email links from your own domain with a free SSL certificate.
keywords: parse server custom domain, sashido custom domain, parse server web hosting, parse server static files, lets encrypt parse server, parse server express routes
---

Your app's server also serves a website: static files from your repository, and your own Express routes. With a custom domain, the website, the API and the links in your emails all use your domain.

## Static files

Files in the `public/` folder of your app's [repository](/en/docs/developers/cloud-code#the-repository) are served as they are at your app's public URL, `https://pg-app-<id>.scalabl.cloud/`:

```text
public/index.html      →  https://pg-app-<id>.scalabl.cloud/
public/css/main.css    →  https://pg-app-<id>.scalabl.cloud/css/main.css
```

Push to deploy, like cloud code. A built single-page app (React, Vue) works too: commit its build output to `public/`.

## Your own routes

`cloud/app.js` exports an Express app mounted at the same root: landing pages, OAuth callbacks, webhooks from Stripe or GitHub. See [Cloud code › Your own routes](/en/docs/developers/cloud-code#your-own-routes-and-static-files).

## A custom domain

1. In the dashboard open **App Settings › Emails & Hosting** and enter your domain as **Host Name**, e.g. `api.example.com`.
2. At your DNS provider, add a **CNAME** record for that name (or for `<service>.api.example.com`, as the dashboard shows) pointing to `pg-app-<service>.scalabl.cloud`. The dashboard shows the exact names for your app.
3. When the record has propagated, turn on **Free SSL Certificate by Let's Encrypt** in the same section. The certificate is issued and renewed for you.

Saving the host name redeploys the app with it as its public URL:

- the API answers at `https://api.example.com/1/`: point your SDKs' server URL there;
- email verification and password reset links use your domain;
- your website and routes answer on it too.

The original `pg-app-<id>.scalabl.cloud` address keeps working, so apps already released don't break.

To go back, **Remove** the host name in the same section.

Scripts and AI assistants can do the same: the [Management API](/en/docs/developers/api#custom-domain) (`GET`, `PUT` and `DELETE /apps/{appObjectId}/domain`, scopes `settings:read` and `settings:write`) and the [MCP server](/en/docs/developers/mcp)'s `get_custom_domain`, `set_custom_domain` and `remove_custom_domain`. Both name the CNAME record your domain needs, and refuse the domain until it points to the app.
