Skip to content

Upgrading

This page documents breaking changes, new features, and migration steps for releases that require your attention when upgrading. New versions are listed from newest to oldest.

The project now uses react-jsonschema-form v6. Modules that define UI as a formSchema should review the breaking changes below.

  • enumNames — Use ui:enumNames in UiSchema instead of enumNames on the schema
  • idSchema, formContext, classNames, themes, callbacks — see the upgrade guide for details

See the 6.x Upgrade Guide for full details.

Major release introducing Cloudflare Workers support, Express 5 upgrade, and architectural improvements.

  • Action required: Test your application thoroughly after upgrading
  • Potential issues: Some third-party middleware may need updates, subtle error handling differences
  • Action required: If using S3 file processing, manually install:
    Terminal window
    npm install @aws-sdk/client-s3 @aws-sdk/s3-request-presigner
  • Benefit: Smaller bundle size for apps not using AWS S3

All functions now follow the parameter object pattern (also known as an options object or named parameters via destructuring).

This means functions that previously took several positional arguments now accept a single options object — destructured in the signature — which improves readability and makes optional parameters easier to manage.

Before:

// positional parameters
getCrowdinFiles: (projectId: number, client: Crowdin, appRootFolder?: SourceFilesModel.Directory, config?: any, mode?: CrowdinFilesLoadMode) => Promise<TreeItem[]>;

After:

// parameter object (destructured)
getCrowdinFiles: (options: {
projectId: number;
client: Crowdin;
rootFolder?: SourceFilesModel.Directory;
settings?: any;
mode?: CrowdinFilesLoadMode;
}) => Promise<TreeItem[]>;

Example:

Before:

configuration.projectIntegration.cronJobs = [
{
expression: '*/10 * * * * *',
task: (projectId, credentials, rootFolder, settings) => {
console.log(`Running background task for project: ${projectId}`);
console.log(`Api credentials: ${JSON.stringify(credentials)}`);
console.log(`App config: ${JSON.stringify(settings)}`);
console.log(rootFolder ? JSON.stringify(rootFolder) : 'No root folder');
}
}
];

After:

configuration.projectIntegration.cronJobs = [
{
expression: '*/10 * * * * *',
task: ({ projectId, credentials, rootFolder, settings } = {}) => {
console.log(`Running background task for project: ${projectId}`);
console.log(`Api credentials: ${JSON.stringify(credentials)}`);
console.log(`App config: ${JSON.stringify(settings)}`);
console.log(rootFolder ? JSON.stringify(rootFolder) : 'No root folder');
}
}
];

List of all affected functions (some functions that already used parameter objects were renamed or had parameter names updated):

Updated functions (now accept a parameter object)

Section titled “Updated functions (now accept a parameter object)”

These functions now accept a single destructured options object (e.g., fn({ a, b, c })).

  • decryptCrowdinConnection
  • establishCrowdinConnection
  • log
  • onError
  • onUninstall
  • saveMetadata
  • aiPromptProvider
    • compile
  • aiProvider
    • chatCompletions
  • aiRequestPreCompile
    • processRequest
    • processStream
  • aiTools
    • toolCalls
  • automationAction
    • execute
    • validateSettings
  • customMT
    • translate
File processing (modules: customFileFormat, filePreImport, filePostImport, filePreExport, filePostExport, fileTranslationsAlignmentExport)
Section titled “File processing (modules: customFileFormat, filePreImport, filePostImport, filePreExport, filePostExport, fileTranslationsAlignmentExport)”
  • buildFile
  • exportStrings
  • fileProcess
  • parseFile
  • crowdinWebhookInterceptor
  • crowdinWebhooks
  • getAuthorizationUrl
  • getConfiguration
  • getCrowdinFiles
  • getFileProgress
  • getIntegrationFiles
  • integrationWebhookInterceptor
  • integrationWebhooks
  • matchCrowdinFilesToIntegrationFiles
  • normalizeSettings
  • onLogout
  • performGetTokenRequest (oauthLogin)
  • performRefreshTokenRequest (oauthLogin)
  • task
  • updateCrowdin
  • updateIntegration
  • validateSettings
  • D1 Database: d1Config for serverless SQL database
  • Custom Cron: cron option for Workers scheduled events
  • File Storage: fileStore interface for external storage (S3, R2, etc.)
  • Assets: assetsConfig for Workers Assets integration, assetsPath for custom static directory
  • Webhooks: deferResponse: true required for proper Workers execution
  1. Update package.json: "@crowdin/app-project-module": "^1.0.0"
  2. Install AWS SDK if needed: (see breaking changes above)
  3. Test Express 5 compatibility
  • Updated: Express 4 → 5, React 18 added (internal)
  • Moved to optional: AWS SDK packages