Back

Workspace files

Every workspace can be edited as plain text, much like VS Code's settings.json. Use it to change many shortcuts at once, keep your setup in a dotfiles repo, or share a workspace with someone else.

Open the file view

  1. Open Settings → Workspaces and click a workspace.
  2. In the dialog's top-right corner, switch from the list icon (Edit visually) to the { } icon (Edit as a file). Rovyl remembers your choice for next time.
  3. Edit the text, then press Apply or Ctrl+S.

Next to Apply you'll find:

A dot next to workspace.jsonc means you have unapplied edits. Clicking Done, closing the dialog, pressing Escape or switching back to the visual view applies them first. If the file has an error, the dialog stays open and the error bar shows the line. Click the bar to jump there. After applying, Undo in the toast restores the workspace as it was.

Syntax

The file is JSON with two relaxations, the same ones VS Code allows (JSONC):

Everything else is ordinary JSON: keys and text go in double quotes, and true/false have no quotes.

Windows paths need doubled backslashes. Write "C:\\Tools\\app.exe". A single \ starts an escape sequence and is reported as an error. You can also use forward slashes ("C:/Tools/app.exe"), which Windows accepts.

Rovyl doesn't store comments or formatting. After you apply, the text is rewritten in its standard form.

Workspace keys

The file is one object that describes a single workspace.

KeyValueMeaning
name requiredtextThe name shown on the workspace card and in the picker. Can't be empty.
iconicon nameThe glyph on the workspace picker wheel. If you leave it out, it's Layers. See Icons.
color"#rrggbb"An optional workspace colour, written as hex (3 to 8 digits).
enabledtrue / falseWhether the workspace appears on the wheel. Defaults to true. The current workspace is always shown, so false is ignored for it.
shortcuts requiredlistThe shortcuts, in wheel order: the first sits at the top and the rest follow clockwise. Use [] for an empty workspace.

Some things aren't in the file on purpose. The number key comes from the workspace's position (the first workspace gets 1), so to change it, drag the card. Which workspace is current is set with the check button in the visual view.

Shortcut keys

Every entry in shortcuts is an object with a type. Each type accepts its own set of keys. A key that type doesn't accept is an error rather than being ignored, so a typo like "lanch" is caught instead of doing nothing.

KeyApplies toMeaning
type requiredallOne of app, url, folder, file, command, group.
name requiredallThe label on the wheel.
iconallA glyph name. See Icons.
target requiredall except groupWhat the shortcut opens. The rules depend on the type and are described below.

"type": "app": an application

target is what Windows launches. It can be:

Environment variables such as %LOCALAPPDATA% are expanded.

KeyValueMeaning
launch"normal" · "reuse" · "prewarm"normal (the default) is a standard launch. reuse uses the process that's already running when the app supports it; for an IDE, that can switch the project in the current window. prewarm keeps the executable in the Windows file cache so later launches start faster.
recentstrue / falseIDEs only (VS Code, Cursor, JetBrains, …). Opens a submenu of the IDE's recent projects.
terminalForRecentstrue / falseWhen you pick a recent project, also open a terminal in that folder.
terminalCommandslist of textCommands to run in that terminal, in order, e.g. ["npm install", "npm run dev"].
openTerminaltrue / falseAlso open a terminal when the app itself is launched.
workingDirectorypathThe folder that terminal and its commands start in.

"type": "url": a website

target is an http:// or https:// address. If you leave out the scheme, https:// is added, so "github.com" becomes "https://github.com". Other schemes are rejected. The page opens in your default browser.

KeyValueMeaning
launch"normal" · "reuse"reuse opens the page in the browser that's already running. The page may land in an existing window, and private or profile windows may be skipped. prewarm isn't available for websites.

"type": "folder": a folder

target is a folder path, and it opens in File Explorer. Environment variables are expanded, so "%USERPROFILE%\\Downloads" works on any PC. This type has no other keys.

"type": "file": a document

target is the path to any file. It opens in whichever program Windows uses for that file type, so a .xlsx opens in Excel and a .pdf in your PDF reader. Environment variables are expanded. This type has no other keys, including no launch mode, because Windows picks the program.

"type": "command": a command line

target is a command line, passed to the shell exactly as written, including quotes, &&, ; and pipes. Use the chosen shell's own syntax for variables: $env:USERPROFILE in PowerShell, %USERPROFILE% in Command Prompt.

KeyValueMeaning
shell"powershell" · "cmd"Which shell reads the line. Defaults to Windows PowerShell.
window"open" · "hidden"open (the default) shows a console that stays open so you can read the output. hidden runs in the background with no window; an error in the first moments is still reported.
workingDirectorypathThe folder the command runs in. Defaults to your user folder.

"type": "group": a submenu

A group has no target. It opens a second wheel containing its items, and the hub takes you back.

KeyValueMeaning
items requiredlistShortcuts, written exactly like the entries in shortcuts. Groups can contain groups, up to 8 levels deep.

Icons

icon is the name of a Lucide icon in PascalCase: "Rocket", "FolderGit2", "TerminalSquare". Convert Lucide's names from kebab-case (folder-git-2 becomes FolderGit2). An unknown name falls back to a generic glyph.

Share and migrate

The file holds only what you'd type. It leaves out internal IDs, the machine's icon cache and the number key, so the same text works on any PC.

  1. Export: open the workspace, switch to the file view and click Copy. Save or send the text.
  2. Import into a new workspace: in Settings → Workspaces, click New workspace, open it, switch to the file view, replace the text with what you received, and apply.
  3. Replace an existing workspace: paste over its file and apply. Undo in the toast brings the old one back.

When you apply a file, every shortcut whose type and target are unchanged keeps its identity and its extracted icon, even if you renamed or moved it. For groups, the name is used instead of the target. New apps, files and websites have their icons fetched right after you apply.

Paths are specific to each PC. Prefer %USERPROFILE%, %LOCALAPPDATA% and shell:AppsFolder\\… IDs over hard-coded user folders so a shared file works for the person receiving it.

To move everything at once (all workspaces plus every preference), use Settings → Advanced → Export settings and Import settings instead.

Full example

// Rovyl workspace. Reference: https://rovyl-red.vercel.app/docs#workspace-file
{
  "name": "Dev",
  "icon": "Code",
  "enabled": true,
  "shortcuts": [
    {
      "type": "app",
      "name": "VS Code",
      "target": "%LOCALAPPDATA%\\Programs\\Microsoft VS Code\\Code.exe",
      "launch": "reuse",
      "recents": true,
      "terminalForRecents": true,
      "terminalCommands": ["git pull", "npm run dev"]
    },
    {
      "type": "app",
      "name": "Terminal",
      "target": "shell:AppsFolder\\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App"
    },
    { "type": "url", "name": "GitHub", "target": "github.com", "launch": "reuse" },
    { "type": "folder", "name": "Projects", "icon": "FolderGit2", "target": "%USERPROFILE%\\src" },
    { "type": "file", "name": "Roadmap", "target": "D:\\Docs\\Roadmap.xlsx" },
    {
      "type": "group",
      "name": "Ops",
      "icon": "Server",
      "items": [
        {
          "type": "command",
          "name": "Flush DNS",
          "icon": "Wifi",
          "target": "ipconfig /flushdns",
          "shell": "cmd",
          "window": "hidden"
        },
        {
          "type": "command",
          "name": "Dev server",
          "target": "npm install; npm run dev",
          "workingDirectory": "D:\\src\\site"
        }, // trailing commas are fine
      ]
    }
  ]
}

Errors

Every error includes its line and column. These are the most common:

MessageFix
"\T" is not an escape JSON knowsDouble the backslashes in the path: "C:\\Tools".
Expected "," or "}" hereA comma is missing at the end of the line above.
"lanch" is not a setting of a "url" shortcut. Did you mean "launch"?Fix the spelling, or remove a key that this type doesn't accept.
"type" must be one of: app, url, folder, file, command, groupUse one of the six types.
A "url" target must be an http:// or https:// addressFor other kinds of link, use an app or command shortcut.
"recents" must be true or false, without quotesWrite true, not "true".
A workspace needs a "shortcuts" listAdd "shortcuts": [].

Found something here that doesn't match what the app does? Open an issue at github.com/arshit09/rovyl.