A bar across the top of a site carrying an announcement or an email signup, with targeting rules and split testing.
Build me an announcement bar that replaces Hello Bar: one message at the top of my site, shown to the right people, that does not follow anybody around. STACK - Node 20+ with Fastify, SQLite through better-sqlite3 - One embeddable script under 6KB gzipped, from my own domain - Server-rendered admin - Caddy in front THE DATA MODEL - bars: id, name, kind, status, message_md, cta_label, cta_url, theme_json, position, priority, created_at - targeting: id, bar_id, rule_kind, operator, value — url pattern, referrer, country, device, first visit, returning, utm parameter, date range - schedules: id, bar_id, starts_at, ends_at, weekdays_json, hours_json - impressions: id, bar_id, session_hash, shown_at, clicked_at, dismissed_at, converted_at - captures: id, bar_id, email, session_hash, created_at — when the bar collects an address - Kinds: bar, ribbon, slide-in, modal. The modal exists because people ask for it, and the admin says out loud that it converts better and annoys more THE BAR ITSELF - A strip at the top or bottom, pushing the page down rather than covering it — a bar that hides a site's own navigation is a bar that gets removed - One message, one action, one dismiss control. No second line of copy, no image, no countdown unless the countdown is real - A countdown must end at a real time and, when it ends, the bar goes. A timer that resets per visitor is a lie with a clock on it - Dismissal is remembered for N days, per bar, in localStorage plus a server-side session hash — a dismissed bar that returns on the next page is the single most hated pattern on the web - Renders from one JSON payload fetched once per session; no layout shift after paint because the space is reserved from the first frame TARGETING - By page, by referrer, by country, by device, by first-or-returning visit, by UTM parameter, by date and time of day - Rules read as sentences in the admin: 'on the pricing page, for visitors from search, on desktop, this week' - Only one bar shows at a time, chosen by priority; the admin shows which rules would collide before saving - A preview mode only the admin sees, driven by a query parameter WHAT IT COLLECTS - Optionally an email address, with the same care as anywhere else: double opt-in off by default but available, a stored consent sentence, and a one-click unsubscribe that needs no login - Never a phone number, never a name, unless the owner adds the field deliberately - Addresses exportable and deletable by address MEASURING - Impressions, clicks, dismissals, captures, per bar and per rule - Click-through and capture rate, both defined on the page - A/B two messages on one bar, split by session hash, with the split and the sample size shown — and no winner declared before the number of impressions the admin set - Bots excluded from published figures and recorded with a flag PRIVACY - No cookie, no cross-site identifier, no third-party request - Country from a local database file - The session hash is salted and never leaves the server in a form that can be joined to anything THE INTERFACE - One page per bar: the message, the rules, the schedule, and a live preview at three widths - A list showing which bar is live where, right now - Dark and light, one accent OPERATIONS - .env: DATABASE_PATH, BASE_URL, HASH_SALT, ALLOWED_ORIGINS, SMTP_URL - Migrations on boot, each once - Payload endpoint from memory with an ETag: it is hit by every page view of the host site - Nightly backup off the machine, restore script - Health endpoint WHAT MATTERS MOST The dismissal memory and the no-layout-shift rendering. Build those first and put a bar on a real site for a day. If a dismissed bar comes back, or the page jumps when it loads, nothing else about the tool matters. Give me the repository, the embeddable script, migrations, .env.example, a seed with two bars and colliding rules, and a README with deploy steps behind Caddy.
What you lose
- Targeting by page, referrer and visit count, changeable by a marketer without a release
- Split testing with the statistics presented
- A bar that does not shift the page layout as it appears
If you would rather not build
- A static config plus a script, which is what the prompt builds
- Any CMS block, if you already have one
- A dismissible banner in your own template
What it costs
read from their page 15 Aug 2026
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| — | $29/mo | — | 15 Aug 2026 |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
Astro
$0Renders the bar from the same config at build time, with no client script.
withastro/astrofree · open source
Formbricks
$0If the bar is really a signup or a survey prompt.
formbricks/formbricksfree · open source
Why this verdict
our own opinion · changed only by a person
91/100
Verdict yes at 91. A static config and a small script. Keying dismissal on a version is what makes the second announcement work.
History
tracked since 10 Aug 2026 · nothing is ever overwritten
Questions about Hello Bar
answered from the record above
Is Hello Bar free?
No — the plan we track is $29 a month. Growth at around $29/month billed monthly, cheaper annually.
Can you replace Hello Bar by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 91 out of 100, build time one session. Read what you lose before you decide.
How much does Hello Bar cost?
$29 a month on Growth — $348 a year. Recorded 10 Aug 2026.
What do you lose by replacing Hello Bar?
Targeting by page, referrer and visit count, changeable by a marketer without a release; Split testing with the statistics presented; A bar that does not shift the page layout as it appears. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Hello Bar?
Yes: Astro, Formbricks. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

