Skip to content

Storage backends

postgresgithubexternal
Attachments✅ if you implement it
Edit a comment✅ if you implement it
Delete a comment✅ if you implement it
Guest authors (no account)❌ attributed to the app✅ if you implement it
Low-latency reads❌ rate limited❌ your latency
Hard-delete a thread❌ close only✅ if you implement it
Body content on Gutternote serversyesnono

Anchors — page, element, coordinates, status — are stored by Gutternote in all three cases.

postgres

No configuration. The default for new projects.

github

{
"owner": "acme",
"repo": "website",
"installationId": 12345678,
"label": "gutternote"
}

Install the Gutternote GitHub App on the repo. Every thread opens one issue; replies become issue comments. The label is applied to every issue Gutternote opens so you can filter them out of normal triage.

Gutternote embeds an HTML comment in each body carrying the thread ID, the real author and the anchor:

<!-- gutternote:v1 {"thread":"...","author":{...},"anchor":{...}} -->
**Dana Reed** commented via [Gutternote](https://gutternote.com):
The CTA is 4px off.

It’s invisible in GitHub’s rendered view and round-trips through the API unchanged. It is also the weak point of this backend: anyone with write access can corrupt it by editing the comment. Gutternote degrades to showing the raw text rather than dropping the comment, and a reply typed directly in GitHub — which has no marker at all — still appears in the thread, attributed to its GitHub author.

external

{
"endpoint": "https://comments.acme.internal/gutternote",
"signingKeyId": "key_1"
}

See the external store contract.