Title: Add a "Conversation width" setting (Comfortable / Wide / Full) to Appearance · Issue #62 · modelstudioai/openwork · GitHub
Open Graph Title: Add a "Conversation width" setting (Comfortable / Wide / Full) to Appearance · Issue #62 · modelstudioai/openwork
X Title: Add a "Conversation width" setting (Comfortable / Wide / Full) to Appearance · Issue #62 · modelstudioai/openwork
Description: Problem or Motivation OpenWork renders the chat transcript (and the composer) inside a fixed reading width — CHAT_LAYOUT.maxWidth = max-w-[840px] (see packages/ui/src/lib/layout.ts, applied in ChatDisplay.tsx and ChatInputZone.tsx). Ther...
Open Graph Description: Problem or Motivation OpenWork renders the chat transcript (and the composer) inside a fixed reading width — CHAT_LAYOUT.maxWidth = max-w-[840px] (see packages/ui/src/lib/layout.ts, applied in Chat...
X Description: Problem or Motivation OpenWork renders the chat transcript (and the composer) inside a fixed reading width — CHAT_LAYOUT.maxWidth = max-w-[840px] (see packages/ui/src/lib/layout.ts, applied in Chat...
Opengraph URL: https://github.com/modelstudioai/openwork/issues/62
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Add a \"Conversation width\" setting (Comfortable / Wide / Full) to Appearance","articleBody":"## Problem or Motivation\n\nOpenWork renders the chat transcript (and the composer) inside a fixed reading\nwidth — `CHAT_LAYOUT.maxWidth` = `max-w-[840px]` (see `packages/ui/src/lib/layout.ts`,\napplied in `ChatDisplay.tsx` and `ChatInputZone.tsx`). There is **no way for the\nuser to change it**.\n\nOn large / ultrawide desktop displays this leaves most of the window empty, and\nfor code-heavy conversations (wide diffs, long tool output, tables) the 840px\ncolumn forces unnecessary wrapping and horizontal scrolling inside blocks.\n\nComparable desktop clients all expose this as a preference:\n- **Claude Desktop** — \"wider chat\" width control,\n- **ChatGPT desktop** — chat **width** setting,\n- **Codex / VS Code** — editor/content width preferences.\n\nOpenWork's otherwise rich Appearance page (theme, color theme, font, language,\nrich tool descriptions, reduce motion) is missing this one common affordance.\n\n## Proposed Solution\n\nAdd a **\"Conversation width\"** segmented control to **Settings → Appearance →\nInterface**, right below the existing \"Reduce motion\" toggle, with three options:\n\n- **Comfortable** (default) — the current 840px reading column,\n- **Wide** — 1100px, a roomier column for code-heavy chats,\n- **Full** — no max-width, uses the full available panel width.\n\nBehavior:\n- Renderer-only preference persisted in `localStorage`, mirroring the existing\n `ReduceMotionContext` pattern (no backend/qwen-code change).\n- A `ConversationWidthProvider` reflects the choice onto `\u003chtml\u003e` as\n `data-conversation-width` **and** drives a CSS custom property\n `--chat-content-max-width` (`840px` / `1100px` / `none`).\n- The transcript container and the composer read that variable via an inline\n `max-width: var(--chat-content-max-width, 840px)`, so the fallback keeps the\n shared web viewer (`packages/ui` `SessionViewer`) unchanged at 840px.\n\n## Feasibility\n\n**Frontend-only.** Pure renderer/CSS state — the width is a presentation concern\nin `apps/electron/src/renderer`. No qwen-code backend involvement. Follows the\nalready-merged reduce-motion preference precedent (#50 / #51).\n\n## Acceptance criteria (CDP assertion)\n\nA new `e2e/assertions/conversation-width.assert.ts` drives the real UI over CDP\nand asserts, for each of the three options selected from the Appearance page:\n\n1. the segmented control button reports `aria-checked=\"true\"`,\n2. `\u003chtml\u003e` carries the matching `data-conversation-width` value,\n3. the computed CSS custom property `--chat-content-max-width` on `\u003chtml\u003e`\n equals the expected value (`840px` / `1100px` / `none`),\n4. the choice is persisted in `localStorage` under `craft-conversation-width`,\n\ncycling through the options to prove it both applies and reverts.","author":{"url":"https://github.com/DragonnZhang","@type":"Person","name":"DragonnZhang"},"datePublished":"2026-07-06T13:22:39.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/62/openwork/issues/62"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:281177dc-9cda-7d68-2999-e6cde66244ae |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BF9A:16A191:14C3794:1C41336:6A52272B |
| html-safe-nonce | f16e6068cb038d0c88e6a69b888bf8859c66ba2075de0ecd37be9e1aa8e74989 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCRjlBOjE2QTE5MToxNEMzNzk0OjFDNDEzMzY6NkE1MjI3MkIiLCJ2aXNpdG9yX2lkIjoiNzMwMDAyMDkzMjU2Mjc5MDE4NyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | ea27a222ec0a320ea3376db8f3b08f20bb739c728162c1e956b1b9165ccd221e |
| hovercard-subject-tag | issue:4819551091 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/modelstudioai/openwork/62/issue_layout |
| twitter:image | https://opengraph.githubassets.com/6eaecd73d1a282b9a8705bfcbfc5e7fa8fe5145cd731d02eb25b395147b1e5c9/modelstudioai/openwork/issues/62 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/6eaecd73d1a282b9a8705bfcbfc5e7fa8fe5145cd731d02eb25b395147b1e5c9/modelstudioai/openwork/issues/62 |
| og:image:alt | Problem or Motivation OpenWork renders the chat transcript (and the composer) inside a fixed reading width — CHAT_LAYOUT.maxWidth = max-w-[840px] (see packages/ui/src/lib/layout.ts, applied in Chat... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | DragonnZhang |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/modelstudioai/openwork git https://github.com/modelstudioai/openwork.git |
| octolytics-dimension-user_id | 283556804 |
| octolytics-dimension-user_login | modelstudioai |
| octolytics-dimension-repository_id | 1256697754 |
| octolytics-dimension-repository_nwo | modelstudioai/openwork |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1256697754 |
| octolytics-dimension-repository_network_root_nwo | modelstudioai/openwork |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7aed05249554b889eb33d002851a973eebcc7e91 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width