Skip to content

alfaoz/justtype

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

153 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

justtype

start typing, we'll handle the rest.

live at justtype.io

why open source?

transparency + sweet community support.

what it offers

a simple writing interface with cloud saved slates, shareable urls, export to txt, and zero-knowledge encryption. your writing is yours.

how encryption works

on signup, a unique salt is generated and stored. your password is derived into an encryption key.

every private slate is encrypted client-side with aes-256-gcm before upload. the encrypted payload is structured as iv (16 bytes) + auth tag (16 bytes) + ciphertext, stored on backblaze b2. the server only ever handles ciphertext. decryption happens in your browser when you load a slate.

this is zero-knowledge: the server cannot read your slates because it never possesses the key. if you forget your password and lose your 12-word bip39 recovery key, your data is unrecoverable by design.

published slates are the exception. publishing stores a separate unencrypted copy on b2 with a public share id. unpublishing deletes the public copy.

you can verify all of this yourself. the source is right here, and the /verify page lets you confirm the code running in your browser matches this repo through three-way hash comparison (server, github actions, browser-computed). for a deeper dive on the encryption architecture, key management, and recovery system, see the encryption deep dive.

tech stack

react, tailwind css, node.js, express, sqlite, backblaze b2, resend.

self-hosting

you can run your own instance. clone the repo, configure your environment, and you're up.

git clone https://github.com/alfaoz/justtype.git
cd justtype
npm install
cp .env.example .env

fill in your .env with backblaze b2 credentials, a jwt secret, and a resend api key for emails. then build and start:

npm run build
npm run server

requires node 20+.

system documentation

the /terms, /privacy, /limits, and /project pages are hosted as published slates by a system user. this dogfoods justtype's own publishing feature for our documentation.

to set up system documentation (optional for self-hosting):

node setup-system-docs.js

this creates:

  • a systemalfaoz system user (displays as "alfaoz")
  • 4 published slates with share_ids: terms, privacy, limits, project
  • redirects from /terms/s/terms, etc.

the system slates are protected from deletion but can be edited by logging in as the system user. you can also keep the documentation as plain text files. both approaches work.

contributing

found a bug? security issue? want to add a feature? need a friend?

license

gnu gplv3

About

zero knowledge, end-to-end-encrypted, web notepad.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors