Processing and recipients
Service delivery and securityEvery requestData: Source IP address, requested host/path, HTTP method and headers, timestamp, response status, and transfer size are processed by Cloudflare to deliver and secure the service.
Why: Deliver pages and app assets, prevent abuse, and maintain availability.
Basis: Legitimate interests in operating a secure and reliable service.
Recipient: Cloudflare, acting primarily as hosting/CDN processor.
Retention: Cloudflare service-log retention follows the contracted service settings; Excalimate does not export these logs for analytics.
Aggregate traffic statisticsEvery request; no client analytics beaconData: Aggregate request counts, bandwidth, HTTP status/error counts, cache performance, and country-level traffic. Excalimate does not use IP-derived unique-visitor counts as anonymous analytics.
Why: Capacity planning, reliability monitoring, and service improvement.
Basis: Legitimate interests; retained reports no longer identify a visitor.
Recipient: Cloudflare edge/zone analytics.
Retention: Raw or exported reports: up to 30 days. Non-identifying aggregate trend reports: indefinitely.
Optional product analyticsOnly after analytics consentData: Only the events and bounded properties listed in the event catalogue, plus a random in-memory session identifier, event timestamp, SDK name/version, and transient network metadata.
Why: Understand feature use and prioritize product improvements.
Basis: Consent.
Recipient: PostHog Cloud EU as processor. IP capture must be disabled in project settings.
Retention: Up to 12 months.
GitHub repository star countWhen the app toolbar loadsData: GitHub receives ordinary request network metadata such as IP address, User-Agent, and Origin. Excalimate requests only public repository metadata.
Why: Display the public repository star count.
Basis: Legitimate interests, subject to the documented ePrivacy assessment.
Recipient: GitHub.
Retention: Determined by GitHub for its network logs. A local one-hour cache is used only with preference-storage consent.
Public feedback portalWhen a visitor opens feedback details, submits feedback, comments, or votesData: Submitted title, description, category, optional display name (or "Anonymous"), comment text, vote state, GitHub issue/comment numbers and timestamps, a random feedback-cookie UUID, and HMAC-derived author/vote tokens. Submitted text and display names are public. GitHub receives only the derived tokens, not the raw cookie UUID.
Why: Publish requested product feedback, attribute the chosen display name, show vote state, and prevent duplicate votes.
Basis: Performance of the requested feedback service and legitimate interests in operating a public product-feedback channel.
Recipient: Cloudflare Worker and GitHub as the public feedback repository host.
Retention: Public submissions, comments, and derived tokens remain until the corresponding GitHub issue or comment is deleted. The feedback identity cookie expires after one year.
Feedback abuse preventionWhen the feedback API handles a requestData: IP address used as a rate-limit key, request origin and headers, Turnstile response token, and a random verification idempotency UUID. The token and IP address are sent to Cloudflare Turnstile; Excalimate does not place them in an application database.
Why: Prevent automated abuse, forged requests, spam, and excessive submissions.
Basis: Legitimate interests in protecting the service and public feedback channel.
Recipient: Cloudflare Workers rate limiting and Cloudflare Turnstile.
Retention: Transient request and rate-limit processing; Cloudflare service logs follow the contracted service settings.
dotLottie runtimeWhen the landing home page loads its animation examplesData: unpkg/Cloudflare receives ordinary resource-request metadata such as IP address, User-Agent, requested pinned asset, and Origin. Referrer transmission is disabled.
Why: Render the animation examples on the landing site.
Basis: Legitimate interests, subject to the documented ePrivacy assessment.
Recipient: unpkg, delivered through Cloudflare.
Retention: Determined by the recipient for its network logs.
Encrypted project sharingOnly when the user selects ShareData: An end-to-end encrypted project blob, random share ID, content length/type, and expiry timestamp. The encryption key remains in the URL hash and is not sent to the server.
Why: Provide a user-requested share link.
Basis: Performance of the requested service.
Recipient: Cloudflare Worker and R2.
Retention: Up to 30 days.
MCP live connectionOnly when the user connectsData: The configured MCP endpoint receives the live-mode requests and scene updates needed for that connection.
Why: Provide the user-requested MCP live workflow.
Basis: Performance of the requested service.
Recipient: The MCP endpoint selected by the user.
Retention: Controlled by that endpoint; Excalimate does not centrally store the connection contents.
Optional analytics events
animation_exported: Understand which export formats need the most support. Properties: format.project_shared: Measure use of encrypted sharing. No custom properties.project_created: Understand common canvas formats. Properties: aspect_ratio.project_saved: Measure use of local project saving. No custom properties.project_loaded: Understand how projects are reopened. Properties: source.excalidraw_imported: Measure import workflows. Properties: source.mode_switched: Understand use of editing and animation modes. Properties: mode.playback_action: Improve animation-preview controls. Properties: action.keyframe_action: Improve keyframe editing. Properties: action.track_action: Improve timeline-track controls. Properties: action.sequence_action: Improve sequence-reveal workflows. Properties: action.camera_action: Improve camera framing controls. Properties: action, ratio.theme_toggled: Understand light and dark theme use. Properties: theme.group_action: Improve grouping workflows without recording project contents. Properties: action, element_count_bucket.mcp_action: Improve optional MCP live-mode setup. Properties: action.landing_page_viewed: Understand which public documentation sections are useful. Properties: page.landing_external_link_clicked: Understand which public resources visitors choose to open. Properties: destination.
Browser storage
excalimate-analytics-consent: Versioned analytics and preference choices with a decision timestamp. Remember privacy choices. (Required)excalimate_feedback_id: A random UUID and HMAC signature in a Secure, HttpOnly, SameSite=Lax cookie with a one-year expiry. Remember feedback authorship and vote state and prevent duplicate votes. (Required only for feedback features)excalidraw-animate-autosave: The current project and animation timeline. Recover the locally edited project. (Required local app data)excalidraw-animate-recent: Up to ten recent local projects. Show the user their recent projects. (Required local app data)excalimate-theme: light or dark. Remember the selected theme. (Optional preference)excalimate-mcp-url: The MCP endpoint entered by the user. Remember the optional live-mode endpoint. (Optional preference)excalimate-gh-stars: Public GitHub star count and one-hour cache timestamp. Avoid repeated GitHub API requests. (Optional preference)
Never included in analytics
- Names, email addresses, account identifiers, or advertising identifiers
- Diagram/project text, shapes, files, names, or encryption keys
- Full URLs, query strings, URL hashes, or referrers
- Typed input, clipboard contents, screenshots, or session replay
- Precise location, cross-site activity, or device fingerprints
Read the complete privacy notice