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
- Open Settings → Workspaces and click a workspace.
- 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. - Edit the text, then press Apply or
Ctrl+S.
Next to Apply you'll find:
- ?: opens this page.
- Copy: copies the whole file to the clipboard.
- Revert: throws away your edits and reloads the saved workspace.
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):
- Comments:
// to the end of the lineand/* blocks */. - Trailing commas after the last item in a list or object.
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.
| Key | Value | Meaning |
|---|---|---|
name required | text | The name shown on the workspace card and in the picker. Can't be empty. |
icon | icon name | The glyph on the workspace picker wheel. If you leave it out, it's Layers. See Icons. |
iconFile | path | A picture, icon file or program to use instead of the glyph. See Icons in the file. |
color | "#rrggbb" | An optional workspace colour, written as hex (3 to 8 digits). |
enabled | true / false | Whether the workspace appears on the wheel. Defaults to true. The current workspace is always shown, so false is ignored for it. |
shortcuts required | list | The 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.
| Key | Applies to | Meaning |
|---|---|---|
type required | all | One of app, url, folder, file, command, group. |
name required | all | The label on the wheel. |
icon | all | A glyph name. See Icons. |
iconFile | all | The path to a picture, an icon file or a program whose icon to use. See Icons in the file. |
target required | all except group | What 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:
- A path to an
.exe,.lnk,.bator.cmdfile, such as"C:\\Program Files\\App\\app.exe". If the path contains spaces, you can wrap it in escaped quotes and add arguments after it:"\"C:\\Program Files\\App\\app.exe\" --profile work". - A Store or Start menu app ID:
"shell:AppsFolder\\Microsoft.WindowsTerminal_8wekyb3d8bbwe!App". Apps you add from the installed-apps list are stored this way. To find an ID, runGet-StartAppsin PowerShell.
Environment variables such as %LOCALAPPDATA% are expanded.
| Key | Value | Meaning |
|---|---|---|
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. |
recents | true / false | IDEs only (VS Code, Cursor, JetBrains, …). Opens a submenu of the IDE's recent projects. |
terminalForRecents | true / false | When you pick a recent project, also open a terminal in that folder. |
terminalCommands | list of text | Commands to run in that terminal, in order, e.g. ["npm install", "npm run dev"]. |
openTerminal | true / false | Also open a terminal when the app itself is launched. |
workingDirectory | path | The 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.
| Key | Value | Meaning |
|---|---|---|
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.
| Key | Value | Meaning |
|---|---|---|
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. |
workingDirectory | path | The 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.
| Key | Value | Meaning |
|---|---|---|
items required | list | Shortcuts, written exactly like the entries in shortcuts. Groups can contain groups, up to 8 levels deep. |
Icons
A workspace and each of its shortcuts can show a glyph from the built-in set or a picture of your own. You can set either one in Settings or in the file.
Choose an icon in Settings
For a workspace, click the icon square next to its name. For a shortcut, click its pencil, then click the Icon field. The dialog has two tabs:
- Glyph: search the built-in set by name, or by an English word such as work, time or home.
- Picture: use an image of your own, or any icon Windows has. Click Browse…, drop a file on the dashed area, or press
Ctrl+Vto paste a copied picture (a screenshot, for example) or a copied file path.
The Picture tab accepts these files:
| File | Icon you get |
|---|---|
| PNG, JPG, GIF, WebP, BMP, SVG, AVIF | The picture itself. |
| ICO, CUR | The largest image in the file. |
| EXE, DLL, ICL, CPL, OCX, SCR, MUN | The file's first icon. A grid of every icon in the file appears below it, so you can pick another one. |
A shortcut (.lnk, .url), a folder, or any other file | The icon File Explorer shows for it. |
Under Windows icons, the shell32.dll, imageres.dll and ddores.dll buttons open the icon libraries that come with Windows, so you don't have to browse to System32.
Rovyl trims empty transparent edges and scales every picture to match the icons it finds on its own, so custom icons line up with the rest of the wheel. It also keeps its own copy, so moving or deleting the original file later doesn't change the icon.
Default undoes your choice. An app, file or website gets back the icon Rovyl found for it, and a folder, command or group gets back its standard glyph.
Icons in the file
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.
iconFile is the full path to a picture, an icon file or a program, and accepts the same file types as the Picture tab. Environment variables such as %SystemRoot% are expanded. To use an icon other than the first one in a program or DLL, add a comma and its number, counting from 0. This is the format Windows uses for icon locations: "%SystemRoot%\\System32\\shell32.dll,4" is the fifth icon. In the Picture tab's grid, hold the pointer over an icon to see its number. A negative number is a resource ID instead (shell32.dll,-16769).
- If you leave out
icon, the type's default glyph is used:app→AppWindow,url→Globe,folder→Folder,file→File,command→TerminalSquare,group→Folder. - Apps, files and websites find a picture on their own: the program's icon, the file type's icon or the site's favicon. If you set
iconto a glyph other than the default, that glyph is shown instead. Remove the line to get the found picture back. iconFiletakes priority over both. When it's set,iconis used only if the picture can't be loaded.- Removing
iconFileremoves the picture. The one exception is a picture you pasted in Settings: it has no path, so it isn't written to the file, and it stays until you change it in Settings. - The file is read when you apply. If it's missing or can't be used, a message says so and the glyph is shown instead.
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. A custom picture is written as the path it came from (iconFile), never as Rovyl's own copy of it.
- Export: open the workspace, switch to the file view and click Copy. Save or send the text.
- 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.
- 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. A picture named in iconFile is kept as long as the path stays the same. New apps, files and websites have their icons fetched right after you apply, and a new or changed iconFile is read at the same time.
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. The same goes for iconFile: %SystemRoot%\\System32\\imageres.dll exists on every PC, a picture in your Downloads folder doesn't.
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.arshitvaghasiya.com/docs
{
"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",
"iconFile": "%USERPROFILE%\\Pictures\\Icons\\terminal.png",
"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": "folder",
"name": "Downloads",
"iconFile": "%SystemRoot%\\System32\\shell32.dll,4",
"target": "%USERPROFILE%\\Downloads"
},
{ "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:
| Message | Fix |
|---|---|
"\T" is not an escape JSON knows | Double the backslashes in the path: "C:\\Tools". |
Expected "," or "}" here | A 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, group | Use one of the six types. |
A "url" target must be an http:// or https:// address | For other kinds of link, use an app or command shortcut. |
"recents" must be true or false, without quotes | Write true, not "true". |
A workspace needs a "shortcuts" list | Add "shortcuts": []. |
"iconFile" is the full path to a picture, an .ico or a program | Write the whole path, starting from the drive letter ("C:\\…"), a network share ("\\\\server\\…") or a variable such as %USERPROFILE%. |
"icon" is a glyph name such as "Rocket". For a picture or a program's icon, use "iconFile". | Move the path from icon to iconFile. |
Icon shell32.dll,999 not loaded: … (a message after applying) | The file couldn't be used: it's missing, it isn't a picture Rovyl can read, or it has no icon with that number. The glyph is shown until you fix the path. |
Found something here that doesn't match what the app does? Open an issue at github.com/arshit09/rovyl.