Your app's files

The Files tab of a bot or app shows what it keeps under /data: the files your code writes, the code we checked out from your repository, and the folders the runtime manages. You can upload, download, edit, rename and delete your app’s own files there, extract a zip and bring files back from a backup, without a push to GitHub. You can also reach the same files from an SFTP app on your computer.

Any app, the free one included, can also run code you upload here instead of a GitHub repository: see Deploy your own files.

Files comes with every plan, the free one included. On the free plan, what you upload and download here or over SFTP counts toward your app’s daily traffic allowance, the same allowance its own traffic uses, and the tab shows how much of today’s is used. When it runs out, transfers wait until 00:00 UTC; a paid plan has no daily limit. See Plans and limits.

What the tab shows

Each folder is split in three:

PartWhat is in itWhat you can do
Created by your appFiles your code wrote, and files you uploaded.Everything: open, edit, upload over, rename and delete.
From your repositoryThe files of the commit that is deployed.Read and download. Change them in your repository and push; the deploy brings them in.
Managed by FadeHostDependencies and caches, such as node_modules, venv and .cache.Read and download. Hidden until you choose Show under the table.

A lock beside a name means the file is read only. The line under the table shows how much of your plan’s disk the app uses, and opens Plan and usage when you select it.

Upload, download and edit

  • Upload sends files from your computer into the folder you are looking at. You can also drop files, or a whole folder, on the table. A file with the same name is replaced.
  • Download saves one file. Download as zip saves a folder, or every file and folder you selected, as one zip.
  • Select a text file up to 1 MB to open it in the editor, and Save (or press Ctrl or Cmd and S) to write it back. A file from your repository opens read only, with a link to edit it on GitHub.
  • New file, New folder, Rename and Delete do what they say, on your app’s own files.

Most apps read their files when they start. After you change something, the panel offers Restart so the app picks it up.

Extract a zip

Upload the zip, then choose Extract here in its menu, or right-click it (on a phone, press and hold). Its files and folders go into the folder the zip is in.

  • A file that is already there stays as it is, unless you tick Replace files that are already there. Files from your repository are never replaced.
  • Files that would land in a folder FadeHost manages, and links, are left out.
  • A zip can hold up to 20,000 files and must fit in the disk your app has free. A zip with a password, or one made with an unusual kind of compression, cannot be extracted here: unpack it on your computer and upload the files.

While it works, the panel shows how far it got, and Cancel stops it. When it is done, it says how many files came out and what was skipped, and why.

Restore from a backup

When your app has backups, you can bring back earlier versions of its files without restoring the whole app. Choose Restore from a backup in the menu above the table, or Restore an earlier version in a file’s or a folder’s menu. Pick a backup, open the folder you need, tick what to bring back, and choose where it goes:

  • Put them back where they were: the backup’s copies replace the files there now.
  • Into a new folder: they go into a new folder named for the backup’s day, such as restored-2026-10-25, and nothing is replaced.

Files added since the backup stay as they are. Files from your repository and links are left out, and so are databases while the app runs. While it works, the panel shows how far it got, and Cancel stops it.

Backups are switched on in the Backups tab, which is also where you put the whole app back as it was. See Backups.

Connect with SFTP

You can reach the same files from an SFTP app on your computer, such as FileZilla, WinSCP or Cyberduck. Choose SFTP above the table to see your login:

FieldWhat to enter
HostThe address shown, such as sftp://nova.fadehost.net.
Port2022
UsernameYour own username for this app, such as app-k3x9q2m7ra.
PasswordChoose View to see it. Reset makes a new one.

In FileZilla, type them into the bar at the top and choose Quickconnect, or add them as a site in the Site Manager with SFTP as the protocol. In WinSCP and Cyberduck, choose SFTP and type the host without sftp://.

  • The login is yours alone: everyone on the team gets their own, and someone who leaves the team can no longer connect.
  • The rules of the tab apply: files from your repository stay read only, .git is never shown, a database cannot be replaced while the app runs, and what you upload counts against your plan’s disk.
  • An SFTP app that sits idle for 15 minutes is disconnected, and logs in again when you do something. After a reset, SFTP apps that are connected need the new password.

Changes made over SFTP show in the app’s activity, and the next start says what changed, as it does for the tab.

Deploy your own files

An app does not need a GitHub repository. On every plan, the free one included, it can run code you upload here, and every deploy is kept, so you can roll back. On the free plan, programs and libraries (compiled files such as .so or .exe) cannot be uploaded: source code and data files are fine, and dependencies are installed for you when the app deploys.

  • A new app: choose Upload your code when you create it. It opens on its Files tab.
  • An app that deploys from a repository: choose Switch to uploads in Settings, under Build & start. Your code starts as a copy of what runs now, so nothing changes until you deploy. On one of our templates the button is Customize the code: your copy no longer gets the template’s updates. If you then run Python in it, Your code offers to remove the template’s files you have not changed.

Then:

  1. Open Files. It opens on Your code, the folder your app is deployed from.
  2. Drop your project folder or a zip on it, or upload over SFTP into .fadehost/code. A zip you drop there unpacks itself: when everything in it sits in one folder, you get what is in that folder, not the folder, and the zip is deleted once it is unpacked. Leave out node_modules and venv: we install dependencies from your package.json or requirements.txt when the app deploys, so a version leaves those folders out anyway.
  3. A strip says how many changes are not deployed yet. Choose Deploy, add a message if you like, and deploy. Your app restarts on the new version. If your start file sits in a folder instead of at the top of Your code, the strip and the Deploy dialog say so, with a button that moves the folder’s files to the top or points the start command at the file.

Each deploy is a version in the app’s deploy history, with who deployed it, and Roll back takes the app back to any of the last 20. The files in /data/app are the version that runs: they are read only, and Change it in Your code opens the same file in Your code.

A version holds up to 5,000 files and 250 MB, and counts against your plan’s disk. Links, .git folders, node_modules, venv, .venv, __pycache__ and system files such as .DS_Store are left out, and the deploy says so.

To go back to a repository, enter it under Build & start and save. Your uploaded code is kept, not in use, until you delete it there, and switching to uploads again takes you back to it.

Databases and a running app

A database file (.db, .sqlite and the like) cannot be replaced or deleted while the app runs, because changing one under a running app breaks it. Stop the app first; the tab says so when the folder holds one. A download asks first while the app runs: stop it for a clean copy.

What is never shown

Your repository’s .git folder, and the deploy key we keep for a private repository, are never shown and cannot be changed. The folder your code is checked out in, /data/app, cannot be deleted or renamed.

On a team

Team members with full access use the tab like the owner, each with their own SFTP login. Members with read access do not see it. Team sharing has the access levels.

Need help?

Open a ticket from the panel, or reply to any of our emails, and we will take a look.

Something missing or wrong? Tell us.