Skip to content

RFC: Qwik Community Plugins Support #191

@shairez

Description

@shairez

Discussed in #20

Originally posted by shairez September 16, 2024

What is it about?

A way to expand Qwik without increasing core size

What's the motivation for this proposal?

Problems you are trying to solve:

  • Currently the Qwik monorepo contains a lot of adapters, plugins and integrations. We would like to make sure anything that is in core stays stable over time and it's hard to do it with an ever growing number of possible integrations.

Goals you are trying to achieve:

  • Keep qwik core stable and trustworthy
  • Give a way to community contributors to integrate their package into the Qwik CLI

Any other context or information you want to share:


Proposed Solution / Feature

A Qwik plugin system.

Scanability

Every package in node_modules that starts with a specific convention like qwik- should be scanned for its qwik-plugin-manifest.json file which describes specific instructions of which files to copy, modify, etc.

Extracting some of the existing plugins from core

Separating possible integrations as "maintained by core team" (anything under the QwikDev org) or "maintained by community" (anything under the QwikCommunity org) will allow the core team to take responsibility of fewer things but make sure they are always stable / maintained.

File management

We need to brainstorm how different types of plugins will look like (usually there is a difference between the types).

Plus, we would need to modify the Qwik CLI to be aware of external integrations so we could install or add them with ease (running their script).
We would need to provide an infrastructure for copying new files and modifying existing files that are read from the plugin's manifest.

Discoverability

We need a way to list core plugins and community plugins in a searchable area under the Qwik docs


Links / References

Here are some examples for existing plugin systems from several projects:

Example for a "discover plugins" page -

(via @ianlet):
Adding this one for inspiration:

Which is the usual npm|pnpm|yarn create [...] command.

And this one for an other example of "plugin registry":

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

Upcoming

Status

In Progress (STAGE 2)

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions