Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork6.3k
Add frontend render plugin system support#36099
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:main
Are you sure you want to change the base?
Conversation
wxiaoguang commentedDec 6, 2025
Don't understand why wasm is introduced and becomes a must. It's highly likely a wrong design: when you have a hammer, then everything in your eyes become nails. |
silverwind commentedDec 6, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
I'm still of the opinion that plugins should be npm packages with a package.json that declares their metadata and dependencies. I don't think it's good to create a new The big benefit of being a npm package is that these plugins can be puplished to the npm registry so be installed from there or a local folder. Take for exampleVSCode extensions, those are also npm packages at their core, withadditional package.json properties specific to extensions. |
silverwind commentedDec 6, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
WASM support is nice, but it should not be required. The entry point to a plugin should be JS function, and whether the plugin than loads a WASM module or not is the plugin's decision. |
wxiaoguang commentedDec 6, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
WASM is definitely a new abuse here, unless it could prove that it brings real benefits. |
lunny commentedDec 6, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
It's just an example. There is no special code to support wasm. It's a nature support from web browser. The benefit of wasm could allow render plugin reuse the legacy code written by other lanuages. i.e.https://github.com/xuri/excelize-wasm could render excel file in the web browser which used wasm. |
lunny commentedDec 6, 2025
Use a file name as entry is commonly and useful.
The package.json file could be in the repository of the plugin repository, but for the final dist or zip file, we don't need the extra information in the package.json. That means the manifest.json is for the runtime and package.json is for the development and I don't think the npm ecosystem could not be reused. |
wxiaoguang commentedDec 7, 2025
How the example is related to the "plugin"? Why you need to know whether a plugin is written in wasm or not? |
lunny commentedDec 7, 2025
The wasm example just show the possibility to convert legacy render code as a js plugin via wasm. I can remove the example if it's unnecessary. |
silverwind commentedDec 11, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
But then you are forcing plugin authors to maintain 2 metadata files. package.json is well-defined standard for JS packages and plugins are JS packages. package.json has flexible logic on how a package entry point is specified. I'm not saying we have to implement all thecomplex mechanisms, just the basic ones like package.json {"name":"helloworld","type":"module","exports":"./index.js",}index.js exportconstrender=()=>"hello world"; |
lunny commentedDec 11, 2025
But wouldn’t that force users to depend on Node.js? Some users may prefer developing plugins using other ecosystems or languages. Many platforms—such as Chrome—provide a metadata file format that does not require Node.js at all. |
silverwind commentedDec 11, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
No, Node.js is not required at all, your plugin loader takes the role of Node.js and is responsible for loading the module by first parsing const{render}=awaitimport(pluginUrl);constelement=document.querySelectorAll(".render-target");awaitrender(elements,data); |
silverwind commentedDec 11, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
The main benefit plugins being npm packages that they can be published to npm and sourced from there. Of course to directly install npm packages directly from the npm registry, a JS package manager like npm, pnpm or bun will be required to download the package. Packages sourced from a local directory may not require a package manager, but in practice they might as well do because many of them will need other npm dependencies to render content. |
silverwind commentedDec 12, 2025
Also to note, I guess any sufficiently complex render plugin will want to bundle and minify their code (with a bundler likehttps://github.com/rolldown/tsdown), so their entry point may for example be a |
Uh oh!
There was an error while loading.Please reload this page.
Resolve#34917