Protecting a deck

A deck takes the same password: front-matter key as any other Neko page, and gets the same treatment: the content is encrypted at build time with AES-GCM, and the browser derives the key with PBKDF2 when a reader unlocks it.

---
title: Internal roadmap review
password: neko
presentation:
  eyebrow: Internal
  accent: amber
---

See Password protection for the full mechanism — the site-wide password: in neko.yml, the password: none opt-out, and the session key cache that stops a reader being asked twice.

What gets encrypted

Everything that is content:

  • Every slide, including headings, notes and embedded diagrams.
  • The control bar and the deck runtime's init call.
  • The document <title> and meta description, which fall back to the site defaults until the deck is unlocked.

What stays in the clear is page furniture with nothing to give away — the blueprint ground, the progress rail, the back control and the brand mark. They frame the unlock prompt, which is centred in the deck viewport rather than left in a corner, and a locked deck still carries its owner's logo.

The demo deck below is locked. Its password is neko.

Decks are never indexed

Presentations are excluded from search.json whether or not they carry a password, and they never appear in the sidebar. A locked deck is therefore invisible three times over: not in search, not in navigation, and not readable in the generated HTML.

What this is not

Client-side encryption keeps a deck out of crawlers, out of search results and out of casual reading. It is not an access-control system.

  • Anyone with the password has the content, and the password usually travels in the same message as the link.
  • The encrypted payload is public; the only thing protecting it is the strength of the password and the PBKDF2 work factor.
  • There is no per-reader identity, no revocation and no audit trail.

For anything that needs those, put the deck behind your own authenticated hosting and leave password: off.

Working on a locked deck

neko watch --no-password clears both the site-wide and per-page passwords for the session, so a local preview never gates a deck you're editing. The published build is unaffected.

neko watch --input . --output /tmp/preview --no-password

Referenced by