Security
Renza is designed to host HTML and JavaScript that we do not trust. Uploaded content is kept separate from the application, while Renza's navigation, sharing controls, comments, and account sessions remain on the trusted app origin.
Content isolation
Uploaded artifacts are served from renzausercontent.com, a different registrable domain from
renza.io. They render inside an iframe with sandbox="allow-scripts"; Renza does not grant the
frame same-origin access. In practice, this means:
- Renza session cookies are not available to the artifact.
- The artifact cannot read or modify the parent application's DOM.
- The iframe receives an opaque origin, which also isolates artifacts served from the shared content domain from one another.
Renza adds a small postMessage bridge to support slide navigation and anchored comments. The
parent accepts messages only from the iframe window it created. Identity, permission checks, and
API calls stay in the parent application; credentials are not sent through the bridge.
Artifact and asset access
Artifact HTML and uploaded assets are stored in a private object store. After Renza authorizes a viewer, the app creates a signed capability for one artifact. That capability:
- is carried in the
renzausercontent.comURL path; - is verified by the content service before HTML or an asset is returned;
- expires after one hour by default; and
- covers relative bundle assets, so images, fonts, audio, and video pass through the same gate as the entry HTML.
Capabilities are signed and self-contained. Revoking a share prevents Renza from minting another
capability, while an already issued capability can remain usable until its short expiry. Responses
from the content service use no-store, and invalid or expired capabilities return the same 404
response.
Trusted controls
An uploaded artifact can draw anything inside its own frame, including something that resembles a button or sign-in prompt. Renza therefore keeps its real controls outside the artifact: the viewer toolbar, sharing controls, comment UI, report action, and Renza badge all render in trusted parent chrome. Renza never asks for account credentials inside an uploaded document.
Data handling
Traffic between browsers and Renza services is encrypted in transit with TLS. Metadata is stored in Postgres on Neon. Artifact files are stored in a private object store and are not exposed through public bucket URLs. Our current subprocessors are listed in the Privacy Policy.
Workspace access can be managed with member roles, per-person grants, link revocation, protected links, and version history. See Sharing and permissions for the controls currently available.
Reporting a vulnerability
If you find a security issue, email security@renza.io with enough detail for us to reproduce it. Please avoid accessing other users' data and allow reasonable time for a fix before public disclosure. Good-faith research is welcome. Our machine-readable contact record is available at /.well-known/security.txt.