Installation request for personal-files interface: motrix (browser-native-messaging)

name: motrix

description: Motrix is a full-featured download manager supporting HTTP, FTP, BitTorrent, Magnet, and Metalink downloads.

snapcraft: https://github.com/agalwood/Motrix/blob/v2.0.0-beta.8/build/snap/snapcraft.yaml.in

upstream: https://github.com/agalwood/Motrix

upstream-relation: I am the upstream maintainer and the publisher of the existing motrix snap.

snap-id: 5zp2PMyHrXelupf6ZAKo23PKZ6HBUMg4

plugs:
  browser-native-messaging:
    interface: personal-files
    attributes:
      write:
        - $HOME/.config/google-chrome/NativeMessagingHosts/app.motrix.bridge.json
        - $HOME/.config/microsoft-edge/NativeMessagingHosts/app.motrix.bridge.json
        - $HOME/.mozilla/native-messaging-hosts/app.motrix.bridge.json
    request-type: installation
    reasoning: |
      Motrix integrates with its browser extensions through the browsers'
      Native Messaging mechanism. Google Chrome, Microsoft Edge, and Firefox
      discover the native host through the three per-user manifest files
      listed above.

      A strictly confined snap cannot create or maintain those manifests in
      the user's real home directory without this narrowly scoped
      personal-files plug. Browser integration is optional; Motrix otherwise
      remains fully functional.

The Snap Store automated review of the 2.0.0-beta.8 amd64 upload reported:

human review required due to 'allow-installation' constraint (bool)

I am requesting installation permission (allow-installation) for this plug definition only. I am not requesting auto-connection. The plug should remain disconnected by default, and users who want browser integration must explicitly opt in:

sudo snap connect motrix:browser-native-messaging

Without that connection, Motrix continues to operate normally; only browser integration remains unavailable.

The requested access is limited to three exact, Motrix-specific files named app.motrix.bridge.json. It does not request recursive access to the surrounding browser configuration directories or to sibling files.

Native Messaging manifest write access is security-sensitive because a manifest selects the executable that the browser launches. In the Snap build, Motrix always writes /snap/bin/<snap-instance>.native-host as the manifest’s executable path. This is snapd’s command wrapper for the native-host application shipped by the same confined snap.

Relevant implementation paths in the v2.0.0-beta.8 source tag are:

  • build/snap/snapcraft.yaml.in

  • src/main/bridge/native-messaging-installer.ts

  • src/main/bridge/snap-environment.ts

  • src/main/bridge/native-host-path.ts

I understand that publisher vetting may be required for Native Messaging manifest access, and I am happy to complete that process.

Could you please grant allow-installation for the personal-files interface, constrained to the browser-native-messaging plug and the three exact write paths above, without granting auto-connection?

This request has been added to the queue for review by the @reviewers team.

Hello @agalwood :slight_smile:

Given the justification provided, your request makes absolute sense to me, so +1 from my side for granting allow-installation of the personal-files interface to the motrix snap.

Hey @agalwood

As you mention, this type of access may be quite sensitive. In this case, I’m happy to cast a +1 based on:

  • The upstream project looks mature and has some relevant community traction
  • The snap publisher is the upstream
  • Only access to app.motrix.bridge.json is requested. It should prevent conflicts with other applications

Publisher vetting to double check your relation with the upstream project will be required

Great!

I will proceed with the publisher vetting.

Publisher vetting is completed successfully.

+2 voted for, 0 against, granting allow-installation of the personal-files interface to the motrix snap.

@agalwood could you please re-trigger the review for the failing revisions?

Thanks everyone; I have successfully published the new version—currently 2.0.0-beta.27—to the Edge and Beta channels.

1 Like