VCode home

The layout on a tablet or desktop

Agents: claude, codex, opencode · On: desktop

Given a wide enough window the frame fills it, the whole app is scaled up, the conversation moves into a pane with a header of its own, and the tab bar and the file explorer stop being drawers and stand as columns either side of it.

Why you would use it

The app is built for a phone, where the explorer is a gesture and the type is sized for a screen held at arm's length. On a laptop that reads small and wastes room: you want the files always visible, tabs you can click and close from, and lines of text short enough to read back to their start. And with the room for two conversations side by side, each one needs its own tabs and its own buttons.

How to use it

Nothing to turn on. Resize the window, or open the app on a wider screen.

  1. The frame fills whatever width the window has, at every size. From 760px wide it is also scaled up 1.1 times, so the phone's type sizes read on a desktop screen. The zoom control beside the bell changes that scale.

  2. From 760px the conversation sits in a pane (.pane) with a header of its own (.pane-head), and the top of the screen is one 48px row: the usage meters on the left, then Install, the update arrow, Notify, the zoom control (#zoom), the folder (#files-open), the branch (#changes-open), Tabs (#tabs-open) with its count of tabs that want you, and the cog (#settings-open) at the right end. The version and the connection dot (#link-dot) sit once at the bottom right, in a grey bar across the foot of the window, not under each pane's composer. The phone's tab strip (#tabstrip), plus (#new-tab) and Agent and Shell chips (#send-modes) are not shown: each pane header carries its own tabs and plus, and a terminal button. On a touch screen the two-row keypad stays in the bottom band while the focused pane's terminal is open.

    A 900px window: one 48px row of meters and buttons across the top, the pane with its header under it.

  3. The pane header holds, left to right: the pane's tabs (.pane-tabs), the plus (data-act="new-tab"), then at the right end the agent and terminal buttons (.pane-modes, terminal-split), Split right and Split down, Zoom pane and Close pane. With one pane the zoom and the close are not shown, and neither is the focus ring. With several panes, every pane shows these buttons, focused or not.

  4. The tabs in a pane header are a desktop tab bar: each one a rectangle the full height of the header, meeting the next one on a hairline, the tab you are in filled, with a thin coloured top edge and coloured sides, and the shared colour rail under the other tabs. Its bottom stays open. Every tab has a close cross; the pointer brightens the one it is over. A mouse wheel over the strip scrolls it sideways. The first tab starts at the pane's own edge, in every pane: the resize handle of the line on the left straddles that line rather than leaning into the pane. The first tab's coloured left edge sits beside the pane's line, so the ring of the pane you are in meets the tab in the pane next door across one hairline. See close-and-reopen-tabs.

    The pane header with close crosses on every tab; the pointer brightens the second tab's cross.

  5. Click Split right or Split down in a pane header, or press Ctrl+D or Ctrl+Shift+D, to put a second pane beside or under it. Up to six across and six down. Each pane keeps its own tabs, its own mode and its own header; the focused one is the one the composer, the status bar and the explorer follow, and it wears a violet ring.

  6. From 1080px the tab bar docks as a column on the left (#drawer), 264px of the frame's own: your projects, each with its tabs. Drag its right edge (#tabs-sash) to make it 200 to 480px wide; double-click the edge to put 264px back. The width is kept on this browser. Click Tabs (#tabs-open) to hide and show it; the choice is remembered on this browser. Below 1080px Tabs opens it as a drawer.

    A 1920px window: the tab column on the left with Worktop and its tabs, two panes, and the explorer on the right.

    With the tab column showing, the file explorer docks as a column on the right (#explorer) from 1360px; with the tab column hidden, from 1080px. It starts 280px of the frame's own, 308px on screen. Drag its left edge (#explorer-sash) to make it wider or narrower, from 200px to 720px of the frame's own; the panes beside it always keep 420px. Its rows are VS Code's there (22px tall, 16px icon and chevron columns, 8px of indent a level) rather than the phone's thumb-sized ones.

    A 1440px window: the one row across the top, the tab column on the left, the pane in the middle, the file explorer docked on the right.

  7. Click the folder button next to Notify (#files-open) to hide and show the explorer column. The choice is remembered on this browser. The branch (#changes-open) does the same for the column's Changes side. Clicking the button of the side the column is not on adds that side, so the column shows the tree on top and Changes under it. With both shown, each button takes its own side away. These two buttons are the only switch: the column's head has no Files and Changes tabs, only the title FILES or CHANGES of the side on top. With both shown, drag the line between them (#explorer-both-sash) to give Changes more or less of the column. Drag the FILES head or the CHANGES bar onto a half of the other side to put it there: over, under, left or right. Side by side, each starts at the Files column's width, so the column doubles; it stacks again while the window has no room for both. Double-click either handle to put its size back. The place and the sizes are remembered on this browser. See session-changes.

    The same 1440px window with the explorer column gone and the pane widened into it; the tab column stays.

  8. When the explorer cannot dock, the same button opens it as an overlay instead, from the button or the right edge.

What you see

Options and settings

Option Default What it changes
Wide width threshold 760px Below it, the phone layout
Tab column threshold 1080px Below it, the tab bar is a drawer
Explorer width threshold 1080px, or 1360px with the tab column showing Below it, the explorer is a drawer
Tab column width 264px of the frame's own --dock-l, from --tabs-w, which app.js sets from the drag
Frame zoom 1.1 --zoom, set by app.js from the zoom control (100% is 1.1) and applied by the zoomed class on #frame
Bottom band width 584px of the frame's own --compose-w
Explorer column width 280px of the frame's own --dock-r, from --files-w, which app.js sets from the drag
localStorage wb.files.width absent The explorer column's dragged width in the frame's px, 200 to 720. Absent means 280
localStorage wb.files.changes absent The share of the column's height Changes takes over or under the tree, 0.12 to 0.8. Absent means as tall as its rows, up to half
localStorage wb.files.place absent Where Changes sits against Files with both shown: above, left or right. Absent means under it
localStorage wb.files.pair absent The column's dragged width with the two side by side, 400 to 1440. Absent means twice the Files width
localStorage wb.files.beside absent The share of that width Changes takes, 0.2 to 0.8. Absent means half
localStorage wb.files.hidden absent '1' hides the explorer column. Absent means shown
localStorage wb.tabs.width absent The tab column's dragged width in the frame's px, 200 to 480. Absent means 264
localStorage wb.tabs.hidden absent '1' hides the tab column. Absent means shown
localStorage v-code-explorer-both absent '1' shows Files and Changes together in the explorer column

Limits and known gaps