Disclosure up front: I'm the author of PulseMesh, a third-party plugin that has been available for about two years and is currently the fourth most-installed plugin according to FPP's own opt-in usage statistics. This issue is obviously prompted by how the new install UX presents PulseMesh, but the problem isn't unique to us, and I've tried to frame it as a general design question.
First: I agree with the motivation behind the FPP 10 changes.
Plugins run as root with essentially unlimited access to the system and network, creating plugins is getting dramatically easier (including with AI-assisted development), and users should understand what they're agreeing to before installing arbitrary third-party code. Clear capability and privacy disclosure is the right direction, and the new author-provided disclosure section is a good idea.
My concern is with the language, not the disclosure. Several of the new strings go beyond stating facts and read as judgments about whether the software should be trusted:
- Every third-party plugin is described as "untrusted third-party code", and installing one is described as "inherently dangerous."
- A plugin that discloses a proprietary component gets the badge "Includes software that can't be checked" and a red install button labeled "Install, black box included."
These are different questions
The current UI collapses several distinct facts into a single trust verdict:
- Is this plugin maintained by the FPP project?
- Has the FPP project reviewed or verified it?
- Can the publisher's identity be established?
- Is all of its code publicly auditable?
- What privileges does it have once installed?
All five are worth disclosing to users. None of them is the same as "should you trust this software," and none individually answers it.
"Untrusted" reads as a verdict, not a status
In a narrow security sense, "untrusted" can mean "trust has not been established." Most users won't read it that way — they'll read it as "this software is regarded with suspicion."
Compare:
"This is a third-party plugin that has not been reviewed or verified by the FPP project."
with:
"This plugin is untrusted third-party code."
The first describes FPP's relationship to the plugin. The second reads as a characterization of the plugin itself.
The same applies to:
"This is inherently dangerous."
The surrounding capability statement — runs as root, can read and change any setting, can reach the network — is factual. Appending "this is inherently dangerous" converts disclosure into a verdict, applied identically to every third-party plugin regardless of its history.
Taken together, "untrusted" and "inherently dangerous" communicate something significantly stronger than "this plugin is maintained by a third party and has not been verified by FPP."
"Black box" creates a disincentive for full disclosure
Closed-source software is not inherently suspicious. A plugin may legitimately contain a proprietary component while having an identified publisher, years of usage, and a large install base.
The factual disclosure:
"Contains proprietary software whose source code is not publicly available."
tells users exactly what they need to know.
Changing the install button itself to red and labeling it:
"Install, black box included"
reads less like disclosure and more like a recommendation against installing.
This isn't a corner case. FPPMon — currently the third most-installed plugin — is a third-party plugin in essentially the same position: it also includes proprietary software.
FPP's own opt-in usage statistics currently show FPPMon on 1,522 devices and PulseMesh on 1,325 devices, making them the third and fourth most-installed plugins in that data set. Because those statistics only include devices whose owners have enabled statistics sharing, those numbers necessarily undercount the actual install bases.
Three of the four most-installed plugins in that data set are third-party (Remote Falcon, FPPMon, and PulseMesh), and two of those — FPPMon and PulseMesh — include proprietary components. Under the current wording, all three are presented as "untrusted," while FPPMon and PulseMesh additionally receive the "black box" treatment.
There's also an incentive problem with the disclosure system itself.
The disclosure section is author-provided. PulseMesh hasn't added ours yet, so our listing currently shows "no disclosure" and a red "Install, no disclosure" button. When we add an accurate disclosure, the proprietary component will change that to the red "Install, black box included" button.
In other words, for any plugin that legitimately includes a proprietary component, there is no disclosure an author can write — however complete and honest — that results in a neutral install experience.
A disclosure system works best when accurate disclosure is the author's best strategy. Right now, accurate disclosure of proprietary software guarantees an alarming installation state.
The bigger gap: no way to establish trust
This is my main concern.
On Windows and macOS, software downloaded from the Internet can also generate strong warnings, but publishers have mechanisms for establishing provenance: code signing, notarization, identified-developer programs, and similar systems.
FPP currently has no equivalent path.
A plugin with two years of history and more than 1,300 installations even within FPP's opt-in telemetry is presented with essentially the same maximal trust language as a repository created yesterday by an unknown author.
That isn't just rough on established publishers — it also makes the warning less protective.
If every third-party plugin produces the identical worst-case warning, users learn to click through it, and the warning carries less signal on the day it actually matters. As plugin creation gets easier, the ecosystem increasingly needs the warning to differentiate between different situations, and today it can't.
Importantly, plugin age or install count shouldn't themselves be treated as proof that software is safe. But they are examples of useful context that the current binary "official" versus "untrusted" presentation doesn't communicate at all.
Concrete suggestions
-
Reword the trust statement to describe FPP's relationship to the plugin while keeping the capability facts.
For example:
"This is a third-party plugin. It has not been reviewed or verified by the FPP project. It will run as root and can read and change any setting, reach anything on your network, and do things not listed below. Install only if you trust the publisher."
-
Drop "This is inherently dangerous."
The capability statement makes the point factually and, in my opinion, more credibly.
-
Make the proprietary disclosure neutral.
For example:
"Contains proprietary software (source not publicly available)."
And leave the primary action as a plain "Install." Reserve red styling and alarming button text for situations where FPP has identified a specific security or integrity concern, so that red continues to carry meaningful signal.
-
Add some path for third-party publishers to establish provenance.
That could eventually be verified publisher identity, plugin signing, or even simply surfacing contextual signals such as plugin age and install count.
Those signals don't establish that software is safe, but they give users information that the current binary trusted/untrusted presentation does not.
I'd be glad to help with number 4 in whatever form is useful — design discussion, acting as a pilot/test case for a publisher-verification flow, or contributing implementation time.
Disclosure up front: I'm the author of PulseMesh, a third-party plugin that has been available for about two years and is currently the fourth most-installed plugin according to FPP's own opt-in usage statistics. This issue is obviously prompted by how the new install UX presents PulseMesh, but the problem isn't unique to us, and I've tried to frame it as a general design question.
First: I agree with the motivation behind the FPP 10 changes.
Plugins run as root with essentially unlimited access to the system and network, creating plugins is getting dramatically easier (including with AI-assisted development), and users should understand what they're agreeing to before installing arbitrary third-party code. Clear capability and privacy disclosure is the right direction, and the new author-provided disclosure section is a good idea.
My concern is with the language, not the disclosure. Several of the new strings go beyond stating facts and read as judgments about whether the software should be trusted:
These are different questions
The current UI collapses several distinct facts into a single trust verdict:
All five are worth disclosing to users. None of them is the same as "should you trust this software," and none individually answers it.
"Untrusted" reads as a verdict, not a status
In a narrow security sense, "untrusted" can mean "trust has not been established." Most users won't read it that way — they'll read it as "this software is regarded with suspicion."
Compare:
with:
The first describes FPP's relationship to the plugin. The second reads as a characterization of the plugin itself.
The same applies to:
The surrounding capability statement — runs as root, can read and change any setting, can reach the network — is factual. Appending "this is inherently dangerous" converts disclosure into a verdict, applied identically to every third-party plugin regardless of its history.
Taken together, "untrusted" and "inherently dangerous" communicate something significantly stronger than "this plugin is maintained by a third party and has not been verified by FPP."
"Black box" creates a disincentive for full disclosure
Closed-source software is not inherently suspicious. A plugin may legitimately contain a proprietary component while having an identified publisher, years of usage, and a large install base.
The factual disclosure:
tells users exactly what they need to know.
Changing the install button itself to red and labeling it:
reads less like disclosure and more like a recommendation against installing.
This isn't a corner case. FPPMon — currently the third most-installed plugin — is a third-party plugin in essentially the same position: it also includes proprietary software.
FPP's own opt-in usage statistics currently show FPPMon on 1,522 devices and PulseMesh on 1,325 devices, making them the third and fourth most-installed plugins in that data set. Because those statistics only include devices whose owners have enabled statistics sharing, those numbers necessarily undercount the actual install bases.
Three of the four most-installed plugins in that data set are third-party (Remote Falcon, FPPMon, and PulseMesh), and two of those — FPPMon and PulseMesh — include proprietary components. Under the current wording, all three are presented as "untrusted," while FPPMon and PulseMesh additionally receive the "black box" treatment.
There's also an incentive problem with the disclosure system itself.
The disclosure section is author-provided. PulseMesh hasn't added ours yet, so our listing currently shows "no disclosure" and a red "Install, no disclosure" button. When we add an accurate disclosure, the proprietary component will change that to the red "Install, black box included" button.
In other words, for any plugin that legitimately includes a proprietary component, there is no disclosure an author can write — however complete and honest — that results in a neutral install experience.
A disclosure system works best when accurate disclosure is the author's best strategy. Right now, accurate disclosure of proprietary software guarantees an alarming installation state.
The bigger gap: no way to establish trust
This is my main concern.
On Windows and macOS, software downloaded from the Internet can also generate strong warnings, but publishers have mechanisms for establishing provenance: code signing, notarization, identified-developer programs, and similar systems.
FPP currently has no equivalent path.
A plugin with two years of history and more than 1,300 installations even within FPP's opt-in telemetry is presented with essentially the same maximal trust language as a repository created yesterday by an unknown author.
That isn't just rough on established publishers — it also makes the warning less protective.
If every third-party plugin produces the identical worst-case warning, users learn to click through it, and the warning carries less signal on the day it actually matters. As plugin creation gets easier, the ecosystem increasingly needs the warning to differentiate between different situations, and today it can't.
Importantly, plugin age or install count shouldn't themselves be treated as proof that software is safe. But they are examples of useful context that the current binary "official" versus "untrusted" presentation doesn't communicate at all.
Concrete suggestions
Reword the trust statement to describe FPP's relationship to the plugin while keeping the capability facts.
For example:
Drop "This is inherently dangerous."
The capability statement makes the point factually and, in my opinion, more credibly.
Make the proprietary disclosure neutral.
For example:
And leave the primary action as a plain "Install." Reserve red styling and alarming button text for situations where FPP has identified a specific security or integrity concern, so that red continues to carry meaningful signal.
Add some path for third-party publishers to establish provenance.
That could eventually be verified publisher identity, plugin signing, or even simply surfacing contextual signals such as plugin age and install count.
Those signals don't establish that software is safe, but they give users information that the current binary trusted/untrusted presentation does not.
I'd be glad to help with number 4 in whatever form is useful — design discussion, acting as a pilot/test case for a publisher-verification flow, or contributing implementation time.