Pro App File Storage
Pro apps can store and retrieve files through the managed backend. This page explains how to configure file storage and use it from an app.
Stored files vs. source files
An app has two very different kinds of files:
| Source files | Stored files | |
|---|---|---|
| What they are | The app's own program code (HTML, CSS, JavaScript) | Documents and data used by the app — spreadsheets, text files, configuration, reference lists |
| Where you find them | Code tab | Backend → Files (Pro apps only) |
| Who changes them | The App Builder, when you ask for a change to the app | You, by uploading and deleting files — and the app itself at runtime, if allowed |
When you talk to the App Builder about a file by its name — for example "show the contents of Product Taxonomy (SMB).txt in a tree" — it means a stored file. The App Builder can list stored files, read them to learn their format, and build the app so it loads them at runtime. It will ask you which kind you mean if the name is ambiguous.
Examples of things you can ask the App Builder:
Add a page that shows the rows of prices.csv grouped by product group.
Read taxonomy.txt and build a collapsible tree from it.
Which stored files does this app use?
Mark settings.json as read-only so the app cannot overwrite it.
Enabling file storage
File storage is available only for Pro apps. To enable it:
- Open the app in the App Builder.
- Switch to the Backend tab.
- Select Files from the left menu.
- Turn on Stored Files.
Once enabled, the App Builder can upload files and the app can access them at runtime.
You can also simply ask the App Builder to do it for you, for example:
Enable stored files for this app and let it create new files at runtime.
The App Builder changes both settings itself (the app must already be Pro) and confirms what is now on.
Uploading and downloading files
In the Files section, click Upload File and choose one or more files from your computer. Files are stored privately for this app. Files larger than 5 MB are rejected, and uploads stop once an app reaches 50 files or 50 MB in total.
To get a stored file back, open the row menu (⋯) and choose Download.
The App Builder can also mark a file as read-only. Read-only files cannot be changed or deleted by the app at runtime. They are useful for configuration files, templates, and reference data.
File name rules
File names must use Latin letters, digits, spaces, and basic punctuation. Names with Cyrillic or other non-Latin letters, accented characters, or emoji are rejected — rename the file and upload it again.
- Allowed: letters, digits, spaces, and
. - _ ( ) [ ] & + , @ ' ! - Not allowed:
\ / ? # % * : | " < > - The name must not start or end with a space or a dot, must not contain
.., and must have an extension - Up to 120 characters
Examples:
Valid: Product Taxonomy (SMB).txt
Valid: report_2026-08.csv
Invalid: Product Тaxonomy.txt (Cyrillic "Т")
Invalid: report:final.csv (colon)
Limits
| Limit | Value |
|---|---|
| Max files | 50 |
| Max file size | 5 MB |
| Max total storage | 50 MB |
The usage meters at the top of the Files section show the current usage against each limit.
Runtime permissions
By default, an app can only read and overwrite files that already exist. It cannot create new files.
To let the app create new files at runtime, turn on Allow app to create files at runtime in the Files section — or ask the App Builder to turn it on.
Using files in an app
The app SDK exposes operator.files:
// List stored files — returns a plain array
var files = await operator.files.list();
console.log(files);
// [{ path: 'config/settings.json', size: 123, mimeType: 'application/json',
// readOnly: true, createdAt: '...', updatedAt: '...' }]
// Read a file — returns the content as a string
var settings = JSON.parse(await operator.files.read('config/settings.json'));
// Write a file — returns the stored size in bytes
var size = await operator.files.write('output/result.json', JSON.stringify(result));
// Optionally mark the file read-only
await operator.files.write('output/final.json', body, { readOnly: true });
// Delete a file
await operator.files.delete('output/result.json');
Errors
File storage requires a Pro app.— the app is not on the Pro tier.File storage is not enabled for this app.— turn on file storage in the Backend tab.Runtime file creation is disabled for this app.— the app tried to create a file but the App Builder has not allowed runtime creation.File is read-only.— the app tried to overwrite or delete a read-only file.
Security
Files are isolated per app. One app cannot access files stored by another app. Files are stored in Operator's managed storage and are not directly reachable from the public internet unless a future public-access feature is enabled.