cowyo

about cowyo

a blank page + a link

cowyo is for the text that needs a place right now: a running list, a handoff, meeting notes, or a thought shared across a room.

page controls, plainly

One page, different modes.

Choose from five modes: unpublished, locked, encrypted block, private E2EE, or self-destruct. Each changes how a page is found, edited, protected, or removed.

Unpublished

default

Keeps the page out of cowyo's sitemap and asks search engines not to index it. It is not private; anyone with the URL can still open it.

Locked

edit protection

Prevents changes until the page password is entered. It does not hide the text, which stays readable to anyone with the URL.

Encrypted block

content protection

Password-encrypts the current text in your browser as a signed block. Ordinary text can remain around it, and the page stays an ordinary page.

Private E2EE

permanent whole-page protection

Encrypts every save in the browser. The server stores only ciphertext and a one-way write-capability hash. Keep the full #key URL: it grants read and write access, cannot be recovered if lost, and never reaches the server.

Self-destruct

one final load

An ordinary page is returned on its next load, then deleted. A private page is consumed only after a browser proves it has the write capability.

Starting private means the server never receives plaintext. Converting an existing page protects its current replacement and future saves, but plaintext already sent may remain in database history, backups, or logs. Because the server delivers the browser code, a server able to replace that JavaScript is outside this client-side threat model. Configured Umami scripts run on private pages too and can access the URL fragment and decrypted editor content, so enable only providers you trust. AdSense is omitted from private pages.

full end-to-end encryption

The key stays in the link.

A private scratchpad encrypts the entire document in your browser before cowyo receives it. The complete URL is both the way in and the only key to the plaintext.

A key made in your browser. New private pages use a random 256-bit key stored after #key= in the URL. That fragment is not sent in HTTP or WebSocket requests.

Separate keys, every save. The browser derives independent content and write keys, then encrypts the whole document with a fresh nonce. cowyo stores ciphertext and a one-way write-capability hash.

The full URL grants access. Anyone with it can decrypt and edit. Without the right key, the page is read-only ciphertext.

There is no recovery or reset. cowyo never has the content key. Lose the complete #key URL and the plaintext is gone; share it carefully because it grants both read and write access.

Some metadata remains visible. The server sees the page path, ciphertext size, timing, IP address, cursor offsets, and operations. Conversion cannot erase plaintext already sent from history, backups, or logs. A server that replaces the delivered JavaScript is outside this threat model. Configured Umami scripts also run here and can access the URL fragment and decrypted editor content. AdSense is omitted from private pages.

browser optional

cowyo speaks command line.

Every ordinary scratchpad doubles as a plain-text endpoint. Private pages return only their ciphertext and reject curl writes and page-control API mutations.

  • Composable Pipe command output in or redirect a page to a file.
  • Plain No JSON envelope, HTML scraping, SDK, or API token.
  • Shareable Each write returns the page URL as its response.

01 / read

Read a page

curl receives only the exact stored text. Print it, pipe it to another command, or save it locally.

curl https://cowyo.com/my-notes

curl https://cowyo.com/my-notes \
  > notes.txt

02 / create

Create a new page

POST a file to the home URL. cowyo chooses a memorable name and prints the new page URL.

curl --data-binary @notes.txt \
  https://cowyo.com/

03 / write

Write a named page

POST to any path to create or replace it. Use @- to read from stdin.

printf '%s\n' 'deploy at 3pm' | \
  curl --data-binary @- \
  https://cowyo.com/team-handoff

page controls

Manage more than text.

The versioned API can publish, lock, encrypt, or arm an existing page for self destruct. Successful changes appear immediately for people with the page open.

Encryption stays local: send a compatible encrypted block, not the encryption password. Permanent private pages do not accept API mutations.

curl --json '{"operation":"publish"}' \
  https://cowyo.com/api/v1/pages/my-notes/operations

A named write replaces the page's complete contents. Locked pages reject ordinary writes until they are unlocked in the browser or through the API.

open source, by design

Small enough to understand.
Free to run yourself.

cowyo is built by schollz and released under the MIT license. Inspect the code, host your own copy, or help keep the public service running.