{"schemaVersion":"1","contentVersion":"2026-11-02.1","slug":"storage","updated":"2026-11-01","title":"Manage project files","summary":"Keep uploaded files in project storage and understand capacity, access, and recovery.","category":"Build & operate","minutes":8,"prerequisites":["A [project storage](/guides/system-explorer-storage) allowance.","Permission to browse or manage the target storage."],"sections":[{"id":"file-or-record","title":"Files and database records","blocks":[{"type":"paragraph","text":"Use [project storage](/guides/system-explorer-storage) for file content such as documents and images. Use database records for structured information, such as who uploaded a document and which request it belongs to. They can work together, but they have different permissions and capacity rules."},{"type":"paragraph","text":"A project can have separate storages for different purposes, each with a unique name within the project. Check which storage is selected before uploading, deleting, or changing its capacity."}]},{"id":"browse","title":"Browse and manage files","blocks":[{"type":"steps","items":["Open [Storage](/guides/controls-storage#browse) in the product tools. Select the intended [project storage](/guides/system-explorer-storage) or bucket.","Browse its folders or object paths and inspect the file list.","Upload a harmless test file using the available upload control. Check that it appears with the expected name and size.","Preview or download it when the file type and permissions allow.","Verify that your application’s authorized users can access the file and others cannot."]},{"type":"paragraph","text":"If a storage won’t open, read the error to check whether access is missing, storage is unavailable, or capacity is exhausted."}]},{"id":"capacity","title":"Reserved capacity and used space","blocks":[{"type":"table","headers":["Measure","Meaning"],"rows":[["Reserved storage","The capacity committed to a storage. This consumes the account’s storage allowance."],["Used storage","The bytes actually occupied by files. Used space cannot exceed the reserved capacity."],["Download transfer","File-body bytes served by an admitted download or workflow read; distinct from storage capacity."]]},{"type":"paragraph","text":"For example, a storage reserved at 5 GiB with 1 GiB of files has 1 GiB used, but still reserves 5 GiB. Deleting some files reduces used space; it does not necessarily resize the reservation."},{"type":"paragraph","text":"If an upload fails for lack of space, inspect both this storage’s used/reserved values and the [billing account](/guides/billing#account)’s available allowance. Resizing one storage can consume capacity that another storage needs."}]},{"id":"access","title":"Access files through the intended permissions","blocks":[{"type":"paragraph","text":"Grant access only to the groups and workflows that need the files. A file’s object path is its address within storage, not proof that every visitor may read it. For an application, the backend authorizes each object path and issues the appropriate upload or download address. Routine operations can use the direct storage API; file activities remain available when a workflow owns the process."},{"type":"note","title":"Keep credentials out of the frontend","text":"Do not put storage-provider credentials into browser code. Application users should receive the access your backend authorizes, not unrestricted provider access."}]},{"id":"delete-and-recover","title":"Deletion and recovery","blocks":[{"type":"paragraph","text":"Deleting a file is permanent; do not assume object version history or an undo window. Deleting a storage allocation is a separate destructive action in resource management. Export required data and read the exact confirmation before proceeding."},{"type":"paragraph","text":"Stopping compute preserves retained storage; deleting the allocation removes its files. Cleanup may remain pending while previously issued upload links expire or infrastructure cleanup retries, so capacity is not necessarily released immediately. Account-cancellation retention and database recovery are different lifecycles; neither guarantees recovery after an intentional storage deletion."},{"type":"note","title":"Allowance exhaustion does not mean immediate data deletion","text":"Billing or allowance restrictions can block new writes and reservation increases while keeping reads, exports, and deletes available. Retention after cancellation is a separate account lifecycle."}]},{"id":"faqs","title":"Frequently asked questions","blocks":[{"type":"faq","items":[{"question":"Should this information go in a table or a file?","answer":"Use a database table when the product needs to query structured records, such as request status or a due date. Use storage for file objects such as images, documents, and exports. A database record can retain the reference to a stored file."},{"question":"Will uploading the same filename replace the existing file?","answer":"Check the target folder, object key, and [Overwrite](/guides/controls-storage#write-upload) setting before uploading. The screenshot shows [Overwrite off](/guides/controls-storage#write-upload). Do not assume a filename is unique across folders or that overwrite is enabled."},{"question":"Does a file being visible to me mean every user can access it?","answer":"No. Your access in the workspace and an application user’s access are different contexts. Review the storage permissions and the path your application uses to retrieve the file."}]}]}],"technical":[],"related":["controls-storage","system-explorer-database","collaboration","billing","development","backends","agent-storage"],"sources":["CONTEXT.md","kondor_frontend/rumata_studio/src/components/window/explorer/StorageView.tsx","commons/frontend-preview/README.md"],"audience":"general","media":[{"src":"https://docs.rumata.xyz/media/manual/storage.jpg","width":1662,"height":789,"alt":"Sabai Talk Thai Storage browser with an empty root, quota, Upload, and Overwrite off.","caption":"Reference capture from the separate Sabai Talk Thai application (September 8, 2026). This storage is empty. [Upload](/guides/controls-storage#write-upload) adds a file; [Overwrite off](/guides/controls-storage#write-upload) is the current upload setting. Read the storage reference before replacing files.","sectionId":"browse"}],"video":null,"url":"https://docs.rumata.xyz/guides/storage"}