Junction lets you choose the application to open files and links.
Set Junction as the default application for a resource and let it do the rest. Junction will pop up and offer multiple options to handle it.
Set Junction as default browser
xdg-settings set default-web-browser re.sonny.Junction.desktop
Set Junction as default for all files
xdg-mime default re.sonny.Junction.desktop x-scheme-handler/file
Please note that this may not be respected by all applications but the command
Set Junction as default for png
xdg-mime default re.sonny.Junction.desktop image/png
Set Junction as default email composer
xdg-settings set default-url-scheme-handler mailto re.sonny.Junction.desktop
Set Junction as default folder opener
xdg-mime default re.sonny.Junction.desktop inode/directory
Junction has a very simple API that doesn't require any programming. To open any resource with Junction, even if it's not configured as the default application, simply use the following URI format
x-junction://$RESOURCE. For examples
You can use this in web pages, the terminal, native applications and anything that is able to open URIs.
If Junction is installed - you can test this in the terminal with
xdg-open "x-junction://file:///etc/os-release" and in the browser with
<a href="x-junction://file:///etc/os-release">Test Junction URI</a>.
Tips and tricks
Use the menu or
<Ctrl>? to learn about Keyboard usage. You can navigate the UI with the arrow keys too.
Open with multiple applications
Use Middle-click, Ctrl+Click, Ctrl+Enter or Ctrl+Space to keep Junction open - allowing you to open the resource in multiple applications.
Make Junction appear in the center of the screen
On GNOME you can make all new windows open in the center using
gsettings set org.gnome.mutter center-new-windows true
Use Junction from the terminal
Create a permant alias, for example
alias open="flatpak run re.sonny.Junction".
Then you can use
Add custom scripts to Junction
You can add your own script to Junction by creating a
.desktop file for it in
See https://wiki.archlinux.org/title/desktop_entries (distro agnostic).
Create a bookmark with the following URL
Multiple Firefox profiles
See Profile Manager - Create, remove or switch Firefox profiles
If you want to be able to choose the Firefox profile to open the resource with, you can make desktop files for your Firefox profiles in
Here is an example
[Desktop Entry] Version=1.0 Name=Firefox work Exec=firefox -P work --class=firefox-work %u Icon=firefox Terminal=false Type=Application StartupWMClass=firefox-work MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https; StartupNotify=true
update-desktop-database ~/.local/share/applications, enjoy.
Environment variables in desktop files
# Before Exec=firefox %u # After Exec=env MOZ_USE_XINPUT2=1 firefox %u
I can't distinguish between options with the same icon
Within Junction, you can toggle
Show names in the menu or hover the application with the mouse to display a tooltip.
Otherwise, you can edit the desktop files to use distinctive icons, here are a some tools
My app doesn't show up
If the application was installed via Flatpak, the package manager or an other conventional way, feel free to open an issue.
Make sure the application desktop file has a
MimeType key that matches the type of resource you want it to handle. For example if you want the application
~/.local/share/applications/my-custom-browser.desktop to handle web content; add the following
The desktop filename should be unique. Junction can't display both
~/.local/share/applications/firefox.desktop. The second overrides the first.
Finally - make sure to run
update-desktop-database ~/.local/share/applications after installing a desktop file.
Where are desktop files located ?
- Flatpak system
- Flatpak user
In the media
softpedia.com - Nifty and useful app switcher called Junction - 05/2022
itsfoss.com - 03/2022
youtube.com - Junction 1.4 | Choose the application to open files and links - 12/2021
linuxunplugged.com - Episode 433 The Lessons of Jellyfin - 11/2021
If you'd like to help translating Junction into your language, please head over to Weblate.
Thank you for your help!
cd Junction npm install make dev
Make changes and press
<Primary><Shift>Q on the Junction window to restart it.
<Primary><Shift>I to open the inspector.
To pass the tests you have to install a few dependencies
# Install development dependencies sudo dnf install --assumeyes npm flatpak make desktop-file-utils gjs gtk4-devel libadwaita-devel cd Junction npm install flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install --user --assumeyes --noninteractive flathub org.freedesktop.appstream-glib # Run tests make test
# To update the pot file # xgettext -f po/POTFILES -o po/re.sonny.Junction.pot --no-wrap -cTRANSLATORS --from-code=UTF-8 # sed -i "s/Project-Id-Version: PACKAGE VERSION/Project-Id-Version: re.sonny.Junction/" po/re.sonny.Junction.pot meson compile re.sonny.Junction-pot -C build # To create a translation # msginit -i po/re.sonny.Junction.pot -o po/fr.po -l fr_FR.UTF-8 echo -n " fr" >> po/LINGUAS meson compile re.sonny.Junction-update-po -C build # To update translations # msgmerge -U po/*.po po/re.sonny.Junction.pot meson compile re.sonny.Junction-update-po -C build
Publish new version
- update metainfo and screenshot
meson compile re.sonny.Junction-pot -C build
meson compile re.sonny.Junction-update-po -C build
- Update version in
- git tag
cd Junction meson --prefix $PWD/install build ninja -C build install
Use GNOME Builder or
cd Junction flatpak-builder --user --force-clean --repo=repo --install-deps-from=flathub flatpak re.sonny.Junction.json flatpak --user remote-add --no-gpg-verify --if-not-exists Junction repo flatpak --user install --reinstall --assumeyes Junction re.sonny.Junction
~/.local/bin must be in
cd Junction meson --prefix ~/.local build ninja -C build install
cd Junction meson build ninja -C build install
cd Junction ninja -C build uninstall
© 2021-2022 Sonny Piers
GPLv3. Please see COPYING file.