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:

  1. Open the app in the App Builder.
  2. Switch to the Backend tab.
  3. Select Files from the left menu.
  4. 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.

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

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.