A simple web-based notepad for writing and securely storing notes online. Useful for easy sharing of text between people or devices.
- No registration process. You use a passphrase as your login.
- Fully encrypted at client-side. No one can read your notes, except you.
- Extremely minimal and lightweight
Exact version of this application:
Rent a server for free at linode.com
Install Docker 19+ on your new server:
curl -sSL https://get.docker.com/ | sh
and then run:
git clone https://github.com/Athlon1600/notepad.git
cd notepad
docker compose up -d
✔️ Application will be running on port 3000
Alternatively, you may run:
docker run -d -p 3000:3000 athlon1600/notepad
See our Docker Hub page here:
https://hub.docker.com/r/athlon1600/notepad
Rent a server for free at linode.com
Deploy this whole thing to production in three lines:
git clone https://github.com/Athlon1600/notepad.git
cd notepad
npm run build && npm run start
This will build Vue frontend first, and then move the resulting bundle to the /public
directory
of the backend application from which the frontend will be served from.
✔️ Application will then be available on port 3000
If you want HTTPS support out of the box, you should install Caddy:
wget -qO- https://github.com/caddyserver/caddy/releases/download/v2.7.6/caddy_2.7.6_linux_amd64.tar.gz | tar -xz && rm -f caddy_2.7.6_linux_amd64.tar.gz LICENSE README.md && chmod +x caddy && mv caddy /usr/local/bin/caddy
Be sure to modify backend/etc/Caddyfile
replacing notepad.mx
with your own domain,
and then run:
caddy start --config ./backend/etc/Caddyfile
- You login using a passphrase which produces a hash value of 32 bytes (or 64 characters in hex)
- First 16 bytes is your authentication key used in API calls when sending data back and forth
- Next 16 bytes is your encryption key used to encrypt that text data
- Encryption key never leaves your browser.
- All the notes are stored as encrypted files inside
storage/{storage_key}
where storage_key =md5(authentication_key)
See the drawing below:
This makes it so that no one besides you know the contents of your notes, or where they are stored on the server.
Notes created on one server are compatible with all other deployments of this application,
as long as passphrases are hashed using the same salt (notepad.mx
by default as defined
inside frontend/src/config.js
).
This makes it possible to import notes from one server to another, or host a backup mirror instance in case the main instance gets shut down.
You can download all the notes created on the main notepad.mx instance here:
extract everything to backend/storage
, and now everyone using your application has access to those notes too.
There is also a command that does all that for you automatically:
docker compose exec -it backend sh -c "sh backend/bin/sync.sh"
- rewrite frontend to use TypeScript
- use websockets to better support multiple sessions editing same document scenarios
- add option to use Redis for storing notes
- ability to use this app via command line
- update the editor to allow subdivision of long text into multiple subsections via linebreaks
If you want to continue using v1, go here:
https://github.com/Athlon1600/notepad/tree/v1.0.0-rc.1