A viewer that only shows what the server says you can see.
Folio embeds into any web app in an iframe and renders PDFs and TIFFs up to 600MB, streamed page by page. Every capability, redaction, download, print, is resolved server-side from the user's role, never from the host app's postMessage hints.
Capability counts and adapters reflect Folio's default configuration.
How a document renders inside your app
A host app embeds Folio in an iframe and hands it a token. Everything else, permissions, storage, redaction, is resolved on the server before a single pixel renders.
Embed & authenticate
The host app sends a JWT, file ID, and display hints in a single postMessage; hints affect only the loading screen, never security.
Folio exchanges the JWT for a session that returns the authoritative capability set and UI flags.
JWT via JWKS in production, or API key, static config, or a dev bypass for local work.
The viewer requests a new token from the host app when its session is about to expire, without reloading the document.
View & redact
Only the current page plus a buffer window is held in memory, so a 600MB document opens as fast as a 6MB one.
Draw boxes on a canvas overlay, normalized to a 0 to 1 scale so they stay correct across zoom and rotation.
Burning embeds the redaction into the PDF itself and clears the editable annotation, with a backup copy kept in storage.
Rotate, reorder, delete, and merge pages, all persisted server-side and reflected in the audit log.
Search & export
Optical character recognition and PII detection run as background jobs; results power full-text search and PII overlays with a per-finding redact button.
Search the native PDF text layer or OCR'd content, scoped to what the page shows.
Download, print, or email with a time-limited link, each gated by its own capability.
Every view, edit, redaction, and export writes a row to an audit log the host app can query.
Hints from the host app. Authority from the server.
Folio treats every postMessage flag as a UX hint, never a permission grant. The actual capability set comes from a session call the viewer makes itself, and every adapter behind it is swappable.
Local disk for development, self-hosted MinIO for production, or AWS S3, selected by one environment variable.
Tesseract running locally with no cloud dependency, or AWS Textract, selected per deployment.
Fast regex matching by default, or AWS Comprehend for 20+ entity types.
SQLite full-text search out of the box, or Elasticsearch and MeiliSearch for larger repositories.
Permissions your security team can verify.
Folio is built so the UI cannot grant itself more access than the server allows, even if the host app's postMessage payload says otherwise.
- Every postMessage hint flag is decorative: the viewer's own session call to the server is the only source of truth for what renders.
- Role-to-capability mapping lives in one config file and is auditable without a code change or redeploy.
- Four pluggable auth modes, including a JWT-via-JWKS production mode, so Folio fits an existing identity provider instead of requiring a new one.
- Redaction is burned permanently into the file, with an untouched backup kept in storage, not just hidden behind a UI layer.
- Every view, edit, redaction, and export writes a row to an audit log the host app can query independently.
What changes when the viewer isn't yours to build?
Most teams either license a legacy desktop-era SDK or spend months building a viewer from scratch. Here is what changes with Folio.
| Area | Build it yourself | Folio |
|---|---|---|
| Large documents | Whole file loaded into memory, or custom streaming code | Page-by-page streaming built in, 600MB and up |
| Permissions | Client-side flags trusted by default | Server-resolved capabilities, hints ignored |
| Storage & OCR | Locked into one vendor's stack | Pluggable: local, MinIO, or S3; Tesseract or Textract |
| Integration | Custom protocol per host app | One postMessage contract, works in any iframe |
Ready to embed it in your own app?
Tell us what you are embedding Folio into and what your current viewer looks like, and we will set up a walkthrough with your own documents.
contact@srivasistatech.com