Get started
Workspaces & the canvas
The infinite canvas is where your panels live. Learn to pan, zoom, place and group panels, then manage multiple projects with workspaces.
Opening a new workspace
New workspace offers Open a folder, Clone from GitHub, and Clone from a URL. Recent projects lets you reopen a local project directly. The computer control identifies where the project will live. The screen stays readable over wallpaper, with blank canvas, panel, import and documentation actions in the footer. Local and remote computers share the same guided flow, including GitHub sign-in, folder browsing and new-folder creation. Clone repository shows the repository, the parent folder, the folder name and the final destination before starting, and names the branch only when the link you pasted points at one. On this computer, the full destination says whether Deska will create a new folder or use an existing empty one. A folder containing files, a relative path or an unwritable destination is refused before cloning. Deska remembers the parent folder used for the last accepted clone separately for each computer; the first local clone defaults to Projects inside your home folder. You can always edit the destination or choose another folder. Remote Git checks its destination when the clone starts. Switching computers clears choices from the previous computer.
The infinite canvas
Every workspace is one borderless, infinite canvas. Panels float at fixed positions in canvas space, and you move a viewport over them, so the whole layout scales smoothly as you zoom and there is always more room to spread out.
A faint grid in the background helps you line things up. Click any empty area to clear the current focus.
Panning & zooming
There are a few natural ways to move around:
- Pan with a two-finger trackpad scroll, or by holding the right mouse button and dragging. A right-drag releases with a little inertia so it feels physical. A scroll that starts inside the panel you are working in stays in that panel until you stop, even past the top or bottom of its content, so the canvas does not move under it.
- Zoom by holding Cmd/Ctrl and scrolling: up to zoom in, down to zoom out. Zoom is anchored to your cursor.
Or use the keyboard:
- Cmd/Ctrl= zoom in, Cmd/Ctrl- zoom out.
- Cmd/CtrlShift0 reset to 100%.
- Cmd/CtrlShift1 zoom to fit every panel in view.
Zoomed out below about 45%, the canvas becomes an overview where each panel shows as a picture of itself. Deska takes the pictures while the camera rests and refreshes the ones whose panel changed, a panel at a time, every couple of seconds. Until its first picture a panel shows a sketch of what it holds, such as a chat’s last turns, a terminal’s last lines, a file’s first lines or a note, and a panel waiting for you says Needs you. The panel you are working in and the panels at work, an agent running a turn or a terminal printing, keep drawing live, up to about ten nearest the middle of the screen. A few seconds after one stops, Deska takes its picture as it is and the picture takes its place. Every other panel keeps working behind its picture: agents keep running, terminals keep their output, and pages keep playing and never reload. Click a card to select it, drag it to move the panel, drag its edge to resize it, and double-click it to zoom back into that panel. Past 50% every panel is live again, exactly as you left it. When you open a desk, Deska draws what you are looking at first, then prepares the rest of it in the background, a panel at a time, so the panels you reach are ready; a browser loads its page the first time it comes into view.
Placing & focusing panels
Add panels from the Panel Library (Cmd/CtrlShiftE) or by right-clicking empty canvas. A panel made from the right-click menu, tasks included, lands where you clicked: on open canvas exactly there, and next to other panels it lines up with them so the desk stays tidy. Inside a region it takes the region’s first free spot instead, so it belongs to the region. Panels added without a spot (a toolbar button, a shortcut) take the next free place in the grid. Either way the new panel is focused. Or double-click empty canvas: a compact panel palette appears where you clicked and spawns the panel at that exact spot. The Command Palette (Cmd/CtrlK) adds panels too, but its New Terminal, New Browser and New Editor open as pages of the notebook on the right instead of on the canvas.
- Focus a panel by clicking its title bar. It gains a glow and rises to the top.
- Move it by dragging the title bar; resize from any of the eight handles around it.
- Maximize a panel with the arrows in its title bar, a double click on an empty part of the bar, or Cmd/CtrlShiftEnter. It takes the whole window: the rest of the canvas, the bars and the sidebars step aside, still running, and a thin strip at the top keeps the window buttons. Restore, the same keys or the same double click put the canvas back exactly as it was. Closing or minimizing the panel, opening a new one or zooming also bring the canvas back. Sticky notes and other panels without a title bar are not maximized. To hide the system bars too, use your system’s full screen (F11 on Windows and Linux, CtrlCmdF on a Mac).
- Close the focused panel with Cmd/CtrlW, or delete it with Cmd/CtrlBackspace.
- Cycle focus with Ctrl` and CtrlShift`, or open the Panel Switcher with CtrlSpace.
Regions, selection & layout
As a canvas fills up, you can organize it. Click and drag on empty canvas to marquee-select panels, or Cmd/CtrlA to select everything.
- Group into a region with Cmd/CtrlG, which lines the selected panels up in a tidy grid of equal size and draws a region around them, its name ready to type. Dissolve regions with Cmd/CtrlShiftG.
- Auto Layout (Cmd/CtrlShiftL) rearranges every panel and region into a non-overlapping layout and zooms to fit. To tidy only some panels, select two or more: a chip appears above the selection with Group into region, Stack as row, Stack as column, Tidy into grid and Delete selection.
- Right-click empty canvas for the create menu: New task, New terminal, New editor, New browser, File Explorer and New sticky note, then paste, which names what it will make (a URL becomes a browser, plain text becomes a sticky note). Below that come the panels you pinned in the Panel Library and the Panel Library entry itself, then Select all, Auto layout and Zoom to fit, and Change look at the end. Right-clicking empty canvas clears what was selected, so the menu never offers actions on a selection you can no longer see. Those actions stay with the selection instead: the chip above two or more selected panels, Cmd/CtrlG to group them into a region (the only way for a single panel, which has no chip), Delete to delete them and Esc to drop the selection. Regions and text labels live in the Panel Library.
A region is a named area of the canvas. Its name sits on a tab at its top left corner, and that tab is how you handle it:
- Drag the name to move the region with everything inside it. Click the name to select the region, double-click it to rename. A region you just made starts with its name ready to type.
- Inside a region is still canvas. Clicking its empty area deselects, dragging there draws a selection box around the panels in it, and double-clicking opens the panel palette right there. Right-click inside a region, or on its name, for the canvas menu with the region’s own block added: everything the canvas menu creates, New task and Pinned included, then Rename, Color, a default folder for the terminals you open inside it, Select panels inside, Dissolve region and Delete region. A panel you make there (from that menu, the palette, or the Panel Library opened from either) takes the region’s first free spot, and the region grows to fit it when there is room.
- What you see inside is what moves. A panel belongs to the region its center sits in, so panels you open or drop inside a region move with it, and so does a region drawn inside another. Hover a region’s name to see the panels it holds. While you drag a panel over a region, the region lights up and the panel says Drop into and the region’s name.
- Color: the dot before the name picks one of the six colors windows use, or none. A selected region shows a handle on each corner to resize it. Esc puts a move or a resize back while you are still dragging, and Cmd/CtrlZ undoes either afterwards.
- Ask Dex to use a region: Dex can see region names and the panels inside them. Ask “what is in the Review region?” or “open three task panels in Review, I’ll fill them in”. Giving a task an instruction to work on starts it there; asking for empty panels opens drafts for you to fill in. You can also select a region and say “in this region”. The region grows if the panels need more space and there is room. If the name is missing or shared by several regions, Dex needs you to identify the region before placing them.
On-screen controls
Deska keeps its chrome light and pushed to the edges, so the controls you reach for are always to hand without crowding your work:
- The corner clusters (top): floating glass clusters instead of a full-width title bar. Top-left holds the brand mark and the crumb that names the computer, the project, the worktree you are on and its tasks (for example local ▸ my-app ▸ main ▸ New task); top-right holds the Marketplace (skills, bundles of skills and community panels), your phone, search, the settings gear, help, notifications and your account.
- The project rail (left edge): your workspace tiles in the Spaces island. Under each tile sits one short tick per worktree (a project with one worktree has none, and past five a round more tick opens the island), in the same order the island lists them: hover a tick to read its branch, click it to switch there. Hover the island itself and a panel opens beside it, listing every project with all of its branches underneath (a folder that is not a git repository has none); the pin at the foot of the rail keeps it open. It is the only chrome on the left. See Panels overview.
- The Add island (bottom): a glass pill beside the voice center with the Add panel button, which opens the Panel Library, and a quick-spawn strip (editor, terminal, browser, note and New task).
- The Extras button (bottom-left): opens one panel with a quick note, the focus timer and the music player. While a focus session runs, the closed button shows its countdown.
- The voice center (bottom-center): the home of Dex, where you type or talk to the assistant.
- The navigation cluster (bottom-right): today’s focus time, which opens yesterday, the last 7 days and pause, then a minimap beside a zoom pill (the panel summaries toggle, zoom out, the current percentage, zoom in, and zoom-to-fit). The minimap is a bird’s-eye view of every panel and region with a rectangle marking where you are looking. Each panel shows what it wants from you: green while an agent works, amber when one needs you, red for a run that failed and blue for a finished one you have not looked at yet. Red and blue go back to gray once you look at the task, every other panel is gray, and the one you are in is a lighter gray. Click a panel to jump to it, click or drag anywhere else to move the view, or toggle the minimap with Cmd/CtrlShiftM.
- The notebook (right): a floating companion whose pages are panels, shown while folded as the Project tools rail, every tool with its name, summoned and folded with Cmd/CtrlJ. Use it for the things you want beside your work without giving them canvas space. See Notes & the notebook.
- The time scrubber: an optional slider over the canvas for stepping back through saved layouts. See Snapshots & time travel below.
Docking, tab stacks and attached windows
Panels do not have to float separately. Inside a canvas node you can combine panels into tab stacks and splits, handy for keeping, say, two editors or an editor and its terminal in one tidy block.
- Drag a tab onto a split divider to split the node; drag onto the center to merge.
- The + button on a tab strip adds one more panel of the active tab’s type. The split button lets you choose a direction and a panel type.
- Drag a tab out to pop it into its own floating node or a separate window.
Two windows can also travel together without sharing one frame. Drag a window up to the outside edge of another one until that edge lights up and the preview says Drop to attach. The attached window keeps its own look and size. From then on it moves with the other window, follows its edge when that window is resized, and hides while it is minimized or maximized.
Sticky notes attach at the top-right corner instead: the note sits over the window and keeps its own size without dividing the panel. Each window holds one note, which follows it when it moves or resizes. You can also use Attach to window in the note’s menu. See Sticky notes on the canvas.
- Drag an attached window away to free it, or right-click it and choose Detach from window.
- Closing the window it is attached to leaves it where it is, on its own.
- Dropping other panels inside a window still stacks or splits it. Sticky notes stay separate and never become tabs or splits.
Workspaces
Each project gets its own workspace: a separate canvas with its own panels, zoom and viewport. The project rail down the left edge lists them as colored tiles in its Spaces island. Create, rename, recolor, reorder or close workspaces from there, and drag one tile onto another to fold them into a folder.
- Click a tile to switch, or jump straight to one with Cmd/Ctrl1 through Cmd/Ctrl9 (and Cmd/Ctrl0 for the tenth), matching the rail order.
- Cycle with CtrlTab and CtrlShiftTab.
- Give each workspace a color and an icon from a registry of over 200 glyphs, drawn on the workspace’s own color tile. Every workspace starts with a default icon derived from its identity, so no tile is ever blank.
- Hide Workspace (right-click a tile) takes a project out of the rail without closing it. It waits in the collapsed Hidden section at the bottom of the rail, and your phone files it the same way: under Hidden, at the end of that computer’s projects.
Worktrees
A workspace holds a project, and a project can hold several worktrees, in git’s own sense of the word: the primary checkout, the branches you cut yourself with New worktree, and the checkouts an agent is holding while it works. Each worktree has its own canvas. Switch worktrees and the whole surface switches with you; the layout you left is exactly where you left it when you come back. The first time you open a worktree it shows you its work: a task’s chat, or a terminal in an empty one. After that, coming back never moves anything.
- The workspace tiles in the rail show ticks, one per worktree, so you can see at a glance how much is going on inside a project.
- A crumb in the top chrome names the worktree you are standing on and follows your focus; point at it or click it to open the worktree switcher.
- The switcher is built for navigating many worktrees: your main checkout sits first and the rest follow by when you last stood on them, with the age beside each row. Just start typing to search by branch or task title, move with the arrow keys and jump with Enter. Tabs across the top split All, Active and Merged; merged worktrees sink to the bottom. Right-click any row to open its pull request, copy the branch name or remove it.
- Cmd/CtrlEnter opens the jump overlay from anywhere except while you type in an editor, a terminal or a text field, where it sends: every project and every worktree, one keystroke away. Workspace tabs run across the top and Tab cycles them; worktree tiles fill the grid below, where 1 to 9 jump straight to one and N cuts a new one.
The checkout behind a new worktree lives under ~/deska/workspaces/<project>/<branch>, so you can always reach it from a terminal and your project’s parent folder stays clean. Worktrees created by older versions of Deska in the sibling .worktrees folder keep working where they are.
Removing worktrees
In the worktree switcher, every worktree you can remove shows remove when you point at its row, and right-clicking it offers Remove worktree…. The folder always goes. Its branch goes too only when nothing on it is lost: every commit on it also exists on another branch, a remote branch or a tag, or its pull request is merged. When the branch has commits of its own, the confirm says how many and offers Keep the branch or Delete the branch too. The confirm also says how many uncommitted files go with the folder.
Before anything is lost, whether uncommitted files or a deleted branch’s own commits, Deska keeps a hidden copy for 30 days, and Dex can bring it back: ask him to restore the branch. Ignored files such as node_modules or .env are not part of that copy; they go with the folder.
- Clean up: when there is something to clean, the switcher’s header shows Clean up N. One confirm removes every worktree that loses nothing, with its branch, and deletes leftover
deska/branches that failed or deleted tasks left behind with nothing of their own. It leaves alone the worktree you are on, any worktree with uncommitted files, with commits of its own and no merged pull request, or with an agent working or a terminal open in it, and a task’s worktree until the task is stopped, settled or archived. It never deletes a branch outsidedeska/that has no worktree. Rows it would take say ready to clean up. - All worktrees ends with a Ready to clean up band that lists the same worktrees and branches with checkboxes, so you can untick anything you want to keep.
- There is no separate Tidy action any more: a merged worktree is simply a removal where nothing is lost, and the Checks panel of a merged pull request offers Remove this worktree.
Removing a task’s worktree also stops the task; see Isolated git worktrees. Dex can list your worktrees with what removing each would lose, remove one, clean up, and bring a removed branch back. Deleting a branch’s own commits always asks you first, even with Settings → Dex → Act without asking on.
The workspace overview
When you are juggling several projects, press Cmd/CtrlShiftP or click All workspaces below the tiles on the project rail for the workspace overview, headed Your workspaces. It shows one card for every workspace you have open, with the workspace’s identity, how many panels you opened there and how many agents are working or waiting. Each count opens what it counts: the panels, the agents, and, in the header, the worktrees beyond each project’s own folder.
- A folder that is not a git repository shows a map of its canvas and nothing about git. So does a repository with a single checkout, which also names its branch beside the panel count (on main) and says when it has uncommitted changes; click the branch to land there. The overview reads each repository when it opens, so this holds for projects you have not visited since launch.
- Once a repository has two or more checkouts (the branches you cut yourself, and any an agent is holding), the card lists them, one row each. Click a row to land on that exact worktree.
- Click the workspace name, the canvas map or Open workspace to enter the workspace on whatever it was last showing. Point at the name to see where its folder is.
- The last card, New workspace, creates a workspace. Right-click a card for the workspace menu: rename in place, duplicate or close.
Detached windows & saved sessions
Need a panel on a second monitor? Drag a tab or a whole dock zone out of the main window, or right-click a tab and choose Move into New Window, to open it as its own window. It stays above the Deska window it came from, so a click on the canvas never hides it, and it comes back when you reopen Deska. A task keeps its whole conversation there. To put a panel back, drag its tab into the main window; closing the window closes the panels in it.
Everything persists automatically. Panel positions, sizes, zoom, dock layout, terminal scrollback, editor state and browser history are saved per workspace and restored when you reopen Deska, with no save button required. Deska reopens on the workspace you were working in, on the computer it lives on, and switching to another computer lands on the project you left there.
Snapshots & time travel
Deska can quietly keep a rolling history of your canvas layout. With snapshots enabled, it saves the arrangement of your panels and regions in the background, a few seconds after things settle, and keeps the most recent ones per workspace, oldest rolling off as new ones arrive.
Turn on the time scrubber and a slider appears over the canvas. Drag it back and each stop previews an earlier layout, labelled with how long ago it was and how many panels it held; let go and Deska asks before restoring that arrangement, so you never replace your current layout by accident. Release at the far right to stay in the present.