Create, edit, and delete Linux .desktop entries for web apps directly from Vicinae.
This extension is designed for workflows like:
- opening sites in app mode (
--app=...) - keeping one window per app
- focusing an existing app window instead of launching duplicates
- Manage desktop entries from Vicinae UI
- Configurable browser command and arguments template
- Automatic favicon download for nicer launcher icons
- Per-app single-window mode
- Automatic window identity learning (no manual match value needed)
- Window-manager aware focusing for:
nirihyprlandswayi3custom
- Linux desktop
- Vicinae installed
- Node.js + npm (for building from source)
jq(required for automatic window detection/focus logic)- WM CLI for your selected backend:
nirifornirihyprctlforhyprlandswaymsgforswayi3-msgfori3
- Clone this repository.
- Install dependencies:
npm install- Build the extension:
npm run build- Open Vicinae and run the command:
Manage Webapps
If you are developing locally, use:
npm run devOpen extension preferences and set:
Desktop Entries Directory- Default:
~/.local/share/applications
- Default:
Browser Command- Default:
chromium-browser
- Default:
Browser Args Template- Default:
--app={url} - Supported placeholders:
{url}{origin}{hostname}
- Default:
Window Manager- Default:
niri
- Default:
Custom Focus Command- Used only when
Window Manager = custom - Supports
{match}and{mode}placeholders
- Used only when
- Open
Manage Webapps. - Press
Shift+Enter(or chooseCreate Desktop Entry). - Fill:
Entry NameURL- optional
Comment - browser command/template if different from defaults
- Save.
The .desktop file will be written to your configured directory.
Per entry, enable:
Reuse and focus existing window if already open- choose
Match Strategy:App IDClassTitleAny Field
Behavior:
- First launch with single-window enabled:
- extension launches the app
- waits briefly for the new window
- auto-detects a match signature based on selected strategy
- saves it for future launches
- Next launches:
- if a matching window exists, it is focused
- otherwise a new window is launched
If one strategy is unreliable for a specific site/browser combo, edit entry and try another strategy.
Chromium app mode:
--app={url}
Regular new window:
--new-window {url}
Profile-specific app window (example):
--profile-directory=Default --app={url}
Enter: Edit selected entryShift+Enter: Create new entry
- Ensure
jqis installed - Ensure your selected WM backend command exists (
niri,hyprctl,swaymsg,i3-msg) - Open entry settings and try a different
Match Strategy - Launch once after changing strategy so detection can relearn
- Some sites block favicon fetches or require auth
- Use
Refresh Faviconaction in the command - If still missing, launcher falls back to generic browser icon
Run (if your environment needs it):
update-desktop-database ~/.local/share/applicationsIf built-in WM backends do not fit your setup:
- Set
Window Managertocustom - Provide
Custom Focus Command
Your command should:
- attempt focus for the given
{match}and{mode} - exit
0on success - exit non-zero if no window matched
- Existing entries can be edited and re-saved to pick up newer launcher behavior.
- This project targets pragmatic Linux webapp launcher workflows via Vicinae.