Folders
Group documents inside any library. Nested via parent_id, soft-deleted, sharable as a unit. Restricted folders cut permission inheritance for private subtrees.
Folders are the structural layer inside a library. They hold documents and other folders, they can be shared as a unit, and a special restricted type creates a private subtree inside an otherwise shared library.
Creating a folder
| Method | What happens |
|---|---|
| Click New folder in the sidebar (or the parent folder’s row context menu) | A new folder appears at the parent, named “New Folder”, with the name field editable |
| Right-click in the sidebar → New folder | Same behavior |
The folder lives in the library you’re currently viewing. Server-side it’s an folders row with a library_id, optional parent_id (for nesting), position (for sort order), and a name.
Renaming
Double-click the folder name in the sidebar, type the new name, press Enter to commit. Empty names fall back to “Untitled Folder.”
Renames are realtime-replicated — open in another tab and the change appears immediately.
Nesting
Folders nest through parent_id. A top-level folder has parent_id = null; a nested folder points at its parent. There’s no hard limit on depth, but the sidebar tree expands visually as you nest, so deep trees can get unwieldy.
To nest an existing folder under another, right-click → Move to… in the sidebar (drag-and-drop reordering is not yet supported for cross-folder moves in v1).
Moving documents into folders
| Method | Effect |
|---|---|
| Right-click a doc → Move to… | Opens the folder picker dialog |
| Drag a doc onto a folder in the sidebar | Moves the doc into that folder |
| Drag a doc onto the library root | Moves the doc out of any folder |
The move updates the document’s folder_id (and library_id if cross-library). Same-library moves are instant; cross-library moves go through a server-side container-consistency check.
Restricted folders
A folder can be marked restricted (a server-side flag on the folders row). The effect: permission inheritance stops at the restricted folder. See Permissions for the resolution algorithm.
In practice: imagine a library that’s shared with the whole team. Inside it, you have a folder of compensation reviews that should be private to a few people. Mark that folder restricted, then grant only those people access on the folder. Even though the rest of the library is shared, that folder isn’t.
The restricted flag isn’t toggled from the share dialog — it’s set when the folder is created (or via the database directly). Future versions may expose it in the UI.
Deleting
| Action | Effect |
|---|---|
| Right-click → Delete on an empty folder | Soft-deletes; lands in your Recycling Bin |
| Right-click → Delete on a non-empty folder | The sidebar blocks this — empty the folder first |
When you do delete a folder (empty or not via the bin’s path), all its descendants are soft-deleted together. Restoring the parent folder restores the whole subtree.
Sharing a folder
Open a folder’s share dialog (right-click → Share in the sidebar, or from the folder’s URL). Folders only have the People tab — no public link.
Sharing a folder cascades:
- Every document currently inside gets the shared level (read or write)
- Every subfolder inside gets the shared level
- Documents added to the folder later automatically inherit
- A restricted folder inside the shared folder does not inherit — its ACL is independent
This is the simplest way to give a team standing access to a body of work.
Folder URLs
Folders themselves don’t open as a page in v1 — there’s no /app/folder/:id route. The sidebar is the canonical folder browser. The /app/browse route shows a folder-tree view when you want a fuller browser view.
What folders are not
| Not | Why |
|---|---|
| A way to grant less access than the library | The resolver uses highest ACL across the chain. A folder grant can be higher than the library’s, never lower. To restrict, use the restricted flag. |
| A version-control concept | Folders don’t snapshot; documents do. See Version history. |
| Required | Documents can live at the library root with folder_id = null. |
| Sharable as a public link | Public links are document-only. |