{"id":"07e1e4f3-6533-424d-8f60-634395b61a47","slug":"creatio-freedom-migration","kind":"mcp","name":"creatio-freedom-migration","summary":"Migrating Creatio Classic UI (7.x) code to Freedom UI (8.1+): side-by-side recipes, API mapping and silent-failure traps, with an MCP search server.","owner":"rem700","repoUrl":"https://github.com/rem700/creatio-freedom-migration","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-10-16T21:37:59.000Z","addedAt":"2026-10-21T05:21:06.354Z","logoUrl":"https://avatars.githubusercontent.com/u/70211654?u=d2d1e0ee82054d1fe4cd1403c2cdb6a664cc6ceb&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["design-media","cloud-infra","search"],"tags":["creatio","freedom-ui","migration"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-21T07:35:40.590Z","sample":false,"url":"https://conduits.dev/tools/creatio-freedom-migration","language":"JavaScript","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# creatio-freedom-migration\n\n**63 recipes for migrating Creatio Classic UI (7.x) client code to Freedom UI (8.1+).** Each\nrecipe puts the Classic UI code next to its Freedom UI equivalent. It includes an API map,\nnames what does **not** carry over one-to-one, and describes the silent failure you get from\na line-by-line translation. An MCP server lets an AI assistant search the recipes.\n\n## Why\n\nFreedom UI is not Classic UI with a new syntax. Code that is ported mechanically usually\nruns and then misbehaves without any error:\n\n- `this.get(\"X\")` was synchronous. `await request.$context.PDS_X_a1b2c3d` is async, and the\n  attribute has a new, generated name.\n- A Classic detail filtered itself by its master record. A Freedom UI list shows **every row\n  of the table** unless `modelConfigDiff` declares `dependencies`.\n- `Terrasoft.FilterGroup.add(key, filter)` throws on a duplicate key.\n  `sdk.FilterGroup.add(filter, key)` takes its arguments in the reverse order and silently\n  replaces the old filter. `addSchemaColumnFilterWithParameter` returns `void`, so using its\n  result as a filter means no filter at all.\n- Listeners released in `destroy()` pile up: cleanup belongs in the Pause handler.\n- A new record already has an `Id`, so \"no Id yet\" no longer means \"unsaved\".\n\nThe recipes pin down the version that works and cite where each claim comes from:\nacademy.creatio.com, the JS API reference, the `@creatio-devkit/common` typings, and named\ncommunity articles. Behaviour that is only observed is labelled as such.\n\n## Contents\n\n```\nRecipes/Strategy/    11   Planning, rewrite-or-keep decision tree, API cheat sheet, schema structure map,\n                          version compatibility, page replacement, coexistence, generated names,\n                          debugging, review checklists, what does not migrate with the code\nRecipes/Example/      1   A complete record page migrated end to end\nRecipes/Lifecycle/    8   init, save, validation, asyncValidate, onRender/DOM, destroy, new-record check,\n                          mixins\nRecipes/Attributes/   8   declaration, dependencies, enabled/visible/required, lookup filters,\n                          dependent lookups, field read/write, localizable strings, business rules\nRecipes/Data/         7   ESQ -> sdk.Model, filters, insert/update/delete, BatchQuery -> transactions,\n                          ServiceHelper -> HttpClientService, system settings, slow async patterns\nRecipes/Lists/        8   details -> lists, toolbar buttons, multi-select add, editable lists,\n                          default values, files, detail <-> page messaging, approvals\nRecipes/Sections/     5   section actions, filters, grid columns, mini page, modes and buttons\nRecipes/UI/           8   buttons, tabs, dialogs, body mask, custom controls -> remote modules,\n                          printables, dashboards and charts, feed and timeline\nRecipes/Messaging/    6   sandbox messages, ServerChannel, processes, current user, rights, features\nRecipes/Pitfalls/     1   Checklist of everything that breaks silently\ntools/verify/             A test page that checks the \"(observed)\" claims on your instance\n```\n\nWhere to start:\n\n1. Read `Recipes/Strategy/HowToPlanClassicToFreedomMigration.js` and decide per schema with\n   `Recipes/Strategy/RewriteOrKeepClassicDecisionTree.js`.\n2. Read `Recipes/Example/HowToMigrateACompleteRecordPage.js` to see one whole page migrated.\n3. While converting, use `Recipes/Strategy/ApiMappingReference.js` as the cheat sheet.\n4. Review the result with `Recipes/Strategy/MigrationChecklists.js` and\n   `Recipes/Pitfalls/MigrationPitfalls.js`.\n\n**Versions.** Every recipe has an `Applies:` line naming the Creatio versions it is valid for.\nWhere a recipe needs a specific `@creatio-devkit/common` service, the line names the devkit\nversion too. Creatio does not publish which devkit version each Creatio release ships;\n`Recipes/Strategy/VersionCompatibilityReference.js` explains how to check this on your\ninstance.\n\n**Unverified behaviour.** Some claims are marked \"(observed)\" because no documentation states\nthem. `tools/verify/` has a Freedom UI test page that checks most of them on your own\ninstance. Use it on a test or dev instance only.\n\n## Using it with an AI assistant\n\n```bash\ncd mcp-server\npython -m venv .venv && source .venv/bin/activate   # Windows: .venv\\Scripts\\activate\npip install -e .\nclaude mcp add creatio-migration -- <venv-python> <repo>/mcp-server/server.py\n```\n\nThen copy `skill/creatio-migration/` into `.claude/skills/` of the project you are migrating.\nThe skill tells the assistant to check the recipes before converting a Classic UI construct.\nSetup for Cursor and Claude Desktop is in [mcp-server/README.md](mcp-server/README.md).\n\nSearch by the Classic UI API you are replacing. These all find the right recipe:\n`lookupListConfig`, `sandbox.publish`, `getSectionActions`, `Terrasoft.BatchQuery`,\n`isAddMode`, `FileDetailV2`.\n\n```bash\npython mcp-server/recipe_search.py \"LookupMultiAddMixin\"   # search from the command line, no install needed\n```\n\n## The recipes are templates\n\nBefore using any of the code, replace the schema and entity names (`UsrMyEntity`,\n`UsrMyPage_FormPage`), the generated Freedom UI attribute names (`PDS_Name_a1b2c3d`), and\n**every GUID**. The GUIDs are invented on purpose.\n\n## Contributing\n\nRead [AGENTS.md](AGENTS.md) for the recipe format, then run the checks:\n\n```bash\npython tools/check_recipes.py\n```\n\nThe checks cover the header format, that both code halves are present, that a `Source:` line\nexists, the indentation, the GUIDs, the cross-references and the search regressions. CI runs\nthem on every push.\n\n## Credits\n\nThe idea of a recipe base that an AI assistant searches through an MCP server comes from\n[artemivzhenko/creatio-knowledge-base](https://github.com/artemivzhenko/creatio-knowledge-base)\nby Artem Ivzhenko. This repository contains no code from that project: the recipes, the\nsearch engine and the checks here were written for it.\n\n## License\n\n[MIT](LICENSE). Creatio is a trademark of its owner; this project is not affiliated with it.\n"}