The features I said no to

By Lior Rabanian · · 6 min read
  • Builder's log
  • Design
  • Local-first

The most useful sentence in Cyanote's description is a list of things it does not do: no sync, no iPhone app, no collaboration, no AI, no plugins, no telemetry.

That reads like modesty. It is closer to a budget. Each of those noes is load-bearing, and I would like to go through them one at a time, because "we decided to stay focused" is the kind of thing every product says and almost none of them mean specifically.

Sync

The most requested, by a distance, and the one I am most confident about.

Sync is not a feature you add. It is a distributed systems problem you adopt. The moment two machines can both edit a note, you own conflict resolution, offline queues, partial failures, clock skew, and a class of bug where the wrong version wins and someone's afternoon disappears. Ask anyone who has shipped it. The demo is a weekend; the correctness is years.

And it needs a server, permanently, per user. Go back to the arithmetic of a $10 app: a one-time payment against a recurring per-user cost has exactly one ending, and it is a subscription announcement dressed up as a "sustainability update".

So the no here is not "sync is hard". It is: a synced Cyanote could not be a $10 app you buy once, and if I have to choose between those two things, the pricing is the part people cannot get elsewhere.

What exists instead: the database is a single file, and Settings will put it wherever you like — including a folder that Dropbox or iCloud Drive already syncs. That works if you are careful about not running both Macs at once, and I say so plainly rather than pretending it is a feature. Two Macs, one system is the honest guide to the trade-offs.

An iPhone app

The second most requested, and the answer is arithmetic again, of a different kind.

A native iOS app is a second codebase. Not a port — a different interface, different interaction model, a review process with its own timeline, and a permanent doubling of every future change. One person maintaining two platforms ships each of them half as well.

There is a worse version of this that I want to name, because it is the trap. A mobile app that is useful needs to see your notes, which means it needs sync, which means the server, which means the subscription. The iPhone request and the sync request are the same request, and answering it turns Cyanote into a different company.

If you need your notes in your pocket, Cyanote is the wrong app, and I would rather you learn that from a blog post than from a refund form. Getting a note to your phone without sync covers what actually works when it is occasional rather than constant.

Collaboration

Shared notes need identity: who are you, what may you see, who changed this. Identity means accounts. Accounts mean a user database, a password reset flow, a breach surface, and a server that has to be up for you to open your own notes.

Cyanote has no account because it has nothing to sign into, and that is the single strongest privacy property it has — not a policy, an absence. What an account actually buys you goes through what disappears along with it.

It is a desktop app for one person on their own machine. If two people need the same document, use something built for that; there are good ones, and this is not one of them.

Six requested features, what each one would require, and the property of the app it would consume
Every no is a yes to something else. These are the somethings.

AI features

The interesting no, because I do not think AI in a notes app is stupid. Summarising a long meeting note is genuinely useful.

The problem is the direction the data flows. Any model worth using runs on someone else's hardware, which means your notes leave your machine to be useful. The app's whole promise is that they do not. You cannot hold both. "We only send the note you asked about, and we don't train on it" is a policy — revocable, unverifiable from where you sit, and a completely different kind of assurance from the app makes one network request ever, and it is a version check.

A local model would keep the promise, and someday that may be genuinely good enough on ordinary hardware for a specific job. It is not a no forever. It is a no while the honest version of the feature is "your notes get uploaded". AI features and private notes has the longer argument.

Plugins

Plugins look free. Other people write the features, users get what they want, nobody is asking me for a Kanban swimlane.

What a plugin API actually does is turn your internals into a public contract. Every table shape, every state store, every editor node that a plugin can reach is now something you may not change without breaking somebody's setup. Cyanote has 26 shipped database migrations and I have edited the data model on a dozen ordinary afternoons. That freedom is what has kept it moving. A plugin ecosystem trades it away permanently, at exactly the stage when I still get the shape wrong regularly.

There is also the security half: a plugin runs inside an app holding an unencrypted clipboard history. "Install this handy extension" is not a sentence I want anywhere near that.

Themes were the compromise, and the right one. Fifteen built in, plus an editor for the seven colours the whole app is drawn from — real customisation, no API surface, nothing executing.

Telemetry

No analytics, no crash reporting, no "anonymous usage statistics to help us improve".

This one costs me the most, and I want to be straight about it rather than noble. I have no idea which features get used. I do not know how many notes a typical database holds, whether anybody opens the board view, or which of the fifteen themes is anyone's favourite. Every product decision is made without the data that every other product team considers a baseline.

I took that trade because a searchable index of everything you copy sits in this app, and "we collect anonymous usage data" is where the erosion always begins. Not with a scandal. With a reasonable-sounding paragraph in a privacy policy, then a slightly wider one.

The replacement is worse and slower: people email me. That is a biased sample, it is a fraction of a percent of users, and it is what I have. Support for an app with no accounts covers what that is actually like.

What the noes cost

Every one of these loses sales. Sync and mobile lose the most, and they lose them silently — people read the page, see what is missing, and close the tab, and I never learn their names.

What is left is an app that opens instantly, works with the wifi off, keeps everything in one file you can copy to a USB stick, and costs $10 once. Those four properties are downstream of the six noes. Add sync and you lose the price. Add AI and you lose the privacy. Add plugins and you lose the ability to fix things quickly.

I would rather be exactly right for a smaller number of people than approximately right for everyone. That is a real position with real costs, and this is the list of them.