A pocket notebook that lives in your browser toolbar.
Most note tools ask you something before they let you write: which notebook, which tag, which project. EasyNotes asks nothing. The page is already open, the cursor is already in the line, and one keystroke files the thought away.
Firefox coming soon · view source
Everything the extension does, on one sheet of paper.
Pages, search and sync all exist to protect it.
One shortcut opens it with the cursor already in the line. Adding a note never asks which page it belongs to.
Local storage is the source of truth, so the notebook is unlimited. A note is never refused, ever.
Results come from every page at once, each tagged with where it lives — because you don't remember where you put it.
Up to fifty, opt-in. One is always open, so structure is a thing you reach for, never a form you fill in.
No account, no server, no telemetry. Notes sit on your machine; your browser's own sync carries them between devices.
One click writes every note, on every page, to a plain Markdown checklist that opens anywhere.
Two files: one draws, one owns every byte.
chrome.storage.local with unlimitedStorage holds every page
and note — that's the source of truth, and it has no practical ceiling.
chrome.storage.sync sits downstream as a replication channel, not a store.
That inversion is the reason a note is never turned away.
The browser merges sync data key by key, so two devices editing different notes both keep their edits. A single array under one key would make every save a whole-list overwrite, and the last device to sync would quietly erase the other's work.
On every change EasyNotes computes what sync should hold and pushes the difference. A failed write needs no retry bookkeeping — the next change simply computes the same difference again.
Browsers allow an extension 102,400 bytes. Page structure always travels; notes then fill what's left, newest first across every page. Measured against the real quota:
| Average note | Reaches sync |
|---|---|
| 40 characters | 479 notes |
| 100 characters | 479 notes |
| 280 characters | 280 notes |
| 500 characters | 173 notes |
| 2,000 characters (max) | 48 notes |
Anything past that stays on the machine that wrote it, marked with a circle in the margin. Nothing is dropped, and deleting newer notes promotes older ones back up.
Being signed into your browser and having extension sync switched on are different
settings, and chrome.storage.sync quietly becomes local storage when the
second one is off — the write succeeds, no error is raised, and nothing leaves the
machine. A successful write proves nothing, so the status chip never claims more than
it can show.
| Chip | What it actually means |
|---|---|
saved | Stored. Whether it left this device is unknown. |
synced · 2 devices | Proven — a beacon arrived that this device didn't write. |
N not synced | All notes are safe here; N are past what sync can carry. |
nearly full | Over 80% of the sync budget is used. |
on this device | Browser sync could not be read at all. |
Each install announces itself with a small beacon. Spotting one it didn't write is the
only proof available that data really crosses machines — which can confirm sync works,
but can never prove it's broken. Hence saved, not not syncing.
One click on Chrome or Edge. Firefox and manual install below.
chrome://extensions or edge://extensions.Then press ⌘ ⇧ E on a Mac, or Ctrl ⇧ E on Windows and Linux, from anywhere in your browser.
git clone https://github.com/0xnikshi/easynotes.git
Five files, no dependencies, no build step. Edit one, hit reload on the extensions page, and that's the whole development loop.
node test/store.test.js node test/popup.test.js
166 checks, no framework required.