SFTP access

Every site has its own SFTP login. The credentials are on your site's detail page in the dashboard.

Connection details

  • Host: your site's domain (or our server IP if your DNS isn't set up yet)
  • Port: 22
  • Protocol: SFTP (SSH File Transfer)
  • Username: shown on the site detail page; format is site_<your_domain_with_dots_as_underscores>
  • Authentication: password or SSH key

Where you land

Your SFTP session opens in your site user's home directory. The structure looks like:

/home/site_example_com/
├── htdocs/             ← upload your site files here
├── logs/               ← nginx and PHP-FPM error logs
└── tmp/                ← scratch directory

Everything you upload to htdocs/ is what visitors see at your domain. The other directories are read-only from your perspective.

Per-framework upload patterns

WordPress, Laravel, Django

The framework is already installed by the post-install scaffold. You're maintaining an existing install, not deploying fresh code. Use SFTP for theme files, plugins, custom configs. Don't overwrite the core files unless you know what you're doing.

Next.js, Node.js, Python (generic)

The placeholder app responds on the allocated port. Replace it with your own:

  1. Build your app locally (npm run build, etc.)
  2. Upload the build artifacts and source to htdocs/
  3. SSH in and start your server (npm start, gunicorn, etc.) on the allocated port — the dashboard shows the port number

The platform's nginx config is already configured to reverse-proxy from your domain to 127.0.0.1:<port>, so once your app is listening, requests reach it.

React SPA, static

Build your app locally (vite build, npm run build, whatever). Upload the contents of dist/ (NOT the directory itself, the contents) to htdocs/. Your index.html should land at htdocs/index.html.

SSH key authentication

From your site detail page, you can upload one or more SSH public keys. Once added, you can log in via SFTP or SSH using the matching private key, no password needed.

Generate a keypair if you don't have one:

ssh-keygen -t ed25519 -C "[email protected]"

Copy the contents of ~/.ssh/id_ed25519.pub into the dashboard. Done.

Common SFTP clients

  • FileZilla (Windows, macOS, Linux) — free, GUI-based.
  • Cyberduck (macOS, Windows) — free, integrates well with the OS.
  • Transmit (macOS) — paid, polished.
  • command-line sftp — built into macOS and Linux. sftp [email protected]
  • VS Code with the Remote-SSH extension — edit files directly on the server through the editor.

Troubleshooting

Connection refused

Either your DNS isn't pointed at us yet (use the IP from the site detail page instead of the domain), or there's a firewall blocking port 22 on your end.

Authentication failed

Check the username on the site detail page. Common mistake: typing your account email instead of the per-site system username. The username starts with site_.

Permission denied (writing files)

You're trying to write outside htdocs/. The other directories under your home are read-only by design. If you need to write somewhere else, contact support.

Files don't appear at the URL

Make sure they're in htdocs/ (not htdocs/dist/ or htdocs/build/). The web root is the contents of htdocs/, not a subdirectory of it.