ReboFilesDocs
Start3
What is ReboFiles
Getting started
Demos to run
Put it in your app6
React component
Headless: your own UI
Without a framework
Styling and themes
Keyboard and accessibility
Languages
Files9
Uploads
Previews and the viewer
Search
Live changes and large folders
Comments
Starred and fields
Versions, trash and space
Download as .zip
Word documents
The server14
The route
Frameworks and sign-in
Who may do what
Storage: S3, GCS, Azure and disk
Checking uploads
Metadata: SQLite and Postgres
Database schema
Sharing and links
Activity and notifications
Hooks, logs and limits
Retention, holds and export
Desktop and other origins
Sync a folder
Going to production
Together1
AI assistants (MCP)
Reference5
Packages
Components and hooks
Client API
HTTP routes
Status and roadmap
↑↓ to move↵ to openEsc to close38 pages

Put it in your app Without a framework

Without a framework

What <FileDrive> mounts is @rebofiles/drive’s, which needs no framework: Vue, Svelte, Angular, or a page of plain HTML. It takes the same options, and renders itself again changing only what differs, so the focus and what is scrolled stay where they were.
Start

Mount it

import { mountDrive, mountSharedLink } from '@rebofiles/drive';
import { pictureOfDocx, previewDocx, textOfDocx, thumbDocx, viewDocx } from '@rebofiles/drive/rebodocs';

const drive = mountDrive(document.getElementById('files')!, {
  base: '/api/files',
  theme: 'auto',
  previewDocument: previewDocx,
  viewDocument: viewDocx,
  thumbDocument: thumbDocx,
  pictureDocument: pictureOfDocx,
  textDocument: textOfDocx,
  onChange: () => refreshTheRestOfThePage(),
});

drive.update({ language: 'es' });  // other options, as a framework gives them again
drive.refresh();                   // after a change made elsewhere
drive.destroy();

// What someone sent a link sees:
mountSharedLink(document.getElementById('shared')!, { token: new URLSearchParams(location.search).get('link')! });
Pieces

The pieces under it

Each is exported, for an interface of your own without React.

NameWhat it is
createDriveClientOne function per route of the server; uploads in parts that resume.
createUploadsThe queue of uploads: three at a time, speed, time left, asking about what is there.
lookInDriveWhat looks for a file in the drive before it goes.
readDropped, readChosenThe files of folders dropped or chosen, at their paths.
downloadZip, writeZipA .zip made in the page, as its files come.
renditionsOf, placeholderOfThe smaller pictures of an image, and its placeholder.
textOf, hashOfWhat is written in a file, and its SHA-256.
CSS, TEXTS, translatorThe look, scoped to .rf-drive, and the words.
import { createDriveClient, createUploads, formatDuration, lookInDrive } from '@rebofiles/drive';

const client = createDriveClient({ base: '/api/files' });
const uploads = createUploads(client, { check: lookInDrive(client), onChange: draw });
uploads.add(input.files, folderId);
// uploads.items, uploads.summary(): what to draw; stop, retry, decide, dismiss, clear