1"use strict";(globalThis.webpackChunkvoiden_docs=globalThis.webpackChunkvoiden_docs||[]).push([[5576],{6795:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"developer-tools/create-plugin/create-plugin-installation","title":"Installation","description":"@voiden/create-plugin does not need to be installed. Use npm create or npx to run the scaffolder directly \u2014 it downloads on first use and never clutters your global packages.","source":"@site/docs/developer-tools/create-plugin/installation.md","sourceDirName":"developer-tools/create-plugin","slug":"/developer-tools/create-plugin/create-plugin-installation","permalink":"/docs/developer-tools/create-plugin/create-plugin-installation","draft":false,"unlisted":false,"editUrl":"https://github.com/VoidenHQ/docs/tree/main/docs/developer-tools/create-plugin/installation.md","tags":[],"version":"current","lastUpdatedAt":1780486546000,"sidebarPosition":2,"frontMatter":{"id":"create-plugin-installation","title":"Installation","sidebar_label":"Installation","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Overview","permalink":"/docs/developer-tools/create-plugin/create-plugin-overview"},"next":{"title":"Start Building","permalink":"/docs/developer-tools/create-plugin/create-plugin-start-building"}}');var l=t(4848),r=t(8453);const s={id:"create-plugin-installation",title:"Installation",sidebar_label:"Installation",sidebar_position:2},o=void 0,a={},d=[{value:"Create a plugin",id:"create-a-plugin",level:2},{value:"Run interactively",id:"run-interactively",level:2},{value:"After scaffolding",id:"after-scaffolding",level:2},{value:"Requirements",id:"requirements",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",hr:"hr",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"@voiden/create-plugin"})," does not need to be installed. Use ",(0,l.jsx)(n.code,{children:"npm create"})," or ",(0,l.jsx)(n.code,{children:"npx"})," to run the scaffolder directly \u2014 it downloads on first use and never clutters your global packages."]}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"create-a-plugin",children:"Create a plugin"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"# Recommended\nnpm create @voiden/plugin my-plugin\n\n# Using npx\nnpx @voiden/create-plugin my-plugin\n"})}),"\n",(0,l.jsxs)(n.p,{children:["Replace ",(0,l.jsx)(n.code,{children:"my-plugin"})," with the folder name you want the project created in."]}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"run-interactively",children:"Run interactively"}),"\n",(0,l.jsx)(n.p,{children:"If you omit the project name, the CLI will prompt you for it:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"npm create @voiden/plugin\nnpx @voiden/create-plugin\n"})}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"after-scaffolding",children:"After scaffolding"}),"\n",(0,l.jsx)(n.p,{children:"Once the CLI finishes, follow the printed next steps:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-bash",children:"cd my-plugin\nnpm install\nnpm run build # compile renderer + main-process bundles\nnpm run zip # package \u2192 dist/my-plugin.zip\n"})}),"\n",(0,l.jsx)(n.p,{children:"Then open Voiden and install the zip:"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsxs)(n.strong,{children:["Extensions \u2192 \u22ef \u2192 Install from file \u2192 ",(0,l.jsx)(n.code,{children:"dist/my-plugin.zip"})]})}),"\n",(0,l.jsx)(n.p,{children:"Your plugin is now live inside Voiden."}),"\n",(0,l.jsx)(n.hr,{}),"\n",(0,l.jsx)(n.h2,{id:"requirements",children:"Requirements"}),"\n",(0,l.jsxs)(n.table,{children:[(0,l.jsx)(n.thead,{children:(0,l.jsxs)(n.tr,{children:[(0,l.jsx)(n.th,{children:"Requirement"}),(0,l.jsx)(n.th,{children:"Version"})]})}),(0,l.jsxs)(n.tbody,{children:[(0,l.jsxs)(n.tr,{children:[(0,l.jsx)(n.td,{children:"Node.js"}),(0,l.jsx)(n.td,{children:"18 or higher"})]}),(0,l.jsxs)(n.tr,{children:[(0,l.jsxs)(n.td,{children:[(0,l.jsx)(n.code,{children:"zip"})," on PATH"]}),(0,l.jsxs)(n.td,{children:["Pre-installed on macOS/Linux. On Windows, use WSL or ",(0,l.jsx)(n.a,{href:"https://www.7-zip.org/",children:"7-Zip CLI"})]})]})]})]}),"\n",(0,l.jsx)(n.admonition,{title:"No global install needed",type:"tip",children:(0,l.jsxs)(n.p,{children:[(0,l.jsx)(n.code,{children:"npm create"})," and ",(0,l.jsx)(n.code,{children:"npx"})," both pull the latest version automatically. You will always scaffold with the most up-to-date template without any manual update step."]})})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>o});var i=t(6540);const l={},r=i.createContext(l);function s(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.