TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Markdown notes and RSS. Post from where you need it, follow where you want.
ProductivityTypeScript · PythonGitHub @notefeedOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Self-hosted inbox for markdown notes: post from scripts, the web UI or the Python/npm clients, read them back as RSS. Every note is a plain .md file.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Post short markdown notes to a named feed — from a script over HTTP, or by hand in a small web UI — and read them back as RSS. Like ntfy, but for notes: there are no accounts, a feed is just a name, and each note is a plain .md file on disk. Built as an inbox for dashboards like Glance and Dynacat, which can read RSS but have nowhere to post to.
notefeed is private by default and stores nothing about a person; sign-in with a verified sender is opt-in.
Save this as compose.yaml, create the data folder, and start it:Read the full README ↗Post short markdown notes to a named feed — from a script over HTTP, an AI assistant over MCP, or by hand in a small web UI — and read them back as RSS. Like ntfy, but for notes: there are no accounts, a feed is just a name, and each note is a plain .md file on disk. Built as an inbox for dashboards like Glance and Dynacat, which can read RSS but have nowhere to post to.
notefeed is private by default and stores nothing about a person; sign-in with a verified sender is opt-in. What notefeed stands for: the values every change is judged against.
This runs your own instance; on notefeed.me there is nothing to install. Save this as compose.yaml, create the data folder, and start it:
services:
notefeed:
image: ghcr.io/notefeed/notefeed:latest
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- ./data:/data
mkdir data # notes are written as the owner of this folder
docker compose up -d
Open http://localhost:3000 and pick a feed name. Anyone who knows the name can read and post to that feed, so make it hard to guess. Post from a script:
curl -H "Content-Type: text/markdown" --data-binary @note.md http://localhost:3000/homelab-7f3k2q9x4m8wz
Or with a client: pip install notefeed / npm install notefeed, then notefeed post "# Hello" --feed homelab-7f3k2q9x4m8wz.
The answer includes the feed's read_url: a read-only RSS link to give to feed readers and dashboards. It doesn't reveal the feed name (except for operator-only reserved feeds, whose read link is their name), and it can't post. A feed created since feed deletion was added has a random read id of its own, so deleting a feed and creating its name again gives a new link.
To require a password for posting and the web UI, set NOTEFEED_PASSWORD. Read links stay open. See Configuration. To protect a single feed, create it with curl -H "X-Feed-Password: ..."; see Posting notes.
A feed can get a title, a description and a title image and can be deleted with everything in it, from the web UI, the API and the client packages; see Feed settings and deleting a feed. Posted notes can be edited and deleted from the web UI, the API, the clients and MCP; see Editing and deleting notes. AI assistants can post, read, edit and delete notes over MCP at /mcp; see MCP. A Claude Code plugin in this repository adds a skill that writes a note, shows it to you as a draft and posts it once you approve; see Agent skills.
Pictures are notes too: drop or paste them into the web UI's compose box (they are posted with the note), or post one with Content-Type: image/png (or notefeed post --file photo.png), and write  in a markdown note to show it; see Pictures. Pictures are public to anyone with the feed's read link, and are stored as posted, with metadata such as GPS position left in.
npm ci
npm run dev # http://localhost:3000
npm test # unit tests; npm run test:e2e for the browser tests
npm run generate # after changing the API in backend/http/api.ts
The REST API is defined in code (backend/http/api.ts). npm run generate writes openapi.json from it, and from that the JS clients (packages/js/src/generated/, app/_lib/api/) and the Python client (packages/python/src/notefeed/_generated/). All of it is committed; CI fails when anything is stale. Generating needs Node 22.18 or newer (.nvmrc) and uv. The client packages: cd packages/js && npm test, cd packages/python && uv run --extra test pytest.
packages/python, packages/js) are licensed under the Apache License 2.0, so any app or script can use them.Versions up to and including 0.2.x were released under the MIT License.