* Add i18n framework with next-intl for 19 languages
Set up complete internationalization infrastructure:
- Install next-intl v4 with App Router support
- Create i18n config (routing, request, navigation)
- Add middleware for automatic locale detection from Accept-Language
- Restructure all routes under app/[locale]/
- Extract UI strings to messages/en.json
- Update all components to use useTranslations()
- Add language switcher dropdown in footer
- Support RTL for Arabic and Khmer
- Update sitemap with locale alternates
- Add generateStaticParams for all 19 locales
Languages: en, ja, zh-CN, zh-TW, ko, de, es, fr, it, da, pl, ru, bs, ar, no, pt-BR, th, tr, km
Locale detection: auto-detect from browser Accept-Language header,
with cookie persistence and locale prefix only for non-default (en).
* Add translations for de, fr, it, ja, zh-CN, zh-TW
* Add translations for ar, bs, da, es, km, no, pl, pt-BR, ru, th, tr
* Convert docs and legal pages to use useTranslations()
* Add i18n to keyboard shortcuts component
* Add i18n to wall-of-love, add missing blog posts to sitemap
* Add keyboard shortcuts and wallOfLove translations to all locales
* Update bun lockfile for next-intl dependency
* Fix t.rich() configPath: pass ReactNode not function for {var} interpolation
* Fix configPath: use rich text tag instead of plain interpolation for ReactNode
* Fix t.rich() interpolation: use rich text tags for all ReactNode placeholders
Changed {legacy}, {openShortcut}, {jumpShortcut} from plain variable
interpolation to <tag>content</tag> format so t.rich() gets proper
functions instead of values.
* Escape ICU curly braces in socketCallout rich text across all locales
* Fix i18n issues: Khmer RTL, zh-CN quality, locale-aware testimonials, hardcoded strings
- Fix Khmer (km) incorrectly marked as RTL (it's LTR, only Arabic is RTL)
- Fix zh-CN/zh-TW taglinePrefix to mention terminals and open source
- Add locale-aware testimonial translations: show original text, translate
for non-matching locales, skip translation when locale matches original
- Translate hardcoded English table content in notifications page
- Add testimonial translations to all 19 locale files
- Remove unused setRequestLocale import and params from home page
* Address PR review comments: metadata localization, blog fixes, legal pages, accessibility
- Convert hardcoded metadata to generateMetadata with getTranslations on all docs, blog, community, and wall-of-love pages
- Fix blog canonical/OG URLs to be locale-aware
- Fix introducing-cmux .split(": ") by using separate label/desc translation keys
- Revert legal page titles to English (legal content stays English-only)
- Add focus-visible ring to language switcher for keyboard accessibility
- Preserve query string and hash when switching locale
- Convert site-footer to server component (remove unnecessary "use client")
- Remove .toLowerCase() on translated text in community page
- Add /docs/browser-automation and /wall-of-love to sitemap
- Fix keyboard-shortcuts jump link visibility with trimmed query
- Deduplicate blogSlugs by importing from blog-posts.ts
- Add typingCodingAgents/typingMultitasking translation keys to all locales
- Fix Spanish accent/tilde issues in es.json testimonials
- Fix nested <a> tag in homepage keyboard shortcuts feature
- Remove unused setRequestLocale import from homepage
* Convert remaining layout/index metadata to generateMetadata
- Root layout: locale-aware title, description, OG, and Twitter card metadata
- Docs layout: translated title template
- Blog layout: translated title template
- Blog index: locale-aware metadata
* Add translated metadata keys to all locales, fix docs redirect
- Add meta.title/description/ogDescription to all 18 non-English locales
- Add docs.layoutTitle, blog.layoutTitle/metaTitle/metaDescription to all locales
- Add blog post metadata (zenOfCmux, cmdShiftU, showHnLaunch, introducingCmux) to all locales
- Add community.metaTitle/metaDescription to all locales
- Fix docs index redirect to preserve locale prefix
* Add translated docs page metaTitle keys to all locales
163 lines
6.2 KiB
TypeScript
163 lines
6.2 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { Link } from "../../../../i18n/navigation";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Privacy Policy — cmux",
|
|
description: "Privacy policy for cmux",
|
|
};
|
|
|
|
export default function PrivacyPolicyPage() {
|
|
return (
|
|
<>
|
|
<h1>Privacy Policy</h1>
|
|
<p>Last updated: December 2, 2025</p>
|
|
|
|
<p>
|
|
Manaflow (the “Company”) is committed to maintaining robust
|
|
privacy protections for its users. This Privacy Policy is designed to
|
|
help you understand how we collect, use and safeguard the information you
|
|
provide to us.
|
|
</p>
|
|
<p>
|
|
For purposes of this policy, “Site” refers to the
|
|
Company’s website at{" "}
|
|
<a href="https://cmux.dev">cmux.dev</a>.
|
|
“Application” refers to the cmux desktop application for
|
|
macOS. “Service” refers to the Site and Application
|
|
collectively. The terms “we,” “us,” and
|
|
“our” refer to the Company. “You” refers to
|
|
you, as a user of our Service.
|
|
</p>
|
|
<p>
|
|
By using our Service, you accept this Privacy Policy and our{" "}
|
|
<Link href="/terms-of-service">Terms of Service</Link>, and you consent to
|
|
our collection, storage, use and disclosure of your information as
|
|
described here.
|
|
</p>
|
|
|
|
<h2>I. Information We Collect</h2>
|
|
<p>
|
|
We collect “Non-Personal Information” and “Personal
|
|
Information.” Non-Personal Information includes information that
|
|
cannot be used to personally identify you, such as anonymous usage data,
|
|
platform types, and crash diagnostics. Personal Information includes
|
|
your email address if you choose to contact us.
|
|
</p>
|
|
|
|
<h3>1. Information collected via Technology</h3>
|
|
<p>
|
|
The Application may collect the following information automatically:
|
|
</p>
|
|
<ul>
|
|
<li>Crash reports and error diagnostics (via Sentry)</li>
|
|
<li>Operating system version and application version</li>
|
|
<li>Anonymous usage patterns</li>
|
|
</ul>
|
|
<p>
|
|
The Application checks for updates via Sparkle, which may transmit your
|
|
operating system version and application version to our update server.
|
|
</p>
|
|
|
|
<h3>2. Information you provide directly</h3>
|
|
<p>
|
|
If you contact us via email or our contact page, we collect the
|
|
information you provide such as your name and email address.
|
|
</p>
|
|
|
|
<h3>3. Children’s Privacy</h3>
|
|
<p>
|
|
The Service is not directed to anyone under the age of 13. We do not
|
|
knowingly collect information from anyone under 13. If you believe we
|
|
have collected such information, please contact us at{" "}
|
|
<a href="mailto:founders@manaflow.com">founders@manaflow.com</a>.
|
|
</p>
|
|
|
|
<h2>II. Third-Party Services</h2>
|
|
<p>
|
|
The Application integrates with the following third-party services:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<strong>Sentry</strong> — error tracking and crash reporting.
|
|
May collect error logs, stack traces, device information, and OS
|
|
version.
|
|
</li>
|
|
<li>
|
|
<strong>Sparkle</strong> — auto-update framework. Transmits
|
|
application and OS version to check for updates.
|
|
</li>
|
|
<li>
|
|
<strong>Ghostty / libghostty</strong> — terminal rendering
|
|
engine. Runs entirely locally on your device.
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
Each of these services has its own privacy policy governing the
|
|
collection and use of your data.
|
|
</p>
|
|
|
|
<h2>III. How We Use and Share Information</h2>
|
|
<p>
|
|
We do not sell, trade, rent or otherwise share your Personal Information
|
|
with third parties for marketing purposes. We use crash reports and
|
|
diagnostics solely to improve the Application. We may share information
|
|
if we have a good-faith belief that disclosure is necessary to meet
|
|
legal process or protect against harm.
|
|
</p>
|
|
|
|
<h2>IV. How We Protect Information</h2>
|
|
<p>
|
|
We implement security measures designed to protect your information from
|
|
unauthorized access, including encryption and secure server software.
|
|
However, no method of transmission or storage is 100% secure. By using
|
|
our Service, you acknowledge and agree to assume these risks.
|
|
</p>
|
|
|
|
<h2>V. Your Rights</h2>
|
|
<p>
|
|
Depending on your location, you may have rights under applicable data
|
|
protection laws (such as GDPR or CCPA), including:
|
|
</p>
|
|
<ul>
|
|
<li>Right to access a copy of data we hold about you</li>
|
|
<li>Right to request correction of inaccurate data</li>
|
|
<li>Right to request deletion of your data</li>
|
|
<li>Right to data portability</li>
|
|
<li>Right to restrict or object to processing</li>
|
|
</ul>
|
|
<p>
|
|
To exercise any of these rights, please contact us at{" "}
|
|
<a href="mailto:founders@manaflow.com">founders@manaflow.com</a>.
|
|
</p>
|
|
|
|
<h2>VI. Links to Other Websites</h2>
|
|
<p>
|
|
The Service may provide links to third-party websites. We are not
|
|
responsible for the privacy practices of those websites. This Privacy
|
|
Policy applies solely to information collected by us.
|
|
</p>
|
|
|
|
<h2>VII. Changes to This Policy</h2>
|
|
<p>
|
|
We reserve the right to change this policy at any time. Significant
|
|
changes will go into effect 30 days following notification. You should
|
|
periodically check the Site for updates.
|
|
</p>
|
|
|
|
<h2>VIII. Contact Us</h2>
|
|
<p>
|
|
If you have any questions regarding this Privacy Policy, please contact
|
|
us at{" "}
|
|
<a href="mailto:founders@manaflow.com">founders@manaflow.com</a>.
|
|
</p>
|
|
|
|
<h2>IX. Data Retention</h2>
|
|
<p>
|
|
Crash reports and diagnostics are retained only as long as needed to
|
|
diagnose and fix issues. You may request deletion of any data associated
|
|
with you by contacting us at{" "}
|
|
<a href="mailto:founders@manaflow.com">founders@manaflow.com</a>.
|
|
</p>
|
|
</>
|
|
);
|
|
}
|