Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Why this name?

"sdfgh" are consecutive letters from the second row of a QWERTY or AZERTY keyboard, the kind of letters you type when you need a random name.

What's the goal?

We often hear:

Don't trust an encryption program if it's not open-source

This is true, and here it's even:

"Don't trust my encryption program if you cannot read its source code completely in 5 minutes."

You want to use it this program for your personal notes? Just take 5 minutes to read the ~65 lines of code(*).

Why another lightweight notepad with encryption?

I needed an encrypted notepad for personal notes that has these features:

  • Ask a password on startup
  • Don't re-ask for the password when saving since we already asked that when opening (except if it's a new file)
  • Open-source
  • Dark mode colors
  • The unencrypted plaintext is never written to disk
  • I wanted to be able to read the full source-code before using it, without spending 1 full day on it (so I finally wrote it in a few hours)

(*) Ok, you still have to trust the Python official package (I think it's ok) and PyCryptoDome (installed via pip install pycryptodome).

How to use it?

Just run python That's all.


CC BY-SA 4.0


Feel free to post issues. NB: This project will (probably) never be made longer than 100 lines of code, so nearly no new features will be added. (No modular splitting into several .py files will be done, and no re-structuring with Class MyEditor:, etc.)

About this project

This project started as an attempt to write an encryption plugin for Sublime Text (see here) but the integration is not that easy since Sublime Text compares the file on disk with the buffer to determine if there are unsaved changes; if the former is encrypted after saving, the editor always see unsaved changes, and this introduces a lot of small issues.


@JosephErnest on Twitter

More on


"sdfgh", an encrypted notepad in ~65 lines of Python. Read the code, trust it (or not), and use it (or not)!






No releases published


No packages published