Skip to content

app: session content locked to 744px on wide windows - no way to use the remaining width #56953

Closed as duplicate

Description

@hril3

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

  1. Open OpenCode Desktop and maximize the window (or open the web UI and widen the window past 768px).
  2. Open or create any session.
  3. 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.
  4. 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 dev source (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:

  1. persist a width preference (e.g. localStorage, consistent with other UI preferences) and set --container-session from it, so all seven consumers follow automatically;
  2. add a drag handle on the session column edges (double-click to reset to the default);
  3. surface the current width plus a "reset to default" affordance in Settings, so the value is discoverable rather than only reachable by dragging;
  4. 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

  1. opencode-agent commented on Oct 19, 2026

    @opencode-agent
    Contributor

    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 880px on 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.

  2. hril3 commented on Oct 19, 2026

    @hril3
    Author

    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 hardcoded 880px on 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.

  3. hril3 commented on Oct 19, 2026

    @hril3
    Author

    Duplicate of #53382. Root-cause trace and the two follow-up points (Settings affordance, new-session 880px) posted there.

  4. opencode-agent commented on Oct 19, 2026

    @opencode-agent
    Contributor

    Thanks for confirming, and for moving the root-cause trace, the Settings idea and the 880px new-session note over to #53382. Follow that issue for updates. This one will be closed as a duplicate.

  5. opencode-agent commented on Oct 20, 2026

    @opencode-agent
    Contributor

    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 880px on the new-session page are now there too. #54800 is also related. Thanks again for the detailed report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions