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 | 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 while it runs, 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 while it runs. 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 use them while it runs.
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.
File storages and who sees which files
Files live in named storages. Each storage decides who its files belong to, and this is chosen once, when the storage is created:
| Scope | Who sees the files | Typical use |
|---|---|---|
| Global | Everyone using the app | Reference data shared by all customers — taxonomies, price lists, templates |
| Per instance | Only users with a regular (internal) connection to that ERP.net instance | Customer documents that must never be seen by another company — CVs, contracts, scans |
| Per user | Only the person who created them | Personal drafts and scratch files |
The scope is shown as a badge next to each storage in Backend → Files, and the file list shows which instance or user every file belongs to. An app running in one instance simply never sees the files of another one — nothing needs to be filtered in the app itself.
Isolation is enforced by the platform, not by the app. Files of a per-instance storage are only served to people who are actually signed in to that instance as an internal user; a client-mode (self-service customer) connection never unlocks them. Files of a per-user storage are only served to their owner. App designers keep full visibility of every instance and user, so they can manage the content in Backend → Files.
Examples of what you can ask the App Builder:
Create a per-instance file storage called "cvs" and keep candidate CVs there.
Which file storages does this app have, and what is their scope?
Move the taxonomy file into a global storage so every customer gets it.
Uploading and downloading files
In the Files section, pick a storage, click Upload File and choose one or more files from your computer. When the storage is per instance, the files are uploaded into the instance currently selected in the top bar; when it is per user, they belong to you. Files larger than 5 MB are rejected, and uploads stop once an app reaches 500 files or 100 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 while it runs. They are useful for configuration files, templates, and reference data.
Moving files between storages
Files are not stuck where they were first uploaded. Ask the App Builder to move one, and it keeps the content, the file type and the read-only flag — so PDFs, images and other binary files survive the move intact. It can also rename the file on the way.
Move taxonomy.txt from the default storage into the "reference" storage.
The CVs are in the global storage — move them into the per-instance "cvs" storage.
Rename prices.csv to price-list-2026.csv while moving it to "reference".
A few rules keep the move safe:
- Moving between two storages with the same scope keeps the file's instance or owner — it never changes hands.
- Moving a file from a global storage into a per-instance one puts it into the instance currently selected in the top bar, unless you name another one. The App Builder always says which instance it used.
- Moving a customer-specific file into a global storage makes it visible to everyone using the app; the App Builder warns you before doing it.
- A move never overwrites an existing file, and read-only files must have the flag cleared first.
- When the same file name exists in several instances, they are moved one instance at a time so nothing collides.
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 | 500 |
| Max file size | 5 MB |
| Max total storage | 100 MB |
The usage meters at the top of the Files section show the current usage against each limit.
What an app is allowed to do
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 while it runs, turn on Allow app to create files at runtime in the Files section — or ask the App Builder to turn it on.
An app is stopped with a clear message when it tries to do something it is not allowed to do — for example creating a file when runtime creation is off, or changing a read-only file. If you see such a message, adjust the setting in the Files section or ask the App Builder to explain what the app was trying to do.
Showing PDFs inside an app
Apps run in a protected frame, and Chrome does not allow its built-in PDF viewer to run there. If an app tries to show a PDF the usual way, Chrome replaces it with a grey "This page has been blocked by Chrome" box. The file is intact — only the browser's viewer is blocked.
The way around it is to let the app draw the PDF itself, page by page. Ask the App Builder for something like:
Show the attached CV as a real PDF preview inside the dialog, drawn by the app
(not an embedded viewer), with page navigation and a fit-to-width view.
Keep the Open / Download button next to the preview as well: opening the PDF in a new tab always works, because a new tab is not inside the protected frame.
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.