monoki docs Install Source

Security

What monoki defends against, how, and — just as importantly — what it does not.

Authentication

Session cookies only. No API keys, no OAuth, no tokens to leak in a shell history.

Authorization

Every access decision lives in one file (internal/api/authz.go); the storage layer enforces nothing and takes no "acting user" argument, so there is exactly one place to audit.

Server-side fetching (SSRF)

monoki fetches URLs a user typed, from inside your network. This is its one genuinely risky surface, and it is treated that way.

MONOKI_ALLOW_PRIVATE_FETCH defaults to true, which is the deliberate exception: bookmarking http://nas.lan:5000 is the product's main use case, and it requires reaching a private address. Set it to false if your instance has users you would not trust with a curl on the server. All the other controls above apply either way. See Configuration.

Stored icons

Icon bytes come from arbitrary sites, and monoki serves them from its own origin — so every icon response carries X-Content-Type-Options: nosniff, Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; sandbox, and Content-Disposition: inline. SVG is accepted because too many modern sites offer nothing else; the UI only ever renders icons through an <img> tag, which does not execute SVG script regardless.

Audit log

Every mutating action writes a row with a dotted action name — group.share, bookmark.delete, user.update. It is readable by admins.

The log deliberately has no foreign key to the accounts table, so deleting a user leaves their trail intact rather than cascading it away.

What monoki does not do

Stated plainly, because a security page that only lists strengths is not much use:

Reporting a problem

Open a confidential issue on the GitLab project rather than a public one.