From f970cdcf335cb4fb7680b2fc8ce3114e07f43abc Mon Sep 17 00:00:00 2001
From: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>
Date: Mon, 9 Feb 2026 23:38:05 -0800
Subject: [PATCH] Add docs, blog, community pages and polish landing page
layout
- Add docs pages (getting-started, changelog, keyboard-shortcuts)
- Add blog, community, and legal pages (privacy, terms, EULA)
- Add site header, footer, download button, and nav components
- Add sitemap and robots.txt generation
- Narrow main page container (max-w-2xl), fix footer positioning
- Switch README feature list to colon style
---
README.md | 12 +-
web/app/(legal)/eula/page.tsx | 206 ++++++++
web/app/(legal)/layout.tsx | 16 +
web/app/(legal)/privacy-policy/page.tsx | 162 +++++++
web/app/(legal)/terms-of-service/page.tsx | 187 ++++++++
web/app/blog/introducing-cmux/page.tsx | 70 +++
web/app/blog/layout.tsx | 31 ++
web/app/blog/page.tsx | 41 ++
web/app/community/page.tsx | 119 +++++
web/app/components/callout.tsx | 20 +
web/app/components/code-block.tsx | 59 +++
web/app/components/docs-nav-items.ts | 9 +
web/app/components/docs-pager.tsx | 41 ++
web/app/components/docs-sidebar.tsx | 31 ++
web/app/components/download-button.tsx | 22 +
web/app/components/nav-links.tsx | 56 +++
web/app/components/site-header.tsx | 39 ++
web/app/components/spacing-control.tsx | 221 +++++++++
web/app/docs/api/page.tsx | 382 +++++++++++++++
web/app/docs/changelog/page.tsx | 127 +++++
web/app/docs/concepts/page.tsx | 212 +++++++++
web/app/docs/configuration/page.tsx | 127 +++++
web/app/docs/docs-nav.tsx | 137 ++++++
web/app/docs/getting-started/page.tsx | 77 +++
web/app/docs/keyboard-shortcuts/page.tsx | 19 +
web/app/docs/layout.tsx | 30 ++
web/app/docs/notifications/page.tsx | 202 ++++++++
web/app/docs/page.tsx | 5 +
web/app/globals.css | 140 ++++++
web/app/keyboard-shortcuts.tsx | 542 ++++++++++++++--------
web/app/layout.tsx | 12 +-
web/app/page.tsx | 70 ++-
web/app/robots.ts | 8 +
web/app/sitemap.ts | 16 +
web/app/typing.tsx | 56 +--
web/bun.lock | 92 ++++
web/package.json | 4 +-
37 files changed, 3304 insertions(+), 296 deletions(-)
create mode 100644 web/app/(legal)/eula/page.tsx
create mode 100644 web/app/(legal)/layout.tsx
create mode 100644 web/app/(legal)/privacy-policy/page.tsx
create mode 100644 web/app/(legal)/terms-of-service/page.tsx
create mode 100644 web/app/blog/introducing-cmux/page.tsx
create mode 100644 web/app/blog/layout.tsx
create mode 100644 web/app/blog/page.tsx
create mode 100644 web/app/community/page.tsx
create mode 100644 web/app/components/callout.tsx
create mode 100644 web/app/components/code-block.tsx
create mode 100644 web/app/components/docs-nav-items.ts
create mode 100644 web/app/components/docs-pager.tsx
create mode 100644 web/app/components/docs-sidebar.tsx
create mode 100644 web/app/components/download-button.tsx
create mode 100644 web/app/components/nav-links.tsx
create mode 100644 web/app/components/site-header.tsx
create mode 100644 web/app/components/spacing-control.tsx
create mode 100644 web/app/docs/api/page.tsx
create mode 100644 web/app/docs/changelog/page.tsx
create mode 100644 web/app/docs/concepts/page.tsx
create mode 100644 web/app/docs/configuration/page.tsx
create mode 100644 web/app/docs/docs-nav.tsx
create mode 100644 web/app/docs/getting-started/page.tsx
create mode 100644 web/app/docs/keyboard-shortcuts/page.tsx
create mode 100644 web/app/docs/layout.tsx
create mode 100644 web/app/docs/notifications/page.tsx
create mode 100644 web/app/docs/page.tsx
create mode 100644 web/app/robots.ts
create mode 100644 web/app/sitemap.ts
diff --git a/README.md b/README.md
index fc1e4cc5..1e992e4d 100644
--- a/README.md
+++ b/README.md
@@ -13,12 +13,12 @@
## Features
-- **Native macOS app** — Built with Swift and AppKit, not Electron. Fast startup, low memory.
-- **Vertical tabs** — See all your terminals at a glance in a sidebar
-- **Notification panel** — See which agents are waiting for input at a glance
-- **Notification rings** — Tabs flash when AI agents (Claude Code, Codex) need your attention
-- **Lightweight** — Small binary, minimal resource footprint. No bundled browser engine.
-- **GPU-accelerated** — Powered by libghostty for smooth rendering
+: **Native macOS app** — Built with Swift and AppKit, not Electron. Fast startup, low memory.
+: **Vertical tabs** — See all your terminals at a glance in a sidebar
+: **Notification panel** — See which agents are waiting for input at a glance
+: **Notification rings** — Tabs flash when AI agents (Claude Code, Codex) need your attention
+: **Lightweight** — Small binary, minimal resource footprint. No bundled browser engine.
+: **GPU-accelerated** — Powered by libghostty for smooth rendering
## Install
diff --git a/web/app/(legal)/eula/page.tsx b/web/app/(legal)/eula/page.tsx
new file mode 100644
index 00000000..114f32bb
--- /dev/null
+++ b/web/app/(legal)/eula/page.tsx
@@ -0,0 +1,206 @@
+import type { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "EULA — cmux",
+ description: "End-User License Agreement for cmux",
+};
+
+export default function EulaPage() {
+ return (
+ <>
+
End-User License Agreement
+
Last updated: December 2, 2025
+
+
+ Please read this End-User License Agreement carefully before
+ downloading or using cmux.
+
+
+
Interpretation and Definitions
+
For the purposes of this Agreement:
+
+
+ “Agreement” means this End-User License
+ Agreement that forms the entire agreement between You and the Company
+ regarding the use of the Application.
+
+
+ “Application” means the cmux desktop
+ application for macOS, a native terminal application built on Ghostty.
+
+
+ “Company” (referred to as “the
+ Company”, “We”, “Us” or
+ “Our”) refers to Manaflow.
+
+
+ “Content” refers to content such as text,
+ code, images, or other information that can be created, processed, or
+ displayed by the Application.
+
+
+ “Country” refers to the United States.
+
+
+ “Device” means any macOS computer that
+ can run the Application.
+
+
+ “You” means the individual accessing or
+ using the Application.
+
+
+
+
Acknowledgment
+
+ By downloading or using the Application, You are agreeing to be bound
+ by the terms of this Agreement. If You do not agree, do not download or
+ use the Application.
+
+
+ The Application is licensed, not sold, to You by the Company for use
+ strictly in accordance with the terms of this Agreement.
+
+
+
License
+
+
Scope of License
+
+ The Company grants You a revocable, non-exclusive, non-transferable,
+ limited license to download, install and use the Application strictly in
+ accordance with this Agreement, for your personal or internal business
+ purposes including commercial use in connection with software
+ development.
+
+
+
License Restrictions
+
You agree not to, and You will not permit others to:
+
+
+ License, sell, rent, lease, assign, distribute, transmit, host, or
+ otherwise commercially exploit the Application or make it available to
+ any third party
+
+
+ Remove, alter or obscure any proprietary notice (including copyright
+ or trademark) of the Company
+
+
+ Modify, make derivative works of, disassemble, decrypt, reverse
+ compile or reverse engineer any part of the Application
+
+
+
+
Intellectual Property
+
+ The Application, including all copyrights, patents, trademarks, trade
+ secrets and other intellectual property rights, is and shall remain the
+ sole and exclusive property of the Company.
+
+
+ You retain ownership of any code or content you create using the
+ Application.
+
+
+
Modifications and Updates
+
+ The Company reserves the right to modify, suspend or discontinue the
+ Application at any time, with or without notice and without liability to
+ You.
+
+
+ The Company may provide updates, patches, bug fixes, and other
+ modifications. Updates may modify or remove certain features. You agree
+ that all updates are subject to the terms of this Agreement.
+
+
+
Third-Party Services
+
+ The Application integrates with third-party services including Ghostty
+ (terminal rendering engine), Sentry (error tracking), and Sparkle
+ (auto-update framework). You acknowledge that the Company shall not be
+ responsible for any third-party services, including their accuracy,
+ completeness, or quality.
+
+
+
Term and Termination
+
+ This Agreement shall remain in effect until terminated by You or the
+ Company. The Company may terminate this Agreement at any time for any
+ reason.
+
+
+ This Agreement will terminate immediately if you fail to comply with any
+ provision. You may also terminate by deleting the Application and all
+ copies from your Device.
+
+
+ Upon termination, You shall cease all use of the Application and delete
+ all copies from your Device.
+
+
+
No Warranties
+
+ The Application is provided “AS IS” and “AS
+ AVAILABLE” without warranty of any kind. The Company expressly
+ disclaims all warranties, whether express, implied, statutory or
+ otherwise, including all implied warranties of merchantability, fitness
+ for a particular purpose, title and non-infringement.
+
+
+ Some jurisdictions do not allow the exclusion of certain types of
+ warranties, so some of the above exclusions may not apply to You.
+
+
+
Limitation of Liability
+
+ The entire liability of the Company under this Agreement shall be
+ limited to the amount actually paid by You for the Application, or 100
+ USD if You haven’t purchased anything.
+
+
+ To the maximum extent permitted by law, in no event shall the Company
+ be liable for any special, incidental, indirect, or consequential
+ damages whatsoever.
+
+
+
Indemnification
+
+ You agree to indemnify and hold the Company harmless from any claim or
+ demand, including reasonable attorneys’ fees, due to or arising
+ out of your use of the Application or violation of this Agreement.
+
+
+
Severability and Waiver
+
+ If any provision of this Agreement is held to be unenforceable, it will
+ be changed and interpreted to accomplish its objectives to the greatest
+ extent possible, and the remaining provisions will continue in full
+ force and effect.
+
+
+
Governing Law
+
+ The laws of the United States, excluding conflicts of law rules, shall
+ govern this Agreement and your use of the Application.
+
+
+
Changes to This Agreement
+
+ The Company reserves the right to modify this Agreement at any time. If
+ a revision is material, we will provide at least 30 days’ notice.
+ By continuing to use the Application after revisions become effective,
+ You agree to be bound by the revised terms.
+
+ );
+}
diff --git a/web/app/(legal)/privacy-policy/page.tsx b/web/app/(legal)/privacy-policy/page.tsx
new file mode 100644
index 00000000..982b07f6
--- /dev/null
+++ b/web/app/(legal)/privacy-policy/page.tsx
@@ -0,0 +1,162 @@
+import type { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Privacy Policy — cmux",
+ description: "Privacy policy for cmux",
+};
+
+export default function PrivacyPolicyPage() {
+ return (
+ <>
+
Privacy Policy
+
Last updated: December 2, 2025
+
+
+ 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.
+
+
+ For purposes of this policy, “Site” refers to the
+ Company’s website at{" "}
+ cmux.dev.
+ “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.
+
+
+ By using our Service, you accept this Privacy Policy and our{" "}
+ Terms of Service, and you consent to
+ our collection, storage, use and disclosure of your information as
+ described here.
+
+
+
I. Information We Collect
+
+ 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.
+
+
+
1. Information collected via Technology
+
+ The Application may collect the following information automatically:
+
+
+
Crash reports and error diagnostics (via Sentry)
+
Operating system version and application version
+
Anonymous usage patterns
+
+
+ The Application checks for updates via Sparkle, which may transmit your
+ operating system version and application version to our update server.
+
+
+
2. Information you provide directly
+
+ If you contact us via email or our contact page, we collect the
+ information you provide such as your name and email address.
+
+
+
3. Children’s Privacy
+
+ 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{" "}
+ founders@manaflow.com.
+
+
+
II. Third-Party Services
+
+ The Application integrates with the following third-party services:
+
+
+
+ Sentry — error tracking and crash reporting.
+ May collect error logs, stack traces, device information, and OS
+ version.
+
+
+ Sparkle — auto-update framework. Transmits
+ application and OS version to check for updates.
+
+
+ Ghostty / libghostty — terminal rendering
+ engine. Runs entirely locally on your device.
+
+
+
+ Each of these services has its own privacy policy governing the
+ collection and use of your data.
+
+
+
III. How We Use and Share Information
+
+ 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.
+
+
+
IV. How We Protect Information
+
+ 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.
+
+
+
V. Your Rights
+
+ Depending on your location, you may have rights under applicable data
+ protection laws (such as GDPR or CCPA), including:
+
+
+
Right to access a copy of data we hold about you
+
Right to request correction of inaccurate data
+
Right to request deletion of your data
+
Right to data portability
+
Right to restrict or object to processing
+
+
+ To exercise any of these rights, please contact us at{" "}
+ founders@manaflow.com.
+
+
+
VI. Links to Other Websites
+
+ 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.
+
+
+
VII. Changes to This Policy
+
+ 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.
+
+
+
VIII. Contact Us
+
+ If you have any questions regarding this Privacy Policy, please contact
+ us at{" "}
+ founders@manaflow.com.
+
+
+
IX. Data Retention
+
+ 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{" "}
+ founders@manaflow.com.
+
+ >
+ );
+}
diff --git a/web/app/(legal)/terms-of-service/page.tsx b/web/app/(legal)/terms-of-service/page.tsx
new file mode 100644
index 00000000..6a0a72ec
--- /dev/null
+++ b/web/app/(legal)/terms-of-service/page.tsx
@@ -0,0 +1,187 @@
+import type { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "Terms of Service — cmux",
+ description: "Terms of service for cmux",
+};
+
+export default function TermsOfServicePage() {
+ return (
+ <>
+
Terms of Service
+
Last revised on: December 2, 2025
+
+
+ The website located at{" "}
+ cmux.dev (the
+ “Site”) and the cmux desktop application (the
+ “Application”) are copyrighted works belonging to Manaflow
+ (“Company”, “us”, “our”, and
+ “we”). These Terms of Use (these “Terms”) set
+ forth the legally binding terms and conditions that govern your use of
+ the Site and Application.
+
+
+ By accessing or using the Site or Application, you are accepting these
+ Terms and you represent and warrant that you have the right, authority,
+ and capacity to enter into these Terms. You may not access or use the
+ Site or Application if you are not at least 18 years old. If you do not
+ agree with all of the provisions of these Terms, do not access and/or
+ use the Site or Application.
+
+
+
1. License
+
+ Subject to these Terms, Company grants you a non-transferable,
+ non-exclusive, revocable, limited license to use and access the Site and
+ Application for your personal or internal business purposes, including
+ commercial use in connection with your software development activities.
+
+
+
Restrictions
+
The rights granted to you are subject to the following restrictions:
+
+
+ You shall not license, sell, rent, lease, transfer, assign,
+ distribute, host, or otherwise commercially exploit the Application
+
+
+ You shall not modify, make derivative works of, disassemble, reverse
+ compile or reverse engineer any part of the Application
+
+
+ You shall not access the Application in order to build a similar or
+ competitive product
+
+
+
+
Modification
+
+ Company reserves the right, at any time, to modify, suspend, or
+ discontinue the Site or Application with or without notice to you.
+ Company will not be liable to you or any third party for any
+ modification, suspension, or discontinuation.
+
+
+
Ownership
+
+ You acknowledge that all intellectual property rights, including
+ copyrights, patents, trademarks, and trade secrets, in the Application
+ and its content are owned by Company or Company’s suppliers.
+ These Terms do not transfer to you any rights, title or interest in such
+ intellectual property, except for the limited license above. Company and
+ its suppliers reserve all rights not granted in these Terms.
+
+
+
Feedback
+
+ If you provide Company with any feedback or suggestions regarding the
+ Application, you hereby assign to Company all rights in such feedback
+ and agree that Company shall have the right to use such feedback in any
+ manner it deems appropriate.
+
+
+
2. User Content
+
+ You retain full ownership of all code, files, and content you create or
+ process using the Application. The Application runs locally on your
+ device and your content is not transmitted to our servers during normal
+ use.
+
+
+
3. Indemnification
+
+ You agree to indemnify and hold Company (and its officers, employees,
+ and agents) harmless, including costs and attorneys’ fees, from
+ any claim or demand made by any third party due to or arising out of (a)
+ your use of the Application, (b) your violation of these Terms, or (c)
+ your violation of applicable laws or regulations.
+
+
+
4. Third-Party Links
+
+ The Site may contain links to third-party websites and services. Such
+ links are not under the control of Company, and Company is not
+ responsible for them. You use all third-party links at your own risk.
+
+
+
5. Disclaimers
+
+ THE APPLICATION IS PROVIDED ON AN “AS-IS” AND “AS
+ AVAILABLE” BASIS. COMPANY EXPRESSLY DISCLAIMS ANY AND ALL
+ WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS, IMPLIED, OR
+ STATUTORY, INCLUDING ALL WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT.
+
+
+ SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO
+ THE ABOVE EXCLUSION MAY NOT APPLY TO YOU.
+
+
+
6. Limitation on Liability
+
+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL COMPANY BE
+ LIABLE TO YOU OR ANY THIRD PARTY FOR ANY LOST PROFITS, LOST DATA, OR ANY
+ INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL OR PUNITIVE
+ DAMAGES ARISING FROM OR RELATING TO THESE TERMS OR YOUR USE OF THE
+ APPLICATION.
+
+
+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, OUR LIABILITY TO YOU FOR ANY
+ DAMAGES WILL AT ALL TIMES BE LIMITED TO FIFTY US DOLLARS ($50).
+
+
+
7. Term and Termination
+
+ These Terms will remain in effect while you use the Application. We may
+ suspend or terminate your rights at any time for any reason at our sole
+ discretion. Upon termination, you shall cease all use of the Application
+ and delete all copies from your devices.
+
+
+
8. Dispute Resolution
+
+ You agree that any dispute between you and Company relating to the
+ Application or these Terms will be resolved by binding arbitration,
+ rather than in court, except that either party may assert individualized
+ claims in small claims court or seek equitable relief for intellectual
+ property misuse. The arbitration will be conducted by JAMS under their
+ applicable rules.
+
+
+ YOU AND COMPANY WAIVE ANY CONSTITUTIONAL AND STATUTORY RIGHTS TO SUE IN
+ COURT AND HAVE A TRIAL IN FRONT OF A JUDGE OR A JURY.
+
+
+ YOU AND COMPANY AGREE THAT EACH MAY BRING CLAIMS AGAINST THE OTHER ONLY
+ ON AN INDIVIDUAL BASIS AND NOT ON A CLASS, REPRESENTATIVE, OR COLLECTIVE
+ BASIS.
+
+
+ You have the right to opt out of this arbitration agreement by sending
+ written notice to{" "}
+ founders@manaflow.com within 30
+ days of first becoming subject to it.
+
+
+
9. General
+
+ These Terms constitute the entire agreement between you and Company
+ regarding the use of the Application. Our failure to exercise or enforce
+ any right or provision shall not operate as a waiver. If any provision
+ is held to be invalid, the remaining provisions will remain in full
+ force and effect.
+
+ >
+ );
+}
diff --git a/web/app/blog/introducing-cmux/page.tsx b/web/app/blog/introducing-cmux/page.tsx
new file mode 100644
index 00000000..e1f73354
--- /dev/null
+++ b/web/app/blog/introducing-cmux/page.tsx
@@ -0,0 +1,70 @@
+import type { Metadata } from "next";
+import Link from "next/link";
+
+export const metadata: Metadata = {
+ title: "Introducing cmux",
+ description:
+ "A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side.",
+};
+
+export default function IntroducingCmuxPage() {
+ return (
+ <>
+
+
+ ← Back to blog
+
+
+
+
Introducing cmux
+
+
+
+ cmux is a native macOS terminal application built on top of Ghostty,
+ designed from the ground up for developers who run multiple AI coding
+ agents simultaneously.
+
+
+
Why cmux?
+
+ Modern development workflows often involve running several agents at
+ once — Claude Code, Codex, and other tools each in their own
+ terminal. Keeping track of which ones need attention and switching
+ between them quickly is the problem cmux solves.
+
+
+
Key features
+
+
+ Vertical tabs — see all your terminals at a
+ glance in a sidebar
+
+
+ Notification rings — tabs flash when an agent
+ needs your input
+
+
+ Split panes — horizontal and vertical splits
+ within each workspace
+
+
+ Socket API — programmatic control for creating
+ tabs and sending input
+
+
+ GPU-accelerated — powered by libghostty for
+ smooth rendering
+
+
+
+
Get started
+
+ Install cmux via Homebrew or download the DMG from the{" "}
+ getting started guide.
+
+ cmux organizes your terminals in a four-level hierarchy. Understanding
+ these levels helps when using the socket API, CLI, and keyboard
+ shortcuts.
+
+ A macOS window. Open multiple windows with ⌘⇧N. Each
+ window has its own sidebar with independent workspaces.
+
+
+
Workspace
+
+ A sidebar entry. Each workspace contains one or more split panes.
+ Workspaces are what you see listed in the left sidebar.
+
+
+ In the UI and keyboard shortcuts, workspaces are often called
+ “tabs” since they behave like tabs in the sidebar. The
+ socket API and environment variables use the term
+ “workspace”.
+
+ {`# Opacity for unfocused splits (0.0 to 1.0)
+unfocused-split-opacity = 0.7
+
+# Fill color for unfocused splits
+unfocused-split-fill = #1e1e2e
+
+# Divider color between splits
+split-divider-color = #45475a`}
+
+
Behavior
+
+
Scrollback
+ {`# Number of lines to keep in scrollback buffer
+scrollback-limit = 10000`}
+
+
Working directory
+ {`# Default directory for new terminals
+working-directory = ~/Projects`}
+
+
App settings
+
+ In-app settings are available via cmux → Settings (
+ ⌘,):
+
+
+
Theme mode
+
+
+ System — follow macOS appearance
+
+
+ Light — always light mode
+
+
+ Dark — always dark mode
+
+
+
+
Automation mode
+
Control socket access level:
+
+
+ Off — no socket control (most secure)
+
+
+ Notifications only — only allow notification commands
+
+
+ Full control — allow all socket commands
+
+
+
+ On shared machines, consider using “Notifications only” mode
+ to prevent other processes from controlling your terminals.
+
+
+
Example config
+ {`# Font
+font-family = SF Mono
+font-size = 13
+
+# Colors
+theme = One Dark
+
+# Scrollback
+scrollback-limit = 50000
+
+# Splits
+unfocused-split-opacity = 0.85
+split-divider-color = #3e4451
+
+# Working directory
+working-directory = ~/code`}
+ >
+ );
+}
diff --git a/web/app/docs/docs-nav.tsx b/web/app/docs/docs-nav.tsx
new file mode 100644
index 00000000..1e0a69de
--- /dev/null
+++ b/web/app/docs/docs-nav.tsx
@@ -0,0 +1,137 @@
+"use client";
+
+import { useState, useEffect, useRef, useCallback } from "react";
+import { DocsSidebar } from "../components/docs-sidebar";
+import { DocsPager } from "../components/docs-pager";
+
+export function DocsNav({ children }: { children: React.ReactNode }) {
+ const [open, setOpen] = useState(false);
+ const sidebarRef = useRef(null);
+ const buttonRef = useRef(null);
+
+ const close = useCallback(() => {
+ setOpen(false);
+ buttonRef.current?.focus();
+ }, []);
+
+ // Close on Escape
+ useEffect(() => {
+ if (!open) return;
+ const handler = (e: KeyboardEvent) => {
+ if (e.key === "Escape") close();
+ };
+ window.addEventListener("keydown", handler);
+ return () => window.removeEventListener("keydown", handler);
+ }, [open, close]);
+
+ // Trap focus inside sidebar when open on mobile
+ useEffect(() => {
+ if (!open || !sidebarRef.current) return;
+
+ const sidebar = sidebarRef.current;
+ const focusable = sidebar.querySelectorAll(
+ 'a[href], button, [tabindex]:not([tabindex="-1"])'
+ );
+ if (focusable.length === 0) return;
+
+ const first = focusable[0];
+ const last = focusable[focusable.length - 1];
+
+ // Focus first link
+ first.focus();
+
+ const trap = (e: KeyboardEvent) => {
+ if (e.key !== "Tab") return;
+ if (e.shiftKey) {
+ if (document.activeElement === first) {
+ e.preventDefault();
+ last.focus();
+ }
+ } else {
+ if (document.activeElement === last) {
+ e.preventDefault();
+ first.focus();
+ }
+ }
+ };
+
+ sidebar.addEventListener("keydown", trap);
+ return () => sidebar.removeEventListener("keydown", trap);
+ }, [open]);
+
+ // Lock body scroll when open on mobile
+ useEffect(() => {
+ if (!open) return;
+ const mq = window.matchMedia("(min-width: 768px)");
+ if (mq.matches) return; // don't lock on desktop
+ document.body.style.overflow = "hidden";
+ return () => { document.body.style.overflow = ""; };
+ }, [open]);
+
+ return (
+
+ );
+}
diff --git a/web/app/docs/getting-started/page.tsx b/web/app/docs/getting-started/page.tsx
new file mode 100644
index 00000000..3cefd65b
--- /dev/null
+++ b/web/app/docs/getting-started/page.tsx
@@ -0,0 +1,77 @@
+import type { Metadata } from "next";
+import { CodeBlock } from "../../components/code-block";
+import { Callout } from "../../components/callout";
+import { DownloadButton } from "../../components/download-button";
+
+export const metadata: Metadata = {
+ title: "Getting Started",
+ description: "Install and set up cmux on macOS",
+};
+
+export default function GettingStartedPage() {
+ return (
+ <>
+
Getting Started
+
+ cmux is a lightweight, native macOS terminal built on Ghostty for
+ managing multiple AI coding agents. It features vertical tabs, a
+ notification panel, and a socket-based control API.
+
+
+
Install
+
+
DMG (recommended)
+
+
+
+
+ Open the .dmg and drag cmux to your Applications folder.
+ cmux auto-updates via Sparkle, so you only need to download once.
+
+
+
Homebrew
+ {`brew tap manaflow-ai/cmux
+brew install --cask cmux`}
+
To update later:
+ {`brew upgrade --cask cmux`}
+
+
+ On first launch, macOS may ask you to confirm opening an app from an
+ identified developer. Click Open to proceed.
+
+
+
Verify installation
+
Open cmux and you should see:
+
+
A terminal window with a vertical tab sidebar on the left
+
One initial workspace already open
+
The Ghostty-powered terminal ready for input
+
+
+
CLI setup
+
+ cmux includes a command-line tool for automation. Inside cmux terminals
+ it works automatically. To use the CLI from outside cmux, create a
+ symlink:
+
+ cmux checks for updates automatically via Sparkle. When an update is
+ available you'll see an update pill in the titlebar. You can also
+ check manually via cmux → Check for Updates in the menu
+ bar.
+
+
+
Requirements
+
+
macOS 14.0 or later
+
Apple Silicon or Intel Mac
+
+ >
+ );
+}
diff --git a/web/app/docs/keyboard-shortcuts/page.tsx b/web/app/docs/keyboard-shortcuts/page.tsx
new file mode 100644
index 00000000..9995de49
--- /dev/null
+++ b/web/app/docs/keyboard-shortcuts/page.tsx
@@ -0,0 +1,19 @@
+import type { Metadata } from "next";
+import { KeyboardShortcuts } from "../../keyboard-shortcuts";
+
+export const metadata: Metadata = {
+ title: "Keyboard Shortcuts",
+ description: "Complete list of cmux keyboard shortcuts",
+};
+
+export default function KeyboardShortcutsPage() {
+ return (
+ <>
+
Keyboard Shortcuts
+
+ All keyboard shortcuts available in cmux, grouped by category.
+
+ );
+}
diff --git a/web/app/docs/notifications/page.tsx b/web/app/docs/notifications/page.tsx
new file mode 100644
index 00000000..075f2de0
--- /dev/null
+++ b/web/app/docs/notifications/page.tsx
@@ -0,0 +1,202 @@
+import type { Metadata } from "next";
+import { CodeBlock } from "../../components/code-block";
+import { Callout } from "../../components/callout";
+
+export const metadata: Metadata = {
+ title: "Notifications",
+ description: "Desktop notifications in cmux for AI agents and scripts",
+};
+
+export default function NotificationsPage() {
+ return (
+ <>
+
Notifications
+
+ cmux supports desktop notifications, allowing AI agents and scripts to
+ alert you when they need attention.
+
+
+
Lifecycle
+
+
+ Received — notification appears in panel, desktop
+ alert fires (if not suppressed)
+
+
+ Unread — badge shown on workspace tab
+
+
+ Read — cleared when you view that workspace
+
+
+ Cleared — removed from panel
+
+
+
+
Suppression
+
Desktop alerts are suppressed when:
+
+
The cmux window is focused
+
The specific workspace sending the notification is active
+
The notification panel is open
+
+
+
Notification panel
+
+ Press ⌘⇧I to open the notification panel. Click a
+ notification to jump to that workspace. Press ⌘⇧U to jump
+ directly to the workspace with the most recent unread notification.
+
+
+
+ Use OSC 777 for simple notifications. Use OSC 99 when you need subtitles
+ or notification IDs. Use the CLI (cmux notify) for the
+ easiest integration.
+
+
+
Claude Code hooks
+
+ cmux integrates with{" "}
+ Claude Code{" "}
+ via hooks to notify you when tasks complete.
+