AFFiNE: 2,423 Pages Carry the Name, One Body Match, and Zero Hosts on the Port Its Self-Hosting Guide Uses
AFFiNE combines documents, whiteboards and tables in one workspace tool. It is open source, local-first, and positioned as an alternative to a note app plus a diagramming tool. It can be self-hosted, and the project supports running it in a container.
Measured on 26 October 2026, its public footprint is text-only. Two thousand four hundred and twenty-three pages carry "AFFiNE" in the title. One page body matches the string. No application fingerprint exists, and no host answers on port 3010, the conventional port for the self-hosted stack.
Why the name is hostile to search
"AFFiNE" is close to the English word "affine", a term from geometry and from machine learning. It is also written with an unusual capitalisation that search engines and pattern queries normalise away. A query for the string will collect mathematical content, ML papers, and product pages, and the dataset cannot separate them by case.
That makes the 2,423 a count of pages containing a word-like token. The mathematical and machine-learning literature is vast, and a title containing "affine" is a poor predictor of a workspace deployment.
body="affine" returning one is therefore surprising in the other direction. If the body field indexed the same pages the title field matched, the body count should be large. It is not, which suggests the body match runs against a different and much narrower set of responses, or that the pages returned for the title query are being served in a way the body index does not capture.
The measurements
Collected through the ZoomEye SDK on 26 October 2026 between 16:35 and 16:42 UTC, each value from one query's total.
| Query | Total |
|---|---|
| app="AFFiNE" | 0 |
| title="AFFiNE" | 2,423 |
| body="affine" | 1 |
| title="AFFiNE" && port=3010 | 0 |
The last row carries the operational signal. AFFiNE's self-hosting documentation describes a container-based deployment, and 3010 is the port the stack conventionally binds. Zero matches on that intersection means that in this dataset, no page carrying the name answers on the port a self-hosted instance would use.
What that zero does and does not say
It does not say that no self-hosted AFFiNE exists. It says that the combination of the name in a page title and that specific port produced no asset. A deployment behind a reverse proxy on 443 would not appear in that intersection, and a deployment that publishes a different port would not either.
It does say that self-hosted AFFiNE is not a large, carelessly exposed population in the way that, for example, an admin panel with a well-known default port often is. The port is not one that general scanning covers densely, and the name is not one that a page title surfaces cleanly.
For a defence team the implication is benign. A self-hosted AFFiNE instance behind a proxy is invisible to this kind of measurement, and that is the deployment the documentation recommends.
Why a local-first product has a different risk shape
AFFiNE stores workspace content locally and synchronises it. That architecture changes what a server compromise means. The server holds shared workspaces, user accounts and any attachments that were synced, rather than the only copy of everything.
The relevant controls are therefore about access to the synchronisation service and about who can join a workspace rather than about a public landing page. A workspace tool that allows open sign-ups on a public address is a place where an outsider can create an account and see what default permissions allow, which is the failure mode worth checking for in this class of software.
None of that is visible in a scan. The scan can only report that the product is not served on its conventional port in any page that names it.
The counting lesson from a name collision
This product is the clearest case in this series of a name that cannot be counted by string. The overlap between "affine" as a mathematical adjective and AFFiNE as a product name is total in a case-insensitive match, and the strict equality operator would be the right tool if the dataset indexed titles for exact matching.
The practical alternative, when a name is ambiguous, is to measure the deployment rather than the product: pick the port, the path or the response header that the software actually produces, and count that. If none of those are distinctive, the honest output is a note that this product is not measurable from public scan data at this time.
Conclusion
2,423 title matches, one body match, zero fingerprints and zero hosts on the conventional self-hosting port. Every figure in that sentence is accurate and almost none of it describes AFFiNE deployments. The correct conclusion is that the name is unmeasurable and the deployment is invisible, a report that said anything else about the population would invent the difference.
References
- AFFiNE project repository: https://github.com/toeverything/AFFiNE
- ZoomEye search interface, used for all counts in this article: https://www.zoomeye.org/
Top comments (0)