Security Model
Runny stores and serves script bytes. The client fetches. The local runtime executes. Private access is checked before bytes are returned.
Trust boundary
- Runny stores script content and serves it over HTTPS.
- Runny does not execute hosted scripts.
- The client fetches
/r/{slug}. - The client’s local runtime executes the bytes.
- Private access is checked before raw content is returned.
- Revoke takes effect on the next fetch.
How a fetch runs
Private access
Tokens belong in Authorization: Bearer. Query-string tokens are accepted on /r/ but they leak. A session cookie never substitutes for a fetch token.
Scanning
When scanning is enabled, create and body/runtime updates are scanned for every visibility, not only public. A held or quarantined script returns HTTP 200 with a stub so a piped curl still shows the stop message. See Script scanning.
Rate limits
Raw fetches: 120 per minute per IP, then 429 and rate limited. API: 60 per minute per IP, then JSON {"error":"rate limited"}. Abuse reports are limited separately. Exact module rules are not published.
Logs
Fetch logs store hashed IP addresses and user-agents, not raw addresses. Script bodies live apart from listing metadata. Authenticator secrets are encrypted with the application key. Details are in the Privacy Policy.