Swashbuckler

Secret Content

Hide blocks and inline text from shared users while keeping them visible to you.

Overview

Secret content lets you include notes, annotations, or sensitive information in an entry that only you (the space owner) can see. Shared users won't see any indication that secret content exists — it's completely invisible to them.

There are two types of secret content: secret blocks (entire sections) and secret inline marks (spans of text within a paragraph).

Secret Blocks

A secret block is a container element that wraps one or more blocks. Everything inside the container is hidden from shared users.

Inserting a Secret Block

  1. Type /secret in the editor and select Secret from the slash menu
  2. Write your content inside the block

Secret blocks are only available to the space owner — the /secret option doesn't appear in the slash menu for shared users.

Secret block with dashed purple border, incognito icon, and Secret label

How They Look

For the owner: secret blocks render with a dashed purple border, an incognito (hat-and-glasses) icon, and a "Secret" label. The content inside is fully editable.

For shared users: the block is completely invisible. There's no placeholder, no "hidden content" message — it simply doesn't appear.

Secret Inline Marks

Secret inline marks hide a span of text within a paragraph. The surrounding text remains visible; only the marked span is hidden.

Applying a Secret Mark

  • Keyboard shortcut: Select text and press Cmd+Shift+P
  • Autoformat: Wrap text with triple pipes — |||hidden text|||

How They Look

For the owner: secretly marked text renders with a dashed purple border and a light purple background, inline with the surrounding text.

For shared users: the marked text is invisible. The surrounding text flows together as if the secret span doesn't exist.

Security Model

Secret content uses visual hiding — the content remains in the underlying data structure but is not rendered for shared users.

  • View-only shared users: Secret content is stripped from the data before the editor receives it (via stripSecretContent()), so it never reaches their browser's DOM.
  • Edit-permission shared users (during real-time collaboration): Secret content is present in the shared Yjs document (required for CRDT sync) but rendered with display: none and contentEditable=\{false\}, so it's invisible and non-interactive.

This means secret content is suitable for personal annotations, draft notes, and content you don't want to share — but it's not a security boundary for highly sensitive information in spaces where collaborators have edit access.

Mentions in Secret Content

@mentions inside secret content are still tracked as relations, but they're tagged as secret-origin. You'll see them in your Links section and Graph View with a purple incognito icon. Shared users never see these relations.

When to Use Secret Content

  • GM secrets: Hide NPC motivations, stat blocks, or plot hooks inside shared entries — your players see the lore, you see everything
  • Draft sections: Work on content secretly before making it visible (remove the secret mark when ready)
  • Review annotations: Leave secret comments on a shared document
  • Personal reminders: Add context that's only relevant to you

On this page