Privacy Policy

Last updated: 3 August 2026. Versión en español.

Fluyo is two different things with two different data behaviours, and this policy treats them separately because conflating them would be misleading:

 The editor — fluyo.spaceThe MCP server — mcp.fluyo.space
Does it receive your diagrams? No. They never leave the browser Yes. They travel over the network to the server
Does it store them? Only on your own machine (localStorage) No. Processed in memory, then discarded
When does it apply? Whenever you use the website Only if you connect the remote server to your AI assistant

If you only use the editor at fluyo.space and have never added the remote MCP connector, section B does not apply to you at all: none of your diagrams has ever left your browser.

Who is responsible

Fluyo is an open-source project maintained by itsnect (Claudio Jiménez Flores), based in Chile. It is not an incorporated company, sells nothing, has no customers and processes no payments.

Contact for any privacy matter: nectdnb@gmail.com. Further channels on the support page.

A. The editor at fluyo.space

The editor is a static file site. There is no application server, no database and no API of our own for the browser to call. Everything — drawing, animating, computing layout and encoding the GIF — happens on your machine, using your machine's processor.

Your diagrams

They are not sent anywhere. There is no backend for them to go to. When you click Save, the browser downloads a .fluyo.json file to your disk; when you click Open, it reads one from your disk. Neither involves a network request.

Autosave

The current session is saved to your browser's localStorage, under the key fluyo.autosave.v1. That is local storage on your own machine, not a server: nobody else can read it, and it is erased when you clear site data in your browser.

Product analytics

The public site includes aggregate usage analytics, served by Umami Cloud. No cookies and no fingerprinting, and no user identification.

What is recorded is pageviews plus this closed list of events:

EventWhat accompanies it
example_loadedThe example identifier (one of a fixed list)
file_importedNothing
diagram_exportedThe format: gif, png, jpg or svg
gif_animation_addedThe animation key (one of eight)
present_startedThe document's page count

The content of your diagrams is never sent, neither whole nor in fragments: events carry only values from a closed vocabulary plus one number. There is no free-text field anywhere that one of your labels could slip into.

The analytics script loads only when the domain is fluyo.space or www.fluyo.space. If you clone the repository, open it locally or self-host it, that code never runs and no network call is made. Preview domains are deliberately excluded. The condition lives in js/analytics.js, in a single block, so you can verify it yourself.

If you want zero analytics: run the project locally or self-hosted, or block the cloud.umami.is domain. Fluyo works the same — the analytics code is written to fail silently.

The only external request

The editor loads gif.js from the cdnjs (Cloudflare) CDN; that is the library that encodes the GIF. It is a code download: nothing of yours is sent to it. As with any HTTP request, Cloudflare sees your IP address and user agent while serving the file. It is precached on first visit, so on later visits it is usually not even requested.

B. The MCP server at mcp.fluyo.space

Here is the part that needs saying plainly: the MCP server does receive the content of your diagrams over the network. This is unavoidable — it cannot edit or export a diagram it has not received — and it is the substantive difference from the editor.

This applies only if you have added https://mcp.fluyo.space/mcp as a remote connector in your AI assistant. If you run the server locally over stdio (npx fluyo-mcp), nothing leaves your machine and this section does not apply either.

What is received

How it is used and for how long

It is processed in memory and discarded. Each HTTP request builds a fresh server, handles the message and throws it away. There is no database, no disk, no cache and no sessions: the server is stateless by design, not by configuration. The document exists in the process's memory for as long as the request takes — milliseconds — and disappears with it.

Nothing is persisted. Nothing is shared. Nothing is used to train anything.

What is logged

One line per request, in exactly this shape and nothing more:

{"ts":"2026-08-03T16:20:11.437Z","route":"/mcp","method":"POST",
 "status":200,"outcome":"ok","durationMs":7,
 "requestBytes":220,"responseBytes":472,"tools":["create_diagram"]}

No user data — document, labels, tool arguments, error messages, IP address — is written to the log. The name of the invoked tool is recorded, never its arguments; and if something fails, the log records that it failed and what class of error it was, never the value that caused it.

This does not rest on the discipline of whoever edits the code: the type describing a log line is a closed structure with no field that free text could occupy, and automated tests plant unrepeatable markers in a diagram's labels and fail if those markers appear in any log line. There is no debug mode that lifts these restrictions.

IP addresses and rate limiting

The server limits requests per IP address so that an open endpoint does not become an abuse or billing problem. For that purpose, and only that purpose, it keeps in RAM a record of the IP address and the timestamps of its recent requests.

Authentication

The server asks for no credentials, creates no accounts and issues no tokens. There is nothing of yours on file because there is no sign-up.

Dependencies involved

No dependency was added for the HTTP transport: it uses Node's standard library. The dependency tree is the one already pulled in by the official Model Context Protocol SDK.

Of that whole tree, six packages actually load at runtime: @modelcontextprotocol/sdk, zod, @hono/node-server, ajv, ajv-formats and zod-to-json-schema. None of them persists anything and none of them makes outbound network requests. Their role is limited to routing the message, validating its shape and converting between request representations.

One honest detail: @hono/node-server, the component that adapts the HTTP request, may write connection errors to the console — ECONNRESET and similar, typical of a client that disconnects mid-response. Those messages are socket errors and contain no user data: they carry no document, no labels and no tool arguments.

Hosting platform logs

Both domains — fluyo.space and mcp.fluyo.space — are hosted on Google Cloud, as separate services under the same account. The MCP server specifically runs on Cloud Run.

Like any hosting provider, Google Cloud keeps its own platform logs in Cloud Logging, separate from the MCP server's and outside the control of this project's code. In the case of Cloud Run, the platform writes one log entry per request automatically, before the request reaches our code. Those logs include:

Retention: 7 days. This is not the default — Google Cloud Logging retains 30 days out of the box — but a value set explicitly on the _Default bucket. The exact command that sets it is published in the server's README, so this figure is verifiable rather than a promise.

They do not contain request bodies, so the content of your diagrams does not appear in them.

These logs should not be confused with the application log described above: they are two different things. The application log writes no user data at all, not even the IP address, and that stays true regardless of what happens to platform retention. Platform logs do contain the IP address, which is why they expire after 7 days.

For how Google handles that data as an infrastructure provider, see the Google Cloud privacy notice.

Who the data is shared with

Nobody. It is not sold, not transferred, not used for advertising and not used to train models. There is no profiling and no automated decision-making about people.

The only third parties involved are infrastructure providers, each with a narrow role:

ProviderWhat it seesWhy
Google CloudPlatform logs for both domains (IP, path, status, user agent), retained 7 daysHosting
Umami CloudPageviews and the events listed above, without cookies or identifiersEditor analytics
Cloudflare (cdnjs)The request for the gif.js file: IP and user agentDelivery of the GIF library

None of the three receives the content of your diagrams.

Children

Fluyo is not directed at children under 13 and does not knowingly collect data from them. Since there are no accounts and no sign-up, there is also no profile that could belong to a child.

Your rights

The practical situation is unusual and worth stating as it is: there is no account, no profile and no record of yours to access, rectify or erase, because nothing identifying you is stored.

Verify it yourself

All of the above is checkable: the source of both parts is public and MIT-licensed.

Changes to this policy

If it changes, the date in the header is updated and the change is recorded in the repository's public history, commit by commit. A change that materially affects what data is received will additionally be announced in the repository.

In case of discrepancy between translations, the Spanish version prevails.