Documentsbluefin
Bazaar App Visibility and Filtering
Bazaar App Visibility and Filtering
Type
Topic
Status
Published
Created
Jun 26, 2026
Updated
Jun 26, 2026

Bazaar App Visibility and Filtering#

Overview#

Bazaar's visible app catalog is controlled by two complementary YAML files shipped in projectbluefin/common under /etc/bazaar/:

FilePurposeRuntime Path
blocklist.yamlHard-blocks specific app IDs from appearing or installing/run/host/etc/bazaar/blocklist.yaml
curated.yamlDefines the curated sections, layout, styling, and app lists shown in Bazaar/run/host/etc/bazaar/curated.yaml

These paths are declared in bazaar.yaml as yaml-blocklist-paths and curated-config-paths respectively.


Tier 1: blocklist.yaml#

blocklist.yaml enumerates app IDs that Bazaar will never show or allow to install. The current blocklist covers:

  • Terminal-based editors: com.visualstudio.code-oss, com.vscodium.codium-insiders, io.neovim.nvim, org.vim.Vim, io.github.zyedidia.micro, com.helix_editor.Helix, org.gnu.emacs
  • System tools already handled elsewhere: app.devsuite.Ptyxis, org.freedesktop.fwupd
  • The Bazaar app itself: io.github.kolunmi.Bazaar

Note: The Flatpak versions of VS Code (com.visualstudio.code) and VSCodium (com.vscodium.codium) are not in the blocklist — they are handled by the hook system instead (see below).


Tier 2: curated.yaml#

curated.yaml defines the entire curated storefront — sectioned rows with custom CSS, banner images, and explicit appids lists. Sections currently include :

SectionExample Apps
Bluefin RecommendsGradia, Fotema, Damask
BrowsersFirefox, Chrome, Brave, Edge
MediaSpotify, VLC, EasyEffects
Office & ProductivityLibreOffice, Blender, GIMP, Obsidian
GamesSteam, Lutris, Heroic, Discord
UtilitiesWarp, PikaBackup, Cryptomator
DevelopersPodman Desktop, GNOME Builder, DBeaver
Sustainability & EducationTurboWarp, EndlessOS Key
AI and Machine LearningAlpaca, Jan

Each section specifies separate light-banner / dark-banner images and custom CSS class names for theming. To feature a new app, add its Flathub app ID to the appropriate section's appids list and verify it is not present in blocklist.yaml .


Before-Transaction Hooks#

Two before-transaction hooks are declared in bazaar.yaml and executed via hooks.py at /run/host/etc/bazaar/hooks.py. These intercept install transactions before they complete, show a dialog, and either deny the Flatpak install or launch an alternative installer.

Hook: jetbrains-toolbox#

Triggers on: any com.jetbrains.* app ID, plus com.google.AndroidStudio

Dialog: "JetBrains IDEs are not supported in this format" — offers Cancel or Download JetBrains Toolbox

Outcome:

  • If user clicks "Download JetBrains Toolbox" → runs ujust install-jetbrains-toolbox via flatpak-spawn --host
  • Regardless of user choice, the Flatpak install is always denied (teardown returns deny)

Hook: code#

Triggers on: com.visualstudio.code and com.vscodium.codium

Dialog: "VS Code like IDEs are not supported in this format" — offers Cancel or Download from Homebrew

Outcome:

  • If user clicks "Download from Homebrew":
    • com.vscodium.codium → installs ublue-os/tap/vscodium-linux via Homebrew
    • com.visualstudio.code → installs ublue-os/tap/visual-studio-code-linux via Homebrew
  • Flatpak install is always denied

Hook Execution Flow#

User clicks Install in Bazaar
  before-transaction hook fires
        ├─ setup: does this appid match? → pass (skip) or ok (proceed)
        ├─ setup-dialog: show warning dialog
        ├─ teardown-dialog: user chose action or cancel
        ├─ action: spawn alternative installer (detached)
        └─ teardown: return 'deny' → Flatpak install blocked

Both scripts share the same logic. /usr/libexec/bazaar-hook is the system-installed copy; hooks.py is the etc-side copy invoked by Bazaar as exec python3 /run/host/etc/bazaar/hooks.py . The alternative installer is spawned as a detached process via flatpak-spawn --host so it escapes the Flatpak sandbox .


Key Files#

FileDescription
system_files/bluefin/etc/bazaar/bazaar.yamlMain Bazaar config: blocklist path, curated config path, hook definitions
system_files/bluefin/etc/bazaar/blocklist.yamlHard-blocked app IDs
system_files/bluefin/etc/bazaar/curated.yamlCurated sections, app lists, CSS, and banner config
system_files/bluefin/etc/bazaar/hooks.pyHook handler: JetBrains → ujust, VS Code → Homebrew
system_files/bluefin/usr/libexec/bazaar-hookHook runner binary (mirrors hooks.py)

This system was introduced in PR #254 ("Hooks for bazaar"), which added the before-transaction hook infrastructure and VS Code/JetBrains redirect logic.


Contributing#

To add an app to a curated section, follow the contributing guide : add the Flathub app ID to the desired section in curated.yaml and confirm it is absent from blocklist.yaml. Blocked apps should never be added to curated sections .

For upstream Bazaar hook documentation, see the Bazaar hooks overview.

Bazaar App Visibility and Filtering | Dosu