Privacy Policy
Summary: MiutChat collects no personal data, stores no message content, and requires no account. Your encryption key never leaves your device. When you leave a room, all data is permanently deleted. We cannot read your messages — by design.
1. Who We Are
MiutChat ("we", "us", "our") is an open-source anonymous encrypted chat application available at miutchat.pages.dev. MiutChat is operated as a free, open-source project. There is no company, no registered legal entity, and no commercial relationship with users.
By using MiutChat you agree to this Privacy Policy. If you do not agree, please do not use the service.
2. Information We Collect (and Don't)
What we do NOT collect
- Names, email addresses, phone numbers, or any personal identifiers
- Passwords (there are none)
- IP addresses (we never log or store these)
- Message content (all messages are encrypted client-side before reaching our servers)
- Device identifiers, advertising IDs, or fingerprints
- Location data
- Browsing history
- Payment information (the service is free)
What is stored (temporarily, in Firestore)
- Encrypted ciphertext: Your messages are encrypted in your browser before transmission. We store the ciphertext only. We cannot decrypt it.
- Anonymous session UID: Firebase Anonymous Authentication assigns a random UUID to your session. This is not linked to any personal identity.
- Public signing key: An ECDSA P-256 public key used to verify message authenticity. The private key never leaves your device.
- Online status: A boolean
online: true/falseper session, used to determine when to wipe empty rooms. - Chosen display name: If you enter a name (optional), it is stored in the room's member document alongside your messages. Defaults to an anonymous callsign (e.g. "DARK FOX44").
All of the above is permanently and irrecoverably deleted when the last member leaves a room. A Firestore transaction ensures no partial data remains.
3. How Encryption Works
MiutChat uses the browser's native Web Crypto API. No third-party encryption library is involved.
- Message encryption: AES-256-GCM. Every message gets a unique 96-bit random IV (initialization vector).
- Key derivation: PBKDF2 with SHA-256, 100,000 iterations, using your room code as the password and a 16-byte cryptographically random salt per room.
- Message signing: ECDSA P-256. Each message is signed with a per-device private key stored in IndexedDB. The corresponding public key is stored in Firestore to allow other members to verify signatures.
- Forward secrecy: The encryption epoch rotates every 200 messages (or when an admin manually rotates). Each epoch uses a freshly derived key. Old keys cannot decrypt new messages.
- Room code as key: Your room code is the shared secret. Anyone who knows it can join and decrypt messages. Choose a strong code (6+ chars, mixed case, numbers, symbols). Never share it over insecure channels.
4. Firebase & Third Parties
MiutChat uses Firebase (by Google) as its backend infrastructure. Firebase's applicable services are:
- Cloud Firestore: Stores encrypted ciphertext, public keys, and ephemeral presence data. Subject to Google Firebase's Privacy Policy.
- Firebase Anonymous Authentication: Assigns a random UID to your session. No email, phone, or identity required. Google may retain anonymized auth logs per their policy.
- Firebase App Check (reCAPTCHA v3): Used to prevent automated abuse. reCAPTCHA v3 runs invisibly and Google may collect signals per their Privacy Policy.
We use no advertising networks, analytics platforms, social SDKs, tracking pixels, or other third-party services. Font loading uses Google Fonts (Space Mono, Syne) which may log your IP per Google's policy.
5. Data Storage & Retention
All Firestore data (encrypted messages, member records, room metadata) is automatically and permanently deleted when the last approved member leaves a room. This deletion is performed by a Firestore transaction that cannot be undone.
Your device stores the following locally (in browser localStorage and IndexedDB):
- Your session state (anonymous UID, display name, room code) — cleared on "Leave Room"
- Your ECDSA private signing key (IndexedDB) — persists across sessions so your signature remains consistent
- Cached encrypted messages (IndexedDB) — for offline access; never decrypted server-side
- User preferences (sound, animations) — stored in localStorage
You can clear all local data by clicking "Leave Room", clearing your browser's site data, or uninstalling the PWA.
6. Your Rights
Because we collect no personal data linked to any identity, traditional GDPR "data subject rights" (access, rectification, erasure) do not meaningfully apply — there is no personal data to access or erase on our end.
However:
- Erasure: Leaving a room triggers automatic deletion of all associated Firestore data. Clearing browser site data removes all local storage.
- Portability: Your encrypted message cache is stored locally in your browser's IndexedDB. You can export it via browser developer tools.
- Objection: You may stop using MiutChat at any time. All data is erased on next room close.
For questions, contact us via GitHub Issues at github.com/debguin1-alt/MiutChat.
7. Security
MiutChat is designed with security as a primary constraint, not an afterthought:
- All messages are encrypted before leaving your device (client-side, not server-side)
- Message signatures use ECDSA P-256 — tampered messages are automatically rejected
- Replay attack detection: every Firestore document ID is registered; duplicates are flagged
- Rate limiting: both client-side (token bucket) and edge-side (Cloudflare Workers KV) rate limits prevent abuse
- Firestore Security Rules: server-side rules enforce that only approved members can read/write room data
- App Check (reCAPTCHA v3): prevents automated bot access to the Firestore API
- Content Security Policy: enforced via HTTP headers to prevent XSS
Despite these measures, no system is 100% secure. Do not use MiutChat for communications where your life or safety depends on secrecy. For high-stakes communications, use Signal.
8. Children's Privacy
MiutChat is not directed at children under the age of 13 (or 16 in the EU/UK). We do not knowingly collect data from children. Because we collect no personal data from anyone, we cannot verify age. If you are under 13, please do not use MiutChat.
9. Changes to This Policy
We may update this Privacy Policy periodically. Material changes will be announced via the GitHub repository. Continued use of MiutChat after changes constitutes acceptance of the updated policy. The effective date at the top of this page reflects the latest revision.
10. Contact
MiutChat is an open-source project. For privacy concerns, security disclosures, or general questions, please open an issue at:
https://github.com/debguin1-alt/MiutChat/issues
11. Terms of Service
By using MiutChat, you agree to the following terms:
Acceptable Use
You agree not to use MiutChat to:
- Share illegal content, including but not limited to CSAM, content that incites violence, or content that violates applicable law
- Harass, threaten, or abuse other users
- Attempt to reverse-engineer, circumvent, or exploit the encryption or security mechanisms
- Use automated scripts, bots, or tools to abuse the service or exhaust rate limits
- Impersonate others
- Use the service for activities that violate the laws of your jurisdiction
Disclaimer of Warranties
MiutChat is provided "as is" without warranty of any kind, express or implied. We make no guarantees of uptime, data integrity, or fitness for any particular purpose. Use at your own risk.
Limitation of Liability
To the maximum extent permitted by law, MiutChat and its operators shall not be liable for any direct, indirect, incidental, special, or consequential damages arising from use of the service.
Termination
We reserve the right to terminate or restrict access to the service at any time, for any reason, without notice — particularly in cases of abuse or illegal activity.
Governing Law
These terms shall be governed by and construed in accordance with applicable law in the jurisdiction where the service operator resides.
12. Cookie Policy
MiutChat does not use cookies. We do not set, read, or rely on HTTP cookies for any functionality.
We use localStorage and IndexedDB (browser storage APIs) for:
- Session state (your anonymous UID and room code, so you can rejoin after refresh)
- User preferences (sound alerts, animations)
- Your ECDSA signing key
- Cached encrypted messages for offline access
None of this data is transmitted to us or any third party, except the anonymous UID which is used to authenticate your Firestore session with Firebase.
Google Fonts (used for typography) may set cookies per Google's policy. You can block these via your browser settings or ad blocker without affecting MiutChat functionality.
13. About MiutChat
MiutChat was created as a privacy-first alternative to mainstream chat applications that track, profile, and monetize users. The core belief is that your conversations are yours alone — no company should have access to them.
The app is built with:
- Vanilla JavaScript (no framework), HTML5, CSS3
- Firebase Firestore (ephemeral backend) + Firebase Anonymous Auth
- Web Crypto API (native browser encryption — no third-party crypto library)
- Cloudflare Pages (hosting) + Cloudflare Workers (edge rate limiting)
- Progressive Web App (installable, offline-capable)
The source code is open and available at github.com/debguin1-alt/MiutChat. Contributions, bug reports, and security disclosures are welcome.