Skip to content

[FEATURE]: Resizable session content width in Desktop/Web #53382

Open

Description

@Wiedzmin-git

Prior-request verification

  • I reviewed the related issues and PRs listed below before proposing this scope.

Prior requests

Related: #29408, #16567, #14834, #29430 and #15735; prior wide-mode implementation: #14835 (closed, not merged).

These requests overlap with the same underlying Desktop/Web content-width problem. This proposal focuses on an interactively resizable column, with a persisted intermediate width, rather than only a fixed centered/full-width toggle. I do not claim that configurable width has never been requested. If maintainers prefer continuing under an existing issue rather than a separate proposal, I am happy to follow that direction.

Describe the enhancement you want to request

Please let users resize the session content column in Desktop/Web. On wide screens, a narrow column wraps code and long responses unnecessarily; for prose, a narrower column can still be preferable.

Proposed behavior:

  • Drag either content edge to resize the timeline and composer together.
  • Persist the preferred width while clamping it to the available panel space.
  • Keep existing responsive defaults until the user changes them; provide an easy reset.
  • Support keyboard resizing and RTL layouts.

An independent local implementation exists for v2.0.23, with focused unit tests and production Chromium checks. I can submit a separate PR targeting v2 after design approval and adapting it to the current branch. This request does not depend on my other proposals.

Contribution disclosure

The patches have been applied locally. In my own day-to-day use, I have not noticed bugs so far; this is a personal observation, not proof of correctness or a substitute for independent review.

I am not a programmer. The implementation was created with AI assistance, and I cannot independently verify the code. Automated tests and AI reviews are not a substitute for maintainer review; please independently check the design and implementation before merging.

Activity

  1. added
    needs:complianceThis means the issue will auto-close after 2 hours.
    and removed
    needs:complianceThis means the issue will auto-close after 2 hours.
    on Oct 5, 2026
  2. github-actions commented on Oct 6, 2026

    @github-actions
    Contributor

    Thanks for updating the issue with the verification checkbox and a clear description of the requested change.

  3. hril3 commented on Oct 19, 2026

    @hril3

    Since #56953 got flagged as a duplicate of this, here's the root-cause trace from the current dev source (ba06ff9e0b), plus the two gaps the triage bot called out.

    How the clamp works

    The width is not a user preference anywhere — it is derived from a media query:

    // 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()),

    So any viewport wider than 768px gets centered = true, and that switches on a Tailwind utility that resolves to a design-token constant:

    // 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;

    Worth noting for scoping: this is not desktop-specific. Since isDesktop is (min-width: 768px), the web UI is clamped identically as soon as the window passes 768px. There is no code path a user or config can influence.

    All consumers of the constant

    Seven places consume max-w-session, so a single override point has to cover all of them (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)

    That last row is the second gap worth flagging: the new-session page has its own hardcoded max-w-[880px] in NEW_SESSION_CONTENT_WIDTH rather than using the token, so it needs a separate change even after the session column is resizable.

    On the two points the triage bot raised

    1. Settings affordance — surfacing the current width plus a "reset to default" control seems worth doing, since otherwise the value is only reachable by dragging (double-click to reset works, but it is undiscoverable).
    2. The 880px new-session page — as above, separate constant, same limitation.

    I don't want to duplicate the scope described here; happy to follow whatever direction you maintainers prefer. If you open a PR for the session column, I can contribute the parts above (or just review them).

  4. dchasman commented on Oct 24, 2026

    @dchasman

    The fixed-width message column remains a usability problem on wide desktop windows. Please keep one canonical issue open until configurable width is implemented or explicitly declined.

    Earlier reports were closed for administrative reasons, not because the limitation was resolved:

    Issue Closure reason Evidence
    #29408 — Desktop wide mode Automatically closed after 60 days without activity github-actions: “To stay organized issues are automatically closed after 60 days of no activity. If the issue is still relevant please open a new one.”
    #16567 — Narrow Desktop/Web content area Automatically closed for template noncompliance after a 2-hour deadline github-actions: “This issue has been automatically closed because it was not updated to meet our contributing guidelines within the 2-hour window.”
    #14834 — Fixed-width chat wastes screen space Automatically closed for template noncompliance after a 2-hour deadline github-actions: “This issue has been automatically closed because it was not updated to meet our contributing guidelines within the 2-hour window.”
    #56953 — Session content locked to 744px Closed as a duplicate of #53382, not as fixed opencode-agent: “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.”

    Not all of these closures were due to inactivity, but none demonstrates that the underlying request was delivered.

    Requiring users to recreate unresolved requests fragments the discussion, loses continuity, and makes the actual implementation status difficult to follow. Lack of comment activity does not mean the limitation has disappeared.

    Please exempt this canonical issue from inactivity-based closure, or provide a durable tracking item that will remain open until the request is implemented or explicitly declined.

  5. Wiedzmin-git commented on Oct 27, 2026

    @Wiedzmin-git
    Author

    Thanks for the discussion. I’m stepping away from the project and won’t be preparing a PR for this proposal. Since other users are interested, I’m leaving the issue open for others to take forward.

  6. opencodejr commented on Oct 27, 2026

    @opencodejr
    Contributor

    Thanks for the careful write-up and for linking the earlier requests.

    To restate it: you'd like to be able to resize the session column in Desktop/Web by dragging either edge, so the timeline and composer change width together. The width would be saved and kept within the available space, with the current responsive default until you change it, an easy reset, keyboard resizing and RTL support. Right now the column width is a fixed design value (--container-session, 744px on most desktop widths), so this would be a new option rather than a bug fix. The maintainers will consider it, and since you offered a PR, they can tell you whether this design works for them before you adapt it to the current branch.

    Related issues:

  7. VetiSantiagoO commented on Nov 10, 2026

    @VetiSantiagoO

    +1 to this. The fixed 744px column is the main thing that keeps me from using the desktop app on a wide monitor. Code blocks, diffs, tables and Mermaid diagrams wrap or scroll sideways while half the window sits empty.

    I'd like to suggest a simpler first step that could ship before (or instead of) drag-to-resize: a content width preset in Settings → Appearance:

    Why presets might be easier to land:

    • They map onto the existing --container-session variable, so the change mostly means swapping a hardcoded value for a setting-driven one. That should also cover the hardcoded 880px on the new-session page mentioned above.
    • There's no new drag handle to reconcile with the review/side panel splitter, its min-widths, or the layout transitions.
    • The setting persists like any other appearance preference and is easy to reset.
    • A command palette entry (e.g. "Cycle content width") would make it quick to switch, for example going wide when reviewing a large diff and back to narrow when reading prose.

    Drag-to-resize could still come later on top of this, as a "Custom" option.

  8. LorenzoServolini commented on Nov 11, 2026

    @LorenzoServolini

    Until a resizable width lands, I published a small plugin that makes the built-in Wide option fill the whole window (OpenCode Desktop 2.x): opencode plugin add opencode-wide-chat → https://github.com/LorenzoServolini/opencode-wide-chat

  9. dchasman commented on Nov 13, 2026

    @dchasman

    Until a resizable width lands, I published a small plugin that makes the built-in Wide option fill the whole window (OpenCode Desktop 2.x): opencode plugin add opencode-wide-chat → https://github.com/LorenzoServolini/opencode-wide-chat

    Your plugin is fantastic! Thank you so much for building it! @LorenzoServolini

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions