Kkongkkongi

approvedunreviewed

by minsu choi

Encrypt a note with AES-256-GCM and unlock it inline. A little character hugs a padlock while the note is locked. English and Korean.

↓ 61 downloadsUpdated 21d agoMIT

English 한국어

Kkongkkongi

Encrypt a note and unlock it right where it sits. A little character hugs a padlock while your note is locked, and hands it back when you enter the password.

A locked note showing the character hugging a padlock


Why this exists

Some "lock" plugins only cover the screen — the .md file stays in plaintext, so opening it in any text editor reveals everything.

Kkongkkongi encrypts the content that gets written to disk. Open a locked note in Notepad and you see ciphertext.

Features

  • Real encryption — AES-256-GCM, key derived with scrypt
  • Inline unlock — no modal; the content unfolds inside the note
  • Locks itself again — on leaving the note, losing window focus, or after a timeout
  • Plaintext never hits disk — decrypted content lives only in the DOM
  • Tamper detection — a damaged ciphertext fails the GCM auth tag check
  • Theme aware — the character follows your light/dark theme
  • English and Korean — the interface follows Obsidian's language, or pin one in the settings

How it looks

Get the password wrong and the character is startled — it shakes, then settles back.

The character with X eyes after a wrong password

Get it right and the note unfolds in place, fully rendered as markdown.

The note unlocked, content rendered inline

The same note with Obsidian set to Korean:

The same locked note in Korean

Usage

Command palette (Ctrl/Cmd + P):

CommandWhat it does
Lock this noteAsks for a password twice, then encrypts the note
Remove lock permanentlyWrites the content back as plaintext
Lock everything that is openImmediately re-locks any unlocked block

The lock dialog asking for a password twice

After locking, opening that note shows the character asking for a password. Enter it and the content renders as markdown. Move to another note and it locks again.

Settings

SettingDefault
LanguageFollow Obsidian
Show the characterOn
Lock when leaving the noteOn
Lock when the window loses focusOn
Auto-lock after (seconds)0 (off)

Storage format

A locked note is stored like this:

```kkong-v1
{"v":1,"salt":"...","iv":"...","tag":"...","data":"..."}
```
CipherAES-256-GCM
Key derivationscrypt (N=32768, r=8, p=1), 32-byte key
salt16 bytes, regenerated on every lock
IV12 bytes, regenerated on every lock
Auth tag16 bytes

Only standard primitives from Node's built-in crypto module. No home-grown cryptography.

Caveats

[!WARNING] A forgotten password cannot be recovered. There is no recovery path by design. Back up important notes before locking them.

  • Encrypted notes are excluded from content search and the graph view — the file only holds ciphertext.
  • Source mode shows the ciphertext. Content unfolds in Reading view and Live Preview.
  • Uses Node's crypto, so it is desktop only.
  • This does not protect the disk itself. Pair it with BitLocker, FileVault or Cryptomator if you are worried about a stolen device.

Installation

Community plugins

Settings → Community plugins → Browse → search Kkongkkongi → Install → Enable

Manual

  1. Download manifest.json, main.js and styles.css from Releases
  2. Put them in <vault>/.obsidian/plugins/kkongkkongi/
  3. Restart Obsidian and enable the plugin

Development

No build step — main.js is plain CommonJS and runs as written.

node --check main.js     # syntax
node test/test.js        # tests: crypto, format, i18n, state transitions, character

Adding a language: add a table to LOCALES in main.js keyed by the two-letter code, and add the option to the language dropdown. The test suite checks that every locale has the same keys and the same placeholders.

License

MIT

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.