Working in the lab · Chapter 2 of 14

Projects & files

Templates, folders, autosave, conflicts, tabs.

~3 min read6 sectionssame text as the guide inside the lab
All chapters

Keys are written for macOS, the way the lab prints them — on Windows and Linux read as Ctrl, as Alt, as Shift, as Enter.Keys are shown for Windows / Linux to match your platform — on a Mac, Ctrl is and Alt is . Every binding: Keyboard shortcuts.

A project is a folder of files that lives on the server. Everything in the lab — runs, shares, Copilot conversations — hangs off one.

Projects

  • Create: ⌘⇧PNew project…, or the project button in the title bar. Three templates: Bell state (bell.qasm + main.py + README), GHZ + noise comparison and Empty project. Every template ships at least one .qasm — that is what the Run rail can submit without Python.
  • Switch: ⌘O opens the project switcher — type to filter, Enter opens. The same list lives behind the project name in the title bar and in the Explorer header.
  • Rename / delete: from the switcher's row buttons, or ⌘⇧PRename this project…. Deleting a project does not touch runs you already submitted; they belong to your account.
  • The lab remembers the last project you had open (and honours ?project=<id> in the URL).

Files

  • New file: the + in the Explorer header, the row button on a folder, right-click, or ⌘⇧PNew file…. Type a slash to put it in a folder: src/ansatz.py.
  • New folder: the folder-plus button. A folder shows up right away and becomes part of the project when its first file is saved — folders are derived from paths, not stored on their own.
  • Rename / delete: hover or focus a row for its buttons, or right-click. Renaming a folder moves everything under it; deleting one deletes everything in it (the dialog says how many files).
  • File types the lab understands: .qasm (Run rail + circuit builder), .py (browser kernel), .ipynb (notebook view), .md/.json/.txt (plain editor).

Saving — you mostly don't

Edits autosave 1.2 s after you stop typing. Leaving a tab or closing one is a save point. ⌘S saves everything now. The title bar shows Saved / Unsaved / Saving… / Conflict / Not saved for the active file, and the status bar counts unsaved files.

A Conflict means the file changed somewhere else (another tab, another device) while you were editing — the bar above the editor offers Use theirs or Keep mine. A save error offers Retry save.

Find and replace

The Search rail (⌘⇧F) covers every file in this project, unsaved edits included. Toggles: Aa case, ab| whole word, .\* regex — $1 in the replacement is a capture group. The chevron opens the replace box.

Replace in this file and Replace all preview first: which files change and how many matches in each. Nothing is written until you confirm. The write is the ordinary save path, one file at a time, and it stops at the first failure and names what was saved and what was not.

Problems

The dock's Problems tab (⌘⇧M) says what will not parse before you press Run — .qasm through the circuit parser, .py through Python's compiler (it parses, it never runs your file), .ipynb as notebook JSON. Click a row to jump there; it re-checks after you stop typing. It is a syntax check: it cannot tell you the program is correct, and while the kernel is cold it says .py files are unchecked rather than showing a clean bill.

Tabs

Drag to reorder, middle-click to close, right-click for Close / Close others / Close to the right / Close saved. A dot instead of ✕ means unsaved.

Related: Sharing & GitHub · Keyboard shortcuts