Replies: 5 comments 10 replies
|
@Caelestis94 @Kingproone fyi, lets start the discussion :) |
|
I did some thinking, do excuse my use of lists here to structure my thoughts lol 1. Full AppGrid extension ecosystem (current proposal)Pros
Concerns
2. Improve KRunner plugin contribution ergonomics insteadInstead of introducing a new extension runtime, reduce the friction around existing KDE/KRunner development. Examples:
Pros
Concerns
3. Hybrid / bridge approachAppGrid exposes a lightweight extension layer, but leverages KRunner/KDE infrastructure underneath where possible instead of replacing it. Example idea:
Pros
Concerns
A full extension ecosystem makes more sense if AppGrid eventually grows beyond being tightly coupled to KDE/KRunner concepts. Right now though, AppGrid sits right in the middle of the KDE ecosystem, so there’s naturally a question of how much should extend existing KDE infrastructure vs build parallel abstractions on top of it. “When in Rome…” basically 😄 PS : Not that a full extension infra feature doesn't sound exciting to build, it does and that's the trap lol. |
|
heads up.. I'm almost done refactoring the core application, which puts us in a position to actually consider this topic. A few small pieces remain, but this refactor was long overdue, and now the core functionality is finally in place. |
|
will not do. |




Uh oh!
There was an error while loading. Please reload this page.
Working on adding an extension system to AppGrid so the community can ship new search providers and quick commands (web search, conversions, lookups, custom workflows) without touching the core.
What this looks like for users:
gh,wiki,color, …) and the matching extension takes over the rest of the line and shows results.What becomes possible:
Community-requested prefixes like #124 (system status
s:) and #125 (running processesp:) are exactly the shape this is designed for. Today they would have to land in the core; with extensions they become opt-in installs anyone can write and ship.How well prove the API:
First step is converting some of AppGrids own prefix commands into extensions running on the same engine third parties will use. If the API can host our own features cleanly it can host yours. The launcher core (grid, search, favorites, categories) stays native; only the command-shaped pieces move.
Runtime and isolation:
The idea is to run extension code in QJSEngine, Qts built-in JavaScript engine. It ships inside Qt6Qml (zero new dependency) and starts with zero ambient authority, meaning no filesystem, no network, no shell, no node access by default. Anything an extension can do comes from a capability the manifest asked for and the user approved. Smaller attack surface than starting with a full runtime and clawing things back. The capability bridge maps cleanly onto Qt objects so the host code stays small and reviewable.
On top of the engine we could harden further by launching the extension host inside bubblewrap, the unprivileged sandbox Flatpak already uses under the hood. That gives an OS-level boundary (no home, no display socket, no D-Bus, no network unless the manifest grants it) so even if the engine were ever subverted the damage stays contained. Treated as an extra belt on top of the suspenders.
Why not Node/Bun + React the way Raycast and friends do it:
Tradeoff to be honest about: QJSEngine is ES2016, which is older than modern JavaScript and missing some library methods authors are used to. Extensions get written in TypeScript and the registry tooling transpiles down so this is mostly invisible to authors, but it is a real ceiling. If it ever becomes painful enough we revisit by adopting QuickJS-ng, but that costs a new C dependency every distro packager has to carry and a hand-written bridge, so its not the default.
Why this is worth doing:
Open ideas (not decided):
Timing:
Starting this in the 1.9.0 cycle as soon as 1.8.0 ships.
Looking for thoughts and ideas. What would you want to build with this? What worries you about it?
All reactions