minsu choi76 downloadsEncrypt a note with AES-256-GCM and unlock it inline. A little character hugs a padlock while the note is locked. English and Korean.
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.

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.
Get the password wrong and the character is startled — it shakes, then settles back.

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

The same note with Obsidian set to Korean:

Command palette (Ctrl/Cmd + P):
| Command | What it does |
|---|---|
| Lock this note | Asks for a password twice, then encrypts the note |
| Remove lock permanently | Writes the content back as plaintext |
| Lock everything that is open | Immediately re-locks any unlocked block |

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.
| Setting | Default |
|---|---|
| Language | Follow Obsidian |
| Show the character | On |
| Lock when leaving the note | On |
| Lock when the window loses focus | On |
| Auto-lock after (seconds) | 0 (off) |
A locked note is stored like this:
```kkong-v1
{"v":1,"salt":"...","iv":"...","tag":"...","data":"..."}
```
| Cipher | AES-256-GCM |
| Key derivation | scrypt (N=32768, r=8, p=1), 32-byte key |
| salt | 16 bytes, regenerated on every lock |
| IV | 12 bytes, regenerated on every lock |
| Auth tag | 16 bytes |
Only standard primitives from Node's built-in crypto module. No home-grown cryptography.
[!WARNING] A forgotten password cannot be recovered. There is no recovery path by design. Back up important notes before locking them.
crypto, so it is desktop only.Settings → Community plugins → Browse → search Kkongkkongi → Install → Enable
manifest.json, main.js and styles.css from Releases<vault>/.obsidian/plugins/kkongkkongi/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.
MIT