Clear decks for every visitor.
Harbor is a small widget that lets someone reading your site adjust how it is presented to them — contrast, text size, line and letter spacing, motion, link and focus visibility, a reading guide, and an optional reader typeface. Their choices are stored in their own browser and are never sent anywhere.
It installs as one <script> tag. Every control is
available to every visitor on every site, with no cap on traffic, and the
widget itself is free.
Get started — or read what else Harbor does.
What it does not do
This section is deliberately first, and it is the same one that leads the widget's own README.
- It does not make a website conformant with any accessibility standard, and it never claims to. It changes presentation for one visitor in one browser. The underlying page is unchanged for everyone else, including for anyone who does not use the widget.
- It does not repair the page. No generated alt text, no invented headings, no injected ARIA, no reordered content, no rebuilt keyboard handling. If the page has a keyboard trap, this widget will not free you from it.
- It does not reduce anyone's legal exposure. Presentation overlays have been the subject of litigation and of public criticism from disabled users. Treat this as a convenience for visitors, not as a remedy for a page that needs fixing.
- It does not profile the visitor. No cookies, no persistent identifier, no cross-site tracking, no advertising, and nothing sold or shared. A visitor's actual preferences never leave their browser.
It is not silent, though, and it would be easy to imply otherwise. On each page view the bootstrap asks our API which version to load and how your site is configured, using an account id that identifies the site, not the person. If you switch usage analytics on, it also reports which controls were used — never a URL, never a referrer, never anything typed. What that request carries, and what it unavoidably reveals anyway, is set out in the Privacy Policy.
Installing it
Add a site in your account and it gives you a snippet like this one, with
your own account id in it. Put it in the <head> of every
page you want the widget on.
<script src="https://cdn.harboraccessibility.com/v1/s.js"
data-account="your-account-id"></script>
That is the whole installation. There is no build step, no framework, and nothing to redeploy when we ship a fix — the bootstrap applies stored preferences before first paint with no network at all, then loads the current version. A fix reaches every installed site on the next page load rather than whenever each owner next redeploys.
What it respects without being asked
With nothing stored, the widget follows the preferences a visitor has
already set on their own device: prefers-reduced-motion and
prefers-contrast are followed by default, because plenty of
sites ignore them. Where Windows High Contrast is active it stands aside
completely rather than repainting a page the operating system is already
repainting.
The middle notch of each spacing control is the value named in WCAG 2.1 success criterion 1.4.12 — line height 1.5, letter spacing 0.12em, word spacing 0.16em — because those are the numbers a tester would apply by hand.
Create an account to get a site key and an install snippet.