Home / Products / Folio Embeddable secure document viewer

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.

600MB+
Documents streamed page by page
11
Roles mapped to viewer capabilities
4
Pluggable auth modes
0
postMessage hints trusted for security

Capability counts and adapters reflect Folio's default configuration.

How Folio embeds

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.

Stage 1

Embed & authenticate

postMessage handshake

The host app sends a JWT, file ID, and display hints in a single postMessage; hints affect only the loading screen, never security.

Session resolution

Folio exchanges the JWT for a session that returns the authoritative capability set and UI flags.

Pluggable auth

JWT via JWKS in production, or API key, static config, or a dev bypass for local work.

Token refresh

The viewer requests a new token from the host app when its session is about to expire, without reloading the document.

Stage 2

View & redact

Streamed rendering

Only the current page plus a buffer window is held in memory, so a 600MB document opens as fast as a 6MB one.

Manual redaction

Draw boxes on a canvas overlay, normalized to a 0 to 1 scale so they stay correct across zoom and rotation.

Burn to permanent

Burning embeds the redaction into the PDF itself and clears the editable annotation, with a backup copy kept in storage.

Page operations

Rotate, reorder, delete, and merge pages, all persisted server-side and reflected in the audit log.

Stage 3

Search & export

OCR & PII

Optical character recognition and PII detection run as background jobs; results power full-text search and PII overlays with a per-finding redact button.

Full-text search

Search the native PDF text layer or OCR'd content, scoped to what the page shows.

Export controls

Download, print, or email with a time-limited link, each gated by its own capability.

Audit trail

Every view, edit, redaction, and export writes a row to an audit log the host app can query.

How the handshake works

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.

Storage

Local disk for development, self-hosted MinIO for production, or AWS S3, selected by one environment variable.

OCR

Tesseract running locally with no cloud dependency, or AWS Textract, selected per deployment.

PII detection

Fast regex matching by default, or AWS Comprehend for 20+ entity types.

Search

SQLite full-text search out of the box, or Elasticsearch and MeiliSearch for larger repositories.

Built to pass audit

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.
Embedding vs. building your own

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
Request a demo

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.

Prefer email? Write directly to
contact@srivasistatech.com