The full context, automatically
Page, screen size and CSS selector come with every note. The React component and its source file come too, when the build exposes them.
Open source · Cloud or self-hosted
Your clients point. Your team fixes.
The Cloud is free during the beta and runs in Europe. On a public site, visitors leave a note with no account.
Without
With Fruitback
How it works
1
Hover the page, or use the arrow keys and Enter. No need to describe where the problem is.
2
It becomes an issue with what a developer needs, and a picture of the element when the site turns that on.
3
Each pin takes the colour of its issue's status. Replies from your team show under the note.
The five stages and their colours. Each site can rename its statuses, recolour them, or add its own on top of these stages.
Product
Page, screen size and CSS selector come with every note. The React component and its source file come too, when the build exposes them.
Come back to the page and see what is new, in progress or done, right where it was reported.
The notes of the page, filtered by stage. The extension's side panel shows the whole site, with the team's replies.
The browser extension, for Chrome and Firefox, adds Fruitback to a client's site that will never install a script.
Add it to Chrome or Edge · Add it to Firefox · Other browsers
Invite a client to the sites you choose. They sign in with an emailed link, comment and follow up, and never see your tracker.
The site can set the colours. Light and dark follow the visitor's system, and the words their browser: English and French included.
Send your client the staging link. They point at what to change, you get clean issues, they see what is done.
Setup for this case
Designers, PMs and QA review the staging site and file bugs where they see them.
Setup for this case
Let visitors flag a broken element on your live site, with the context your developers need to fix it.
Setup for this case
Connectors
Connect a tracker once for the whole workspace. Each site picks where its notes go. The status of a Linear or GitHub issue is read back each time the page loads.
Jira, GitLab, Trello and Notion are not available yet.
Every tracker names its states its own way. Each one lands on one of five stages, and a site can rename, recolour or re-stage them. Linear, by default:
Fruitback posts each note as signed JSON, and keeps it too: your team sets its status in Fruitback.
POST https://hooks.acme.dev/fruitback
X-Fruitback-Signature: sha256=…
{
"version": 2,
"event": "note.created",
"site": { "id": "site_81c2…", "origin": "https://staging.acme.dev" },
"identifier": "FB-12",
"note": {
"text": "Hard to see until you hover it.",
"page": { "url": "https://staging.acme.dev/blends" },
"anchor": { "selector": "div.card:nth-child(2) > button.add" },
"source": {
"component": "AddToCart",
"file": "src/components/Card.tsx",
"line": 42
},
"viewport": { "width": 1440, "height": 900 },
"reporter": { "name": "Camille" }
}
}
Pricing
We run the server in Europe. You sign in, connect your tracker and add a site.
Free during the beta
Create a workspaceOne compose file on your server: the worker, its PostgreSQL and the console.
Free MIT and AGPL-3.0
Read the install guideSelf-hosted, in three commands
$ curl -fsSLO https://raw.githubusercontent.com/sakuga-software/fruitback/main/docker-compose.yml
$ curl -fsSL https://raw.githubusercontent.com/sakuga-software/fruitback/main/.env.example -o .env
$ docker compose up -d --wait
Fill the five lines .env names before the last one. The images are not public on ghcr.io yet:
log in with a token to pull them, as the install guide shows.
The widget lives in its own shadow root. It does not restyle the site, and the site's styles stay out.
Notes land in your tracker or stay in your workspace. Tracker keys are stored encrypted, and the Cloud runs in Europe. Every field, listed.
Usable with the keyboard alone, and checked with axe in light and dark.
Read every line on GitHub. The widget is MIT; the server, the console and the extension are AGPL-3.0.
Not on a public site: a visitor leaves a note with no account, and can add a name. On a site only your team reads, invite the client as a guest: they sign in with a link sent by email.
Use the browser extension, for Chrome and Firefox. It adds Fruitback for the people who switch it on, and nothing changes on the site. It is in beta, on the Chrome Web Store for Chrome and Edge, and on addons.mozilla.org for Firefox. In another browser you load it by hand, as the reviewer's guide shows.
Linear and GitHub Issues, plus any HTTPS endpoint of yours. A site with no tracker keeps its notes in the workspace. Jira, GitLab, Trello and Notion are not available yet.
In your tracker, or in the PostgreSQL of the instance: in Europe for the Cloud, on your server when you host it. Tracker keys are stored encrypted. What the widget collects lists every field.
The script loads with defer, after the page is parsed, and draws in its own shadow root.
The build fails if it grows past 150 kB gzipped.
| Choose a mode | Public, private and team: what the site ships in each, and who may read the pins. Start here. |
| Install the widget | Two lines on a site with no build step, and what each option does. |
| Run Fruitback yourself | From an empty folder to a first pin, then backups, upgrades and every environment variable. |
| Review with the extension | The reviewer’s side: the browser extension, a rule per site, and pairing. |
| Translate the widget | The words a host can replace, and the catalogs the bundle carries. |
| REST connector | The request the Cloud posts for each note, its signature, and what happens when you do not answer. |
| Connect an AI agent | Claude Code or a cloud agent reads, replies and sets a status with a key, and what it cannot stop. |
| What the widget collects | Every field a note carries, where it goes, how long it stays, and how to delete it. |
| Architecture | What the parts are, and the designs that were dropped. |
The source is on GitHub, under the MIT licence for the five published packages and AGPL-3.0-only for the worker, the console and the browser extension. The decisions folder holds the per-ticket histories: the measurements, the first versions that failed, and the reviews that caught them.