MarkLayer features
On this page
- The 16 annotation tools
- Comments that behave like work, not like sticky notes
- Real-time collaboration, voice and video
- Sharing, access control and how long a link lives
- Send feedback to Slack, Teams, Discord, Linear, GitHub, Jira or Trello
- What an AI coding agent can do with a link
- PDFs, images and multi-page projects
- Marks that survive a responsive reflow
- Getting the feedback out
- The web app and the extension
- What MarkLayer does not do
- What all of this costs
- Frequently asked questions
- Read next
The 16 annotation tools
Every tool below is available on the web app and in the extension, on any page, with no account. Each answers to a single key, chosen to match Figma where Figma has an equivalent, so the muscle memory carries over. The toolbar itself drags anywhere on screen, reorders by dragging a tool, and collapses to a fan when you want the page back.
| Tool | Key | What it does |
|---|---|---|
| Move | V | Scroll and click the page underneath without drawing on it. |
| Pen | P | Freehand stroke, the fastest way to circle something. |
| Highlight | ⇧H | A translucent marker pass over anything on the page. |
| Line | L | A straight segment between two points. |
| Arrow | A or ⇧L | The same line with a head on it, for pointing at a thing. |
| Rectangle | R | A box around a region. |
| Circle | O | An ellipse from its centre out. |
| Text | T | A typed label placed directly on the page. |
| Comment | C | A pinned thread with replies, status, priority and an owner. |
| Selection | S | Select real text and comment on it, or propose an exact rewrite. |
| Area | G or F | Draw a region and attach a note to the whole of it. |
| Eraser | E | Remove strokes without clearing the page. |
| Inspector | I | Capture one element's CSS selector, styles and a prompt for a coding agent. |
| Multi-select | X | Marquee several elements and copy them as one agent task. |
| Measure | M | Pixel distances and gaps between two elements, the way Figma shows them. |
| Guide | U | Drag a ruler guide out to check alignment. Everyone on the link sees it. |
Undo and redo are ⌘Z and ⌘⇧Z, and Clear all empties the page in one step. Everything you draw is an operation in one stream, which is why a ruler guide you drag out appears on everyone else's screen too rather than staying a private overlay on yours.
Comments that behave like work, not like sticky notes
A comment pin is a thread. It has replies, and it carries the fields a review actually needs to move: five statuses (open, in progress, resolved, approved, dismissed) and four priorities (low, medium, high, urgent). Assign one to a teammate or to an AI agent. @mention anyone already working on the page. Attach up to four images per comment, or paste a screenshot straight from the clipboard.
Each comment also records the browser, operating system and viewport size it was written on, so a bug report that only reproduces at one width says so without anyone having to ask.
The selection tool goes one step further. Select real text on the page, then either comment on it or write the exact replacement you want. MarkLayer renders that as a diff, and the same diff travels into the Markdown export and into an AI agent's view of the thread, so nobody retypes the correction.
Real-time collaboration, voice and video
Open the same link as someone else and you see each other's cursors move, with names, as the marks appear. There is no collaborator limit and no seat to buy.
Voice and video run peer to peer over WebRTC, negotiated through the same room. You get microphone and camera selection, an output device picker, a speaking indicator, and a connection-quality readout. It falls back to a TURN relay when a network refuses a direct connection. Nobody installs anything to join.
Sharing, access control and how long a link lives
Sharing is a link. The unguessable id in it is the access token, which is why a recipient needs no account and no extension, and why there is no invite flow to sit through. You can also have MarkLayer email the link.
A link is deleted 90 days after the last time anyone opened it, and any view, comment or edit resets that clock, so an active review never expires underneath you. You can set a shorter expiry explicitly, up to 30 days, when a link should not outlive the round.
If you want more control than that, signing in with a magic link (no password) lets you claim a link, switch it between can edit and can view, set its own expiry date, and see everything you own in one dashboard. The room enforces view-only everywhere a write could land, rather than by hiding the toolbar. The account is optional and free; annotating and viewing never require one.
Send feedback to Slack, Teams, Discord, Linear, GitHub, Jira or Trello
Connect a destination from the panel on any share link. Chat destinations post on their own as annotations arrive. Issue trackers wait for you to pick a specific annotation and file it, which is what stops a review from manufacturing forty tickets nobody asked for.
| Destination | Fires | What happens |
|---|---|---|
| Slack | Automatic | Posts each new batch of annotations to an incoming webhook. |
| Microsoft Teams | Automatic | The same batch, formatted for a Teams incoming webhook. |
| Discord | Automatic | The same batch, trimmed to fit Discord's 2,000-character ceiling. |
| Webhook | Automatic | A structured JSON body to any public endpoint you control. |
| Linear | You pick one | Files a single annotation as a Linear issue and hands you the link. |
| GitHub | You pick one | Opens a GitHub issue on a repository from one annotation. |
| Jira | You pick one | Creates a Jira issue in the project and issue type you name. |
| Trello | You pick one | Adds a card to the list you name from one annotation. |
This is one way out. MarkLayer creates the Linear, GitHub, Jira issue or Trello card and gives you the link to it, and nothing about that issue's later life comes back. If you need a comment to close when the ticket closes, you want a bug tracker, and the honest recommendation is BugHerd orMarker.io.
Unlike most tools, MarkLayer never sends the API token for Linear, GitHub, Jira or Trello to its server. The room stores only the repository, project key or team id. The token stays in the browser of whoever set it up. A room holds five destinations at once.
What an AI coding agent can do with a link
Every share link is also an MCP server, at the same address plus /mcp. It turns a review into a work queue an agent can actually work through rather than just read, and connecting Claude Code needs nothing installed:
claude mcp add --transport http marklayer https://marklayer.app/s/<id>/mcpThe share panel on every link shows that command with the id filled in. For a client that only runs local servers, the same tools ship on npm as marklayer-mcp, installed once for every room:claude mcp add marklayer -- npx -y marklayer-mcp.
| Tool | What the agent can do |
|---|---|
marklayer_connect_room | Join a share link, by URL or by bare id. |
marklayer_room_info | Read the page under review, its viewport and its timestamps. |
marklayer_read_page | Read the page's headings, text, links and controls with their selectors. |
marklayer_list_annotations | Backfill everything outstanding, filtered by status. |
marklayer_get_annotation | Pull one annotation in full, including the reply thread. |
marklayer_watch_annotations | Long-poll for new work and for anything handed to this agent by name. |
marklayer_acknowledge | Mark a comment in progress so the human sees it has been picked up. |
marklayer_resolve | Close a comment and post the summary as a reply. |
marklayer_dismiss | Decline a comment, with a reason that is required rather than optional. |
marklayer_reply | Ask a clarifying question without moving the status. |
marklayer_create_annotation | Leave a comment of its own, anchored to an element. |
marklayer_suggest_edit | Propose exact replacement text, shown to the human as a diff. |
The part that matters is that the human watching sees all of it happen. A comment flips to in progress when the agent picks it up, and lands as resolved with a written summary underneath. When an agent asks a question, it appears as a reply on the thread the person already has open.
Feeding it is the inspector. Point at any element and MarkLayer captures its CSS selector, its computed styles, a text fingerprint and, on a React or Vue page, the component behind it, then formats the lot as a prompt. Multi-select does the same for a whole set of elements and copies them as one task. There is also a plain HTTP API with no auth, so an assistant can mint share links for a list of URLs on its own. Seehow that compares to other tools' MCP servers.
PDFs, images and multi-page projects
Paste a link to a PDF or an image, or upload one up to 25MB. PDF text stays selectable, so a highlight binds to the words rather than to a coordinate, and every mark records which page it was made on. Images accept PNG, JPEG, GIF, WebP and AVIF.
One share link can hold a project of up to 50 pages, switched through a tab strip. Add a page by pasting its URL, and the Markdown export covers the whole project with a section per page.
Two tools switch off on a file, and it is better to say so than to let you find out: the element inspector and measure need HTML elements to point at, and a PDF has none. Annotations sit in a layer over the file rather than being written into it, so there is no annotated PDF to download afterwards. Readhow to annotate a PDF andhow to annotate an image for the full picture.
Marks that survive a responsive reflow
Preview a page at desktop, tablet or mobile width from the viewer, without touching the annotations. This is the part of MarkLayer that took the most work and shows the least: a comment binds to the element it was left on, by CSS selector with a text fingerprint as a fallback, plus a fractional offset inside that element's box. When the layout reflows or a single-page app re-renders the DOM underneath, the mark re-resolves and lands back on the right thing instead of floating off to a coordinate that no longer means anything.
Getting the feedback out
Comments do not have to stay in MarkLayer. From the panel on any share link you can copy every comment, reply and highlighted selection as Markdown or download it as a .md file, with statuses, authors, device metadata and suggested edits as diff blocks. You can also export the annotated page as a PNG, which captures the live page with the drawings over it.
The web app and the extension
The web app is the main route: paste a URL at marklayer.app and MarkLayer fetches the page, overlays the canvas, and gives you the address bar as the share link before you have drawn anything. Nothing to install, for you or for the people you send it to.
The free extension exists for the pages a proxy cannot reach: anything behind a login, internal tools, and localhost. It annotates in place in the browser you are already signed into, and it asks for only three permissions (activeTab, scripting, contextMenus), none of which grant standing access to your browsing. Both routes produce the same share link, and the recipient installs nothing either way.
What MarkLayer does not do
It captures no console logs and no network requests, which is what the $39 to $79 tier at Marker.io and BugHerd is priced for. Nothing syncs back from Jira, Linear, GitHub or Trello. Both surfaces are desktop only today, and a phone will tell you so. There is no list of your past links unless you sign in, because without an account there is nothing to look them up against. And on a PDF or an image, the inspector, measure and multi-select are off.
If every comment needs an owner, a status and a ticket in a tracker that stays in step, buy the tracker. MarkLayer is the visual feedback layer in front of it. Thefull audit of 21 feedback tools, with prices read off each vendor's own page, includes what MarkLayer does worse.
What all of this costs
Nothing. There is no paid plan, no trial, no per-seat price, no usage cap and no feature held back for a tier that does not exist. MarkLayer is Apache-2.0 licensed, so it cannot be withdrawn from under a workflow you have built on it, and you can self-host the whole thing on your own Cloudflare account. See pricing and theaudit of what "free" means at other tools.
Frequently asked questions
- How many annotation tools does MarkLayer have?
- Sixteen, and every one of them is free. Move, pen, highlight, line, arrow, rectangle, circle, text, comment, selection, area, eraser, inspector, multi-select, measure and guide. Each has a single-key shortcut, and the toolbar can be dragged anywhere on screen and reordered to suit how you work.
- Can MarkLayer send annotations to Jira, Linear, GitHub or Trello?
- Yes. Open the panel on a share link, connect Linear, GitHub, Jira or Trello, then file any single annotation as an issue and MarkLayer hands you the link to it. This is one way out: MarkLayer creates the issue, and nothing about that issue flows back. Slack, Microsoft Teams, Discord and a plain JSON webhook work differently, posting every new batch of annotations automatically. A room can hold five destinations at once.
- Do the Jira, Linear, GitHub and Trello tokens get stored on your server?
- No. For the four issue trackers, the room stores only the parts that are not secret, such as the repository name or the project key. The API token stays in the browser of whoever set it up and is sent straight to Linear, GitHub, Jira or Trello when they file something. Chat webhooks are different: the webhook URL is the credential, so it is stored with the room, and anyone holding the share link can see its last four characters and remove it.
- What can an AI coding agent do with a MarkLayer link?
- Twelve things, over MCP. An agent can join the room, read the page, list and watch annotations, acknowledge one so the human sees it is being worked on, resolve it with a summary, dismiss it with a reason, reply with a question, leave comments of its own, and propose an exact text edit rendered as a diff. Every share link is the server, at its own address plus /mcp, so connecting needs nothing installed: claude mcp add --transport http marklayer https://marklayer.app/s/<id>/mcp. The same tools ship on npm as marklayer-mcp for clients that only run local servers.
- Can I get my comments out of MarkLayer?
- Yes, two ways, both in the panel on the right of any share link. Copy or download every comment, reply and highlighted selection as Markdown, where a suggested edit arrives as a fenced diff block that pastes straight into a ticket or a coding agent. Or export the annotated page as a PNG, which captures the page and the drawings over it.
- Does a comment have a status and an owner?
- Yes. Every comment carries one of five statuses (open, in progress, resolved, approved, dismissed) and one of four priorities (low, medium, high, urgent). You can assign it to a person or to an AI agent, @mention anyone already working on that page, and attach up to four images per comment. Approved is the one status an agent never sets: it is the person who asked for the change confirming the fix.
- Do I need an account to use any of this?
- No. Every feature on this page works with no sign-up, no email and no install, for you and for anyone you send a link to. An optional account exists if you want it: sign in with a magic link and you can claim your links, switch one to view only, set its expiry and see them all in one dashboard. Nothing behind the account costs money, and nothing in front of it is degraded to sell it.
- Does MarkLayer work on more than one page at a time?
- Yes. A share link can hold a project of up to 50 pages, each with its own annotations, switched through a tab strip at the top of the viewer. Add a page by pasting its URL. The Markdown export covers every page in the project in one document, with a section per page.
Read next
Try MarkLayer
Paste any URL at marklayer.app and annotate the live page in your browser. No install, no account, no sign-up. Recipients of your share links don't need to install anything either.
Annotate a page