Repository navigation
Description
Description
On any window wider than 768px, the session transcript, the composer and the page container are clamped to a fixed 744px column and centered, leaving large empty margins on both sides. There is no setting, no command and no drag handle to change it, so on a large display most of the horizontal space is unusable.
This is not desktop-specific: the width is derived from a media query, so the web UI behaves identically as soon as the window is wider than 768px.
Steps to reproduce
- Open OpenCode Desktop and maximize the window (or open the web UI and widen the window past 768px).
- Open or create any session.
- Observe that the message column, the composer and the session header stay in a 744px column centered in the window, with the remaining width left empty on both sides.
- Look for any way to widen it — there is none in Settings, in the command palette, or by dragging.
Environment
- UI: OpenCode Desktop 2.0.32 (Windows 11)
- Also reproducible on the web UI at any window width > 768px
- Verified against current
devsource (ba06ff9e0b)
Root cause (verified on current dev)
The clamp is driven by a media query rather than by any user preference:
// packages/app/src/session/model.ts:29
const isDesktop = createMediaQuery("(min-width: 768px)")// packages/app/src/session/screen-layout.ts:106
centered: createMemo(() => session.isDesktop()),centered then switches a Tailwind max-w-session utility on:
// packages/app/src/session/timeline/message-timeline.tsx:406
"md:max-w-session md:mx-auto": props.centered,/* packages/ui/src/styles/tailwind/index.css:53 */
--container-session: 744px;The constant is consumed in seven places (line numbers as of ba06ff9e0b):
| File | Line | Consumer |
|---|---|---|
packages/app/src/session/timeline/message-timeline.tsx |
406 | message column |
packages/app/src/session/composer/session-composer-region.tsx |
34 | composer |
packages/app/src/session/route.tsx |
71 | session page container |
packages/app/src/session/preparing-composer.tsx |
50 | loading-state composer |
packages/app/src/composer/dropzone.tsx |
55 | drag overlay |
packages/session-ui/src/timeline/session-timeline-row.tsx |
480 | row wrapper (session-ui package) |
packages/app/src/new-session/layout.ts |
2 | new-session page (separate hardcoded 880px, not this constant) |
Because centered is derived purely from the viewport, there is no code path a user or config can influence.
Impact
On a 2560px-wide window roughly 1070px per side is unused. For long transcripts this means more scrolling for the same content, and code or diff blocks wrap earlier than they need to.
I understand 744px is a deliberate comfortable-reading width, so this issue is not asking to change the default.
Suggested direction
Keep --container-session: 744px as the default, but let it be overridden per user:
- persist a width preference (e.g. localStorage, consistent with other UI preferences) and set
--container-sessionfrom it, so all seven consumers follow automatically; - add a drag handle on the session column edges (double-click to reset to the default);
- surface the current width plus a "reset to default" affordance in Settings, so the value is discoverable rather than only reachable by dragging;
- keep narrow viewports (< 768px) on the existing full-width behaviour.
The new-session page has its own hardcoded 880px in packages/app/src/new-session/layout.ts:2; leaving it out of scope for now, but flagging it since it has the same limitation.
Screenshots
Not attached — the reproduction above and the root-cause analysis are self-contained. A before/after pair will be attached to the PR.
Activity
opencode-agent commentedon Oct 19, 2026
Thanks for the detailed write-up and for tracing where the width comes from.
I think this is a duplicate of #53382. It asks for the same thing for Desktop/Web: drag either edge of the session column to resize the timeline and composer together, save the width, keep the current default until you change it, and reset it easily. Possible duplicates and related issues, ordered from most to least likely:
Your idea of showing the current width with a "reset to default" button in Settings would be a useful addition on #53382, and the hardcoded
880pxon the new-session page is worth mentioning there too.The bot will close this issue as a duplicate in 1 day unless you reply explaining how your request is different.
hril3 commentedon Oct 19, 2026
Confirming the duplicate call is right — closing this one in favour of #53382, which already carries the request.
The root-cause trace (media-query-derived
centered→--container-session: 744px, and the seven consumers of the constant) is posted there, along with the two points the triage bot flagged: the Settings affordance for the current width, and the separate hardcoded880pxon the new-session page.Environment when this was filed: OpenCode Desktop 2.0.32 on Windows 11, also reproducible on the web UI above 768px.
hril3 commentedon Oct 19, 2026
Duplicate of #53382. Root-cause trace and the two follow-up points (Settings affordance, new-session 880px) posted there.
opencode-agent commentedon Oct 19, 2026
Thanks for confirming, and for moving the root-cause trace, the Settings idea and the
880pxnew-session note over to #53382. Follow that issue for updates. This one will be closed as a duplicate.opencode-agent commentedon Oct 20, 2026
Closing as a duplicate of #53382, as agreed. That issue covers the same request: a resizable session column with a saved width and a reset. Your root-cause trace, the Settings idea and the hardcoded
880pxon the new-session page are now there too. #54800 is also related. Thanks again for the detailed report.