Write to the people who asked to hear from you.

A release note, a monthly update, a “here is what changed” — the thing most projects want is a plain list and a plain editor, and what they end up buying is a marketing platform with a funnel builder in it. Kontacts gives the project a subscribe page, a Markdown box, and a send button, from the same domain your project mail already leaves from.

It goes out from your domain, or it does not go out

A list here is called an audience, and an audience is tied to one of your own verified domains. That is a requirement, not a default you can talk your way past: you cannot run a newsletter from our shared sending address. The check runs when you create the audience and again on the way out of every send.

The reason is deliverability, and it is your deliverability rather than ours. Mail signed by the domain people already associate with the project is mail their provider has a reason to trust — and a reputation you keep, rather than one you share with every other sender on a common address.

A project can hold more than one audience. Release notes and a monthly digest are different promises to different people, and somebody who wants one is entitled not to get the other.

Two ways for somebody to sign up

Every audience gets a hosted subscribe page at its own URL. Nothing to build and nothing to style — put the link in a README, in a footer, at the end of a post.

If you would rather it were your own markup on your own page, post to the audience endpoint directly with your subscribe form. The key in that URL is a public one, meant to sit in page source where anyone can read it.

There is no JavaScript widget to drop in, and that is a choice rather than a gap: a third-party script on your page is a third party in every visitor’s browser, and a form that posts to a URL does the same job without one.

Somebody who subscribes is subscribed. There is no confirmation email to click, so nobody falls out of the list because a confirmation went to spam — which also means the address on the form is the address you will be mailing, and it is worth asking for it somewhere a real person is filling it in.

Write it in Markdown, send it to everyone

An issue is a subject line and a body, and the body is Markdown: headings, paragraphs, bold and italic, links, bulleted and numbered lists, a rule to break the sections up. Deliberately not the whole language — no images in this version — because a newsletter that renders identically in twenty mail clients is a newsletter that does not use the parts of HTML they disagree about.

Drafts wait until you send them. When you do, it goes to every active subscriber in that audience, in batches, and long lists finish in the background rather than blocking on the last address. Each recipient is tracked as its own send, so one bad address is one bad address and not a failed issue.

What there is not: no scheduling, no test send to yourself, and no segmenting the audience. Sending means sending, now, to the whole list — so read it twice.

There is no preview button in the dashboard either. If you drive the project from an agent, the hosted tools will render an issue exactly as it would go out — the HTML, the plain text, the from address and the number of people it would reach — without sending it to anybody.

Leaving is one click, and it always works

Every issue carries one-click unsubscribe in the headers mail clients read, so Gmail and Apple Mail show their own Unsubscribe button next to your name and honour it without the reader ever opening the message. Every issue carries the plain link too, for the clients that do not.

Each subscriber gets their own unguessable token, and the link that a security scanner might follow on the way to somebody’s inbox only ever redirects — unsubscribing takes a real click. Nobody is silently removed from your list by a corporate mail filter opening their post for them.

We count sent and bounced. We do not record opens.

There is no tracking pixel in a Kontacts newsletter and no rewritten links. Opens are not collected — not aggregated, not stored, not shown to you — and neither are clicks. What you get is what the mail system actually knows: how many went, and which addresses came back undeliverable.

That is enough to run a list. Bounces tell you which addresses to stop paying for; an open rate mostly tells you how many mail clients pre-fetched an image this month. The trade is deliberate: your readers are not carrying a beacon so you can have a number that was never very good.

What it costs

Signing up puts you on Free, with no card: 100 active subscribers across the organisation and 200 recipient-sends a month. Indie Hacker raises those to 1,000 subscribers and 2,000 recipient-sends a month.

Recipient-sends are counted per person reached, so one issue to fifty people costs fifty of them. It is a separate pool from the mail your project sends out of the inbox — a busy week of replies does not eat the month’s newsletter, and an issue does not stop you answering somebody. Billing follows the organisation rather than the seat, and nobody is converted into a paid plan by silence.

Start the list you keep meaning to start.