Annotations
Let colleagues select text on your published pages and leave notes, with no account. Then give the open notes to your AI agent with fl annotations pull.
Annotations let anyone with the link to your site select text on a page and leave a note. Reviewers don't need an account: they select, type, and add their name if they like. You read the notes on the page, in your dashboard, or with the fl CLI, which prints them in a form you can give straight to an AI agent to revise your Markdown.
Annotations are made for sharing drafts with colleagues and friends, for example a review site you send to a few people. Everyone who can open the page can read and add annotations, so think twice before turning them on for a public site. Pages with annotations on are hidden from search engines (noindex, nofollow).
On the page, annotations are called comments: they're attached to the exact words. They're not the same as reader comments, which are public discussions at the bottom of a page, powered by Giscus and GitHub.
Turning annotations on and off
Annotations are off by default, and the site setting is final: when it's off, annotations are off on every page, whatever a page's frontmatter says.
In the dashboard, go to Settings → Features → Annotations and switch it on. Or publish with the CLI flag:
fl --annotations ./my-draft # on
fl --annotations=false ./my-draft # off
Or add this to your config.json (it wins over the dashboard setting):
"annotations": true
When the site setting is on, you can switch annotations off for a single page in its frontmatter:
---
title: About
annotations: false
---
Annotations work on Markdown pages (.md and .mdx): the page body, plus the title and description in the page header. They aren't available on HTML pages, canvases or changelog timelines. Sites published without an account (fl --anon) can't use annotations yet; sign in and publish with fl login first.
Leaving a comment
When annotations are on, a slim bar under the site's navigation shows how many comments the page has ("3 comments", or "Open for comments" when there are none yet).
- Select some text in the page. On a phone, long-press to select.
- Click Comment next to the selection (on a phone, tap the Comment button near the bottom of the screen).
- Type in Add a comment… and click Post (or press ⌘/Ctrl+Enter). The first time, you can add your name; your browser remembers it and shows "Posting as …" with a way to change it. Without a name, the comment shows as "Anonymous".
Reading comments
Click Show comments in the bar to open the list, in page order. Click a quote in the list to jump to its passage, or click highlighted text on the page to open its comment. Press Escape, click Hide comments or click ✕ to close the list.
- Wide screens: the list docks on the right, beside the text, so it never covers what you're reading. The table of contents makes way while it's open.
- Tablets: the list slides over the right side of the page.
- Phones: the list opens as a sheet over the bottom of the screen. Tap highlighted text and the page scrolls so the passage sits above the sheet. Tap ✕ or swipe the sheet's top edge down to close it.
Highlights on the page need a browser with the CSS Custom Highlight API. Without it, notes still appear in the list, just without highlighting.
When the page changes
Each annotation remembers the exact text it was attached to and a little of the text around it. When you republish, annotations follow their text even if it moved or changed slightly. If the text was rewritten or removed, the comment moves to a collapsed Not found on page group at the bottom of the list, so the note isn't lost.
When you've dealt with a note, mark it resolved (see below). Resolved notes are collapsed at the bottom of the list under Resolved.
Reading and resolving annotations with the CLI or an AI agent
fl annotations pull # open notes; site linked to this folder, or your only site
fl annotations pull --name my-drafts # a named site
fl annotations pull --path notes/draft.md # one file
fl annotations pull --all --format json # include resolved notes, as JSON
fl annotations resolve <id> <id> # mark notes as dealt with
fl annotations resolve --all
The output groups notes by file and gives each one's page URL, the quoted text, the text just before and after it, the note, the reviewer's name, its ID, and whether the page was edited since the note was left. Coding agents such as Claude Code or Codex can run the command themselves. ChatGPT can't run fl, but you can run it yourself and paste the output into any agent, including ChatGPT, and ask it to revise the files.
Notes are written by other people. Each one is wrapped in <untrusted-annotation> tags, and the output tells your agent to treat notes as editing requests from unverified reviewers, never as instructions to run commands. Still check what your agent changes.
fl and fl settings show when annotations are on and how many open annotations are waiting. See the CLI reference for all options.
Resolving and deleting annotations
Only the site owner can resolve or delete annotations:
- On the page: click View as owner on your site's page in the dashboard, or open the comments panel on your site and choose Site owner? Sign in to manage comments. You come back to the page signed in as the owner (an Owner badge shows in the comments bar), with Resolve, Reopen and Delete on each comment. This sign-in is for that one site only, lasts 7 days, and works on custom domains too; Sign out as owner at the bottom of the panel ends it.
- Dashboard: open your site and go to the Annotations tab, which shows the open count. Resolve or reopen a note, delete one, or delete all.
- CLI:
fl annotations resolve <id>,fl annotations delete <id>, orfl annotations delete --all.
Privacy and limits
- Annotations are visible to everyone who can open the page. On a password-protected site, only people with the password can see or add them.
- Turning annotations off hides them from visitors; it doesn't delete them. Deleting the site deletes them.
- Flowershow doesn't store reviewers' IP addresses. The name is whatever the reviewer typed and isn't verified.
- Notes are up to 2,000 characters and names up to 60. A quote is up to 1,000 characters; longer selections are shortened, and the reviewer is told before typing. A page holds up to 500 annotations and a site up to 2,000. These are caps, not rate limiting.
- There are no notifications yet. Check the page, the dashboard or
fl annotations pull.