Plugin layout
Use this layout for a plugin that provides executors, generators, and migrations. Include only the registries and implementation directories your plugin needs:src/executors/<name>/. Name its implementation
<name>.executor.ts and keep its options schema beside it as
<name>.schema.json. For example, ESLint uses lint.executor.ts and
lint.schema.json; TypeScript uses tsc.executor.ts and tsc.schema.json.
Keep executor-specific helpers in the same folder. Shared plugin helpers belong
in src/helpers; export them through package entry points when other plugins
need to reuse them. Project initializers and add generators belong in src/generators,
migration scripts belong in src/migrations, and tests stay inside the owning package’s tests directory.
Executor-only plugins do not need src/index.ts or package main/types
entries. These are repository conventions; external plugins can choose another
layout because Isox loads the paths declared in their manifests.
Building and packaging schemas
TypeScript compilation does not copy standalone JSON schemas. Configurejs:tsc assets in the plugin’s project.json to preserve their
paths under dist:
rootDir: "./src" and outDir: "./dist" in the package’s tsconfig, this
produces dist/executors/lint/lint.executor.js and
dist/executors/lint/lint.schema.json, along with dist/generators/init.js and
the optional dist/generators/init.schema.json. The asset pattern includes both
executor and generator schemas. Copy any supporting JSON files referenced by a
schema as assets too, preserving their relative paths.
Point both manifest fields at the built files:
package.json fields:
generators or migrations and their files when the plugin does not provide
those features. Keep package-level workspace
schemas, such as core’s schemas/project.schema.json, separate from executor
options schemas.
The layout above describes a plugin with a local dist directory. This
repository builds standalone packages into <repository>/dist/<package>; see
repository build outputs for workspace links,
package generation, and bootstrap behavior. In both layouts, executor and
generator schemas are copied through the configured assets.