docs/build-pieces/misc/migrate-pieces-to-bundles.mdx
Activepieces builds each piece into a single self-contained bundle — see Bundling Pieces for how that works. If you maintain custom pieces from before this change, update them so they conform to the new model.
| Before | Now | |
|---|---|---|
| Piece dependencies | @activepieces/shared + framework + common | framework + common only |
| Imports in piece code | @activepieces/shared and @activepieces/pieces-framework | @activepieces/pieces-framework only |
| Build output | compiled files + dependency tree | one self-contained bundle |
@activepieces/shared location | packages/shared | packages/core/shared (same package name) |
Pieces now import only from @activepieces/pieces-framework and @activepieces/pieces-common. The framework re-exports the foundation symbols (isNil, SeekPage, PieceCategory, AppConnectionType, and so on) that used to come from @activepieces/shared.
The pieces migrate command applies every change below for you:
# preview the changes without writing anything
npm run cli -- pieces migrate <piece-name> --dry-run
# apply them
npm run cli -- pieces migrate <piece-name>
--all to migrate every piece under packages/pieces.Then build the piece to verify:
npm run build-piece <piece-name>
To migrate by hand — or to see exactly what the command changes — follow the steps below.
// Before
import { PieceCategory, ExecutionType } from '@activepieces/shared';
// After
import { PieceCategory, ExecutionType } from '@activepieces/pieces-framework';
If a symbol isn't re-exported by the framework, it was server-only and shouldn't be imported into a piece. </Step>
<Step title="Update package.json dependencies and scripts"> Remove `@activepieces/shared` and move `tslib` to `devDependencies`. Add `@activepieces/core-piece-types` and `@activepieces/core-utils` — these are build-time only (they let `tsc` emit portable type declarations; your source never imports them directly). Add the `bundle` script.{
"dependencies": {
"@activepieces/pieces-common": "workspace:*",
"@activepieces/pieces-framework": "workspace:*",
"@activepieces/core-piece-types": "workspace:*",
"@activepieces/core-utils": "workspace:*"
},
"devDependencies": {
"tslib": "2.6.2"
},
"scripts": {
"build": "tsc -p tsconfig.lib.json && cp package.json dist/",
"bundle": "node ../../../../dist/packages/cli/src/index.js pieces bundle",
"lint": "eslint 'src/**/*.ts'"
}
}
{
"files": ["*.ts", "*.tsx"],
"rules": {
"no-restricted-imports": ["error", {
"patterns": [
"lodash",
"lodash/*",
"@activepieces/core-*",
"@activepieces/server*",
"@activepieces/engine",
"@activepieces/shared"
]
}]
}
}
The archive produced in packages/pieces/<type>/your-piece/dist/ is now a self-contained bundle.
</Step>
</Steps>