diff --git a/.github/social-preview.png b/.github/social-preview.png
new file mode 100644
index 0000000000..6814f479b7
Binary files /dev/null and b/.github/social-preview.png differ
diff --git a/README.md b/README.md
index 4efd2ed963..186c7735e9 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,12 @@
⚙️ libtmux
Drive tmux from Python: typed, object-oriented control over servers, sessions, windows, and panes.
-
+
+
+
+
+
+
diff --git a/assets/README.md b/assets/README.md
new file mode 100644
index 0000000000..6a297c70b6
--- /dev/null
+++ b/assets/README.md
@@ -0,0 +1,14 @@
+# Logo assets
+
+SVG and 512 × 512 transparent PNG artwork from the libtmux logo kit,
+revision `555f60aff5341d8ba59c7466eb9abb537084c98d`.
+
+Library marks use the cog, workspace marks the tiled tmuxp base, and MCP
+marks the Model Context Protocol symbol. Language colors follow
+[GitHub Linguist](https://github.com/github-linguist/linguist/blob/538da05f034fa5c83bd81df128d144e208898da3/lib/linguist/languages.yml).
+The source libtmux and tmuxp artwork belongs to the project owner. The MCP
+symbol comes from the [upstream logo](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/088176704a4e8f20e7f1d237de1de8484aa412fd/docs/logo/light.svg).
+
+Package-specific artwork sits beside its README where the package format
+supports it. `.github/social-preview.png` is the cog sharing card, ready to
+upload under the repository's **Settings → Social preview**.
diff --git a/assets/logo.png b/assets/logo.png
new file mode 100644
index 0000000000..88b6ae9e5e
Binary files /dev/null and b/assets/logo.png differ
diff --git a/assets/logo.svg b/assets/logo.svg
new file mode 100644
index 0000000000..fc6ff5dc96
--- /dev/null
+++ b/assets/logo.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/docs/_static/brand/app-icon-1024-dark.png b/docs/_static/brand/app-icon-1024-dark.png
new file mode 100644
index 0000000000..798eca1075
Binary files /dev/null and b/docs/_static/brand/app-icon-1024-dark.png differ
diff --git a/docs/_static/brand/app-icon-1024-light.png b/docs/_static/brand/app-icon-1024-light.png
new file mode 100644
index 0000000000..132521bfac
Binary files /dev/null and b/docs/_static/brand/app-icon-1024-light.png differ
diff --git a/docs/_static/brand/apple-touch-icon-dark.png b/docs/_static/brand/apple-touch-icon-dark.png
new file mode 100644
index 0000000000..e6c318fe24
Binary files /dev/null and b/docs/_static/brand/apple-touch-icon-dark.png differ
diff --git a/docs/_static/brand/apple-touch-icon-light.png b/docs/_static/brand/apple-touch-icon-light.png
new file mode 100644
index 0000000000..d39af1b33c
Binary files /dev/null and b/docs/_static/brand/apple-touch-icon-light.png differ
diff --git a/docs/_static/brand/browserconfig-dark.xml b/docs/_static/brand/browserconfig-dark.xml
new file mode 100644
index 0000000000..f974f2ec33
--- /dev/null
+++ b/docs/_static/brand/browserconfig-dark.xml
@@ -0,0 +1 @@
+#3572A5
diff --git a/docs/_static/brand/browserconfig.xml b/docs/_static/brand/browserconfig.xml
new file mode 100644
index 0000000000..45900a804b
--- /dev/null
+++ b/docs/_static/brand/browserconfig.xml
@@ -0,0 +1 @@
+#3572A5
diff --git a/docs/_static/brand/favicon.ico b/docs/_static/brand/favicon.ico
new file mode 100644
index 0000000000..ecff6f1f2d
Binary files /dev/null and b/docs/_static/brand/favicon.ico differ
diff --git a/docs/_static/brand/logo-1024.png b/docs/_static/brand/logo-1024.png
new file mode 100644
index 0000000000..49276e7d77
Binary files /dev/null and b/docs/_static/brand/logo-1024.png differ
diff --git a/docs/_static/brand/logo-128.png b/docs/_static/brand/logo-128.png
new file mode 100644
index 0000000000..54f430ad53
Binary files /dev/null and b/docs/_static/brand/logo-128.png differ
diff --git a/docs/_static/brand/logo-144.png b/docs/_static/brand/logo-144.png
new file mode 100644
index 0000000000..ce32153888
Binary files /dev/null and b/docs/_static/brand/logo-144.png differ
diff --git a/docs/_static/brand/logo-152.png b/docs/_static/brand/logo-152.png
new file mode 100644
index 0000000000..fc180c534b
Binary files /dev/null and b/docs/_static/brand/logo-152.png differ
diff --git a/docs/_static/brand/logo-16.png b/docs/_static/brand/logo-16.png
new file mode 100644
index 0000000000..4a3e638add
Binary files /dev/null and b/docs/_static/brand/logo-16.png differ
diff --git a/docs/_static/brand/logo-167.png b/docs/_static/brand/logo-167.png
new file mode 100644
index 0000000000..6c0d38eb89
Binary files /dev/null and b/docs/_static/brand/logo-167.png differ
diff --git a/docs/_static/brand/logo-180.png b/docs/_static/brand/logo-180.png
new file mode 100644
index 0000000000..ebda55dee3
Binary files /dev/null and b/docs/_static/brand/logo-180.png differ
diff --git a/docs/_static/brand/logo-192.png b/docs/_static/brand/logo-192.png
new file mode 100644
index 0000000000..001101dd84
Binary files /dev/null and b/docs/_static/brand/logo-192.png differ
diff --git a/docs/_static/brand/logo-24.png b/docs/_static/brand/logo-24.png
new file mode 100644
index 0000000000..690560368b
Binary files /dev/null and b/docs/_static/brand/logo-24.png differ
diff --git a/docs/_static/brand/logo-256.png b/docs/_static/brand/logo-256.png
new file mode 100644
index 0000000000..b679ee3c9a
Binary files /dev/null and b/docs/_static/brand/logo-256.png differ
diff --git a/docs/_static/brand/logo-32.png b/docs/_static/brand/logo-32.png
new file mode 100644
index 0000000000..12d62df595
Binary files /dev/null and b/docs/_static/brand/logo-32.png differ
diff --git a/docs/_static/brand/logo-384.png b/docs/_static/brand/logo-384.png
new file mode 100644
index 0000000000..344dba3c88
Binary files /dev/null and b/docs/_static/brand/logo-384.png differ
diff --git a/docs/_static/brand/logo-48.png b/docs/_static/brand/logo-48.png
new file mode 100644
index 0000000000..caa73a40a5
Binary files /dev/null and b/docs/_static/brand/logo-48.png differ
diff --git a/docs/_static/brand/logo-512.png b/docs/_static/brand/logo-512.png
new file mode 100644
index 0000000000..88b6ae9e5e
Binary files /dev/null and b/docs/_static/brand/logo-512.png differ
diff --git a/docs/_static/brand/logo-64.png b/docs/_static/brand/logo-64.png
new file mode 100644
index 0000000000..836acf150e
Binary files /dev/null and b/docs/_static/brand/logo-64.png differ
diff --git a/docs/_static/brand/logo-96.png b/docs/_static/brand/logo-96.png
new file mode 100644
index 0000000000..408e70f886
Binary files /dev/null and b/docs/_static/brand/logo-96.png differ
diff --git a/docs/_static/brand/logo.svg b/docs/_static/brand/logo.svg
new file mode 100644
index 0000000000..fc6ff5dc96
--- /dev/null
+++ b/docs/_static/brand/logo.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/docs/_static/brand/maskable-192-dark.png b/docs/_static/brand/maskable-192-dark.png
new file mode 100644
index 0000000000..d43a73de6c
Binary files /dev/null and b/docs/_static/brand/maskable-192-dark.png differ
diff --git a/docs/_static/brand/maskable-192-light.png b/docs/_static/brand/maskable-192-light.png
new file mode 100644
index 0000000000..ff2a539e75
Binary files /dev/null and b/docs/_static/brand/maskable-192-light.png differ
diff --git a/docs/_static/brand/maskable-512-dark.png b/docs/_static/brand/maskable-512-dark.png
new file mode 100644
index 0000000000..b37fbe604c
Binary files /dev/null and b/docs/_static/brand/maskable-512-dark.png differ
diff --git a/docs/_static/brand/maskable-512-light.png b/docs/_static/brand/maskable-512-light.png
new file mode 100644
index 0000000000..204a3e8ebc
Binary files /dev/null and b/docs/_static/brand/maskable-512-light.png differ
diff --git a/docs/_static/brand/mstile-150-dark.png b/docs/_static/brand/mstile-150-dark.png
new file mode 100644
index 0000000000..244e16fccf
Binary files /dev/null and b/docs/_static/brand/mstile-150-dark.png differ
diff --git a/docs/_static/brand/mstile-150-light.png b/docs/_static/brand/mstile-150-light.png
new file mode 100644
index 0000000000..fef6de66a4
Binary files /dev/null and b/docs/_static/brand/mstile-150-light.png differ
diff --git a/docs/_static/brand/mstile-310-dark.png b/docs/_static/brand/mstile-310-dark.png
new file mode 100644
index 0000000000..dae8dfe2b0
Binary files /dev/null and b/docs/_static/brand/mstile-310-dark.png differ
diff --git a/docs/_static/brand/mstile-310-light.png b/docs/_static/brand/mstile-310-light.png
new file mode 100644
index 0000000000..a20f13f543
Binary files /dev/null and b/docs/_static/brand/mstile-310-light.png differ
diff --git a/docs/_static/brand/opengraph-dark.jpg b/docs/_static/brand/opengraph-dark.jpg
new file mode 100644
index 0000000000..e96507d2fb
Binary files /dev/null and b/docs/_static/brand/opengraph-dark.jpg differ
diff --git a/docs/_static/brand/opengraph-dark.png b/docs/_static/brand/opengraph-dark.png
new file mode 100644
index 0000000000..b0b42a4991
Binary files /dev/null and b/docs/_static/brand/opengraph-dark.png differ
diff --git a/docs/_static/brand/opengraph-light.jpg b/docs/_static/brand/opengraph-light.jpg
new file mode 100644
index 0000000000..1736c28e09
Binary files /dev/null and b/docs/_static/brand/opengraph-light.jpg differ
diff --git a/docs/_static/brand/opengraph-light.png b/docs/_static/brand/opengraph-light.png
new file mode 100644
index 0000000000..6814f479b7
Binary files /dev/null and b/docs/_static/brand/opengraph-light.png differ
diff --git a/docs/_static/brand/safari-pinned-tab.svg b/docs/_static/brand/safari-pinned-tab.svg
new file mode 100644
index 0000000000..e13f51ea65
--- /dev/null
+++ b/docs/_static/brand/safari-pinned-tab.svg
@@ -0,0 +1,2 @@
+
+
diff --git a/docs/_static/brand/site-dark.webmanifest b/docs/_static/brand/site-dark.webmanifest
new file mode 100644
index 0000000000..2880459c4f
--- /dev/null
+++ b/docs/_static/brand/site-dark.webmanifest
@@ -0,0 +1,36 @@
+{
+ "name": "libtmux for Python",
+ "short_name": "libtmux",
+ "id": "/",
+ "start_url": "/",
+ "scope": "/",
+ "display": "standalone",
+ "background_color": "#12161D",
+ "theme_color": "#3572A5",
+ "icons": [
+ {
+ "src": "logo-192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "any"
+ },
+ {
+ "src": "maskable-192-dark.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "logo-512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "any"
+ },
+ {
+ "src": "maskable-512-dark.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ]
+}
diff --git a/docs/_static/brand/site.webmanifest b/docs/_static/brand/site.webmanifest
new file mode 100644
index 0000000000..99d56355a6
--- /dev/null
+++ b/docs/_static/brand/site.webmanifest
@@ -0,0 +1,36 @@
+{
+ "name": "libtmux for Python",
+ "short_name": "libtmux",
+ "id": "/",
+ "start_url": "/",
+ "scope": "/",
+ "display": "standalone",
+ "background_color": "#F4F4F1",
+ "theme_color": "#3572A5",
+ "icons": [
+ {
+ "src": "logo-192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "any"
+ },
+ {
+ "src": "maskable-192-light.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "logo-512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "any"
+ },
+ {
+ "src": "maskable-512-light.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ]
+}
diff --git a/docs/_static/brand/social-square-dark.png b/docs/_static/brand/social-square-dark.png
new file mode 100644
index 0000000000..313f8fd420
Binary files /dev/null and b/docs/_static/brand/social-square-dark.png differ
diff --git a/docs/_static/brand/social-square-light.png b/docs/_static/brand/social-square-light.png
new file mode 100644
index 0000000000..e8934c330f
Binary files /dev/null and b/docs/_static/brand/social-square-light.png differ
diff --git a/docs/_static/brand/twitter-dark.png b/docs/_static/brand/twitter-dark.png
new file mode 100644
index 0000000000..8effa4a986
Binary files /dev/null and b/docs/_static/brand/twitter-dark.png differ
diff --git a/docs/_static/brand/twitter-light.png b/docs/_static/brand/twitter-light.png
new file mode 100644
index 0000000000..cf2637da8d
Binary files /dev/null and b/docs/_static/brand/twitter-light.png differ
diff --git a/docs/_static/favicon.ico b/docs/_static/favicon.ico
index d38a0a61dc..ecff6f1f2d 100644
Binary files a/docs/_static/favicon.ico and b/docs/_static/favicon.ico differ
diff --git a/docs/_static/img/libtmux.svg b/docs/_static/img/libtmux.svg
index 30f9423a67..fc6ff5dc96 100644
--- a/docs/_static/img/libtmux.svg
+++ b/docs/_static/img/libtmux.svg
@@ -1,191 +1,2 @@
-
-
-
-
+
+
diff --git a/docs/_templates/page.html b/docs/_templates/page.html
index 312bad2e92..1ad804e8b2 100644
--- a/docs/_templates/page.html
+++ b/docs/_templates/page.html
@@ -35,45 +35,17 @@
}
{%- endif %}
- {%- if theme_show_meta_manifest_tag == true %}
-
- {% endif -%}
- {%- if theme_show_meta_og_tags == true %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {% endif -%}
- {%- if theme_show_meta_app_icon_tags == true %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {% endif -%}
+
+
+
+
+
+
+
+
+
+
+
+
+
{% endblock %}
diff --git a/docs/conf.py b/docs/conf.py
index 379d0b3c6e..18d91a0be1 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -49,6 +49,8 @@
),
},
html_favicon="_static/favicon.ico",
+ ogp_image="_static/brand/opengraph-light.png",
+ ogp_image_alt="libtmux for Python",
html_css_files=["css/custom.css"],
html_extra_path=["manifest.json"],
rediraffe_redirects="redirects.txt",
@@ -56,4 +58,8 @@
# page; keep Sphinx from treating it as an orphan document.
exclude_patterns=["_build", "AGENTS.md", "CLAUDE.md"],
)
+conf["html_context"] = {
+ **conf.get("html_context", {}),
+ "brand_twitter_image": f"{about['__docs__']}/_static/brand/twitter-light.png",
+}
globals().update(conf)
diff --git a/docs/manifest.json b/docs/manifest.json
index 3d370ee74e..3f65099c26 100644
--- a/docs/manifest.json
+++ b/docs/manifest.json
@@ -1,53 +1,30 @@
{
"name": "libtmux",
"short_name": "libtmux",
- "description": "scripting library / orm for tmux",
- "theme_color": "#2196f3",
+ "description": "Typed scripting library / ORM / API wrapper for tmux",
+ "theme_color": "#3572A5",
"background_color": "#fff",
"display": "browser",
- "Scope": "https://libtmux.git-pull.com/",
"start_url": "https://libtmux.git-pull.com/",
"icons": [
{
- "src": "_static/img/icons/icon-72x72.png",
- "sizes": "72x72",
- "type": "image/png"
- },
- {
- "src": "_static/img/icons/icon-96x96.png",
- "sizes": "96x96",
- "type": "image/png"
- },
- {
- "src": "_static/img/icons/icon-128x128.png",
- "sizes": "128x128",
- "type": "image/png"
- },
- {
- "src": "_static/img/icons/icon-144x144.png",
- "sizes": "144x144",
- "type": "image/png"
- },
- {
- "src": "_static/img/icons/icon-152x152.png",
- "sizes": "152x152",
- "type": "image/png"
- },
- {
- "src": "_static/img/icons/icon-192x192.png",
+ "src": "_static/brand/logo-192.png",
"sizes": "192x192",
- "type": "image/png"
+ "type": "image/png",
+ "purpose": "any"
},
{
- "src": "_static/img/icons/icon-384x384.png",
- "sizes": "384x384",
- "type": "image/png"
+ "src": "_static/brand/logo-512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "any"
},
{
- "src": "_static/img/icons/icon-512x512.png",
+ "src": "_static/brand/maskable-512-light.png",
"sizes": "512x512",
- "type": "image/png"
+ "type": "image/png",
+ "purpose": "maskable"
}
],
- "splash_pages": null
+ "scope": "/"
}