MIGRATION SERVICE · FIXED SCOPEANGULARJS 1.xANGULAR 22A PIPELINE, NOT A CHATBOT
745files of a production AngularJS ERP migrated to working, verified Angular in 24 hours.
We run your AngularJS app through the line and hand back plain Angular your team owns — every file compiles, every screen checked in a real browser, and you get the report.
ON THE CALL: LIVE PIPELINE RUN · YOUR CODEBASE Q&A · SCOPED PLAN EITHER WAY. NO DECK.
TOTAL EFFORT YOUR SIDE: ~2H UP FRONT · HALF-DAY REVIEW · TRAINED HANDOVER
MIGRATED USING OUR SOLUTION
REFERENCE CLIENT · NAMED, NOT ANONYMIZED · FREESPACE ERP · 300+ BUSINESSES · 7 COUNTRIES
REFERENCE RUN · WHAT WENT THROUGH THE LINE
- CONTROLLERS
- 412
- DIRECTIVES
- 138
- SERVICES
- 96
- TEMPLATES
- 301
- ROUTES VERIFIED
- 87/87
- COMPILING · STRICT TS
- 100%
- ELAPSED TIME
- 24h
- FLAGGED · ISSUE REGISTRY
- 11/745
11 FLAGS PUBLISHED ON PURPOSE — A ZERO-FLAG RUN ON 745 PRODUCTION FILES WOULD BE HIDING GUESSES. THE FULL REPORT, ROUTE BY ROUTE →
SECTION 1 · OPERATING CONDITIONS
Four ways teams arrive at this page
COND. A · COMPLIANCE
An audit, pentest, or enterprise security questionnaire flagged EOL AngularJS
PCI DSS 4.0 treats end-of-life software as a control failure. The finding does not expire; the framework never patches.
COND. B · COST
The consultancy quote came in at $500K+ and 12–18 months
A rewrite priced by the hour has no incentive to end. A pipeline priced by the module does.
COND. C · TALENT
The last engineer who knows the app is leaving, or already left
Nobody hires for AngularJS in 2026. Every quarter on it narrows the bus factor and the roadmap.
COND. D · DILIGENCE
An acquirer or investor asked about the frontend stack
EOL frameworks show up in technical due diligence as risk and as a discount. A verified migration closes the line item.
ALL FOUR RESOLVE THE SAME WAY: THE APP STOPS BEING ANGULARJS. THE REST OF THIS SHEET IS HOW, AND HOW WE PROVE IT.
SECTION 2 · PROCESS
Every file parsed, typed, compiled, and run
PARSE → TYPE-EXTRACT → GENERATE UNDER COMPILER → VERIFY EVERY ROUTE IN CHROME → FLAG WHAT'S UNPROVEN
AST analysis
Every file is parsed into a full abstract syntax tree. Module graphs, DI edges, and template bindings are resolved from structure — never regex, never string matching.
Typed state extraction
$scope trees, watchers, and broadcasts are lifted into an explicit typed model: what state exists, who reads it, who writes it, and where it should live.
Compiler-in-the-loop codegen
Generated code is fed back through the Angular compiler and strict tsc on every iteration. Nothing ships that does not build. The compiler is the judge, not us.
— THE PART NOBODY ELSE DOES
Runtime verification of every route, in a real browser
The migrated app is built, served, and driven route by route through headless Chrome via the Chrome DevTools Protocol. A route passes only if it renders, throws zero console errors, and completes its network calls. “It compiles” is not the bar. “It runs” is. see it in the run log ↓
- renders without exceptions
- zero console errors
- network calls resolve
- every route, not a sample
SECTION 3 · SUPPORTED FAILURE MODES
The patterns that kill codemods
If your codebase were clean, you would have migrated already. These are the skeletons the pipeline handles today.
- $scope inheritance chains
- Values read three parents up and written by a child. The chain is resolved statically and emitted as explicit inputs, outputs, and store state.
- dynamic $injector lookups
- Service names computed at runtime. Data-flow analysis narrows the candidate set; anything unresolvable is flagged to the issue registry — never guessed.
- uib-modal dialogs
- templateUrl + controller + resolve blocks become typed Dialog components with injected data and typed close results.
- mega-files, multiple registrations
- One 6,000-line file registering 14 artifacts is split into 14 files with correct imports and no circular dependencies.
- jQuery plugins & vendor globals
- Wrapped behind typed adapters. The plugin keeps working on day one; the code around it becomes real Angular.
- run-blocks & ACL gates
- Ordering-sensitive startup logic becomes APP_INITIALIZER providers and route guards with the same semantics — verified at runtime, not assumed.
- custom form-builder engines
- $compile-driven dynamic forms map to component registries with typed field configs. The gnarliest pattern we see — and the one we ask for.
- yours, presumably worse
- Got a pattern not on this list? Send it. That is the whole point of the unit trial.
SECTION 3 · APPENDIX — CONVERSIONS INDEX · 45 SCENARIO PROJECTS
24 CONVERSION FAMILIES — EXPAND
- nested $scope chains → @Input / @Output + store
- $watch (deep) → computed()
- $q.defer / promise chains → async/await
- $timeout / $interval → effects + timers
- run-block + ACL gate → APP_INITIALIZER + guards
- factory / provider → @Injectable providers
- config + provide decorator → provideX() setup
- angular.extend mutations → immutable updates
- dynamic scope keys → typed state maps
- dynamic $injector → inject() + registry
- $sce / trustAsHtml → DomSanitizer
- $rootScope events → store signals
- ngDialog / $uibModal → MatDialog · 200+ converted
- $translate → ngx-translate
- ng-include → child components
- template theft → scoped templates
- window globals → typed adapters
- CDN lodash / moment → npm imports
- react-redux bridge → NgRx interop
- uib accordion / datepicker → Material / CDK
- drag-drop / sortable / resizable → CDK + wrappers
- signature pad → signature_pad wrapper
- ui-router states → Angular Router
- globalsearch chunks → lazy routes
SECTION 4 · DELIVERABLE
Every run emits its evidence
Build results, screen-by-screen checks, and the issue registry — what passed, and what was flagged.
PIPELINE RUN — erp-monolith · run #3 ────────────────────────────────────────────────────────────────THE FULL REPORT, ROUTE BY ROUTE →
BUILD ng build --configuration production ✓ 0 errors, 0 warnings tsc --noEmit (strict: true) ✓ 0 errors files emitted 745 / 745 ROUTES — headless Chrome via CDP, prod build /login ✓ rendered · 0 console errors · 214ms /dashboard ✓ rendered · 0 console errors · 388ms /invoices ✓ rendered · 0 console errors · 341ms /invoices/:id ✓ rendered · sampled 25 ids /inventory/transfers ✓ rendered · 0 console errors · 296ms … 82 more ✓ all passing routes verified 87 / 87
FLAGGED → ISSUE REGISTRY — 11 items src/reports/pdf-export.js jQuery jsPDF plugin wrapped behind adapter; API surface needs owner sign-off src/core/acl-run-block.js authz gate ported to route guards; timing semantics preserved — review before prod src/forms/builder-engine.js $compile registry mapped to component map; 2 of 31 field types flagged ambiguous … 8 more, each with file, reason, and suggested owner NOT MIGRATED (by agreement) bower_components/* replaced with npm equivalents where 1:1
SECTION 5 · COMPARATIVE SPECIFICATIONS
What this actually costs you today
| PATH | TIMELINE | COST | WHERE YOU END UP |
|---|---|---|---|
| Hand rewrite, in-house | 12–24 months | $500K+ | Roadmap frozen; two codebases in flight the whole time |
| Consultancy | Quarters, T&M | Open-ended | Knowledge leaves when they do |
| Extended-support subscription | Forever | $25–75K / yr | Still on AngularJS. Zero progress, compounding rent |
| SoftwareMigrationFactory.ai | Days | Fixed scope | Plain Angular your team owns, with a verification report |
PRICING: FIXED PER MODULE · QUOTED AFTER THE AUDIT · YOU SEE THE NUMBER BEFORE ANY CODE MOVES.
PUBLISHED MARKET RATES, FULL BREAKDOWN →WHEN THE OTHER THREE PATHS WIN →
SECTION 6 · MATERIALS & OWNERSHIP
You own the output. All of it.
- Plain Angular code. Standard CLI workspace, standard dependencies. A new hire who knows Angular is productive on day one.
- No proprietary runtime. No SDK, no framework of ours in your bundle, no import from our packages. Delete every trace of us and the app still builds.
- Your migrated app phones nobody home. No telemetry, no license check, no callback in the delivered code. Your relationship with us can end the day the report is delivered.
SECTION 7 · HAZARD DATA
Unpatched CVEs, shipping today in every AngularJS app
End-of-life since January 2022. Every advisory below is permanent: no patch exists, and none is coming.
| Advisory | Vulnerability | Patch status |
|---|---|---|
| 2026-06 advisory | content spoofing via [srcset] in <source> · all versions | FIX: NONE — EOL |
| CVE-2025-4690 | ReDoS via ngSanitize linky filter · all versions · WONTFIX | FIX: NONE — EOL |
| CVE-2025-2336 | SVG href sanitization bypass, content spoofing · 1.3.1–1.8.3 | FIX: NONE — EOL |
| CVE-2025-0716 | SVG image sanitization bypass · all versions | FIX: NONE — EOL |
| CVE-2024-21490 | ReDoS via ng-srcset · angular ≥1.3.0 | FIX: NONE — EOL |
| CVE-2023-26118 / -117 / -116 | ReDoS via input[url], $resource, angular.copy() | FIX: NONE — EOL |
FIELD LOG — AI DISCOVERY 2026 · ECOSYSTEM-WIDE · EOL CODE NEVER GETS PATCHED
- ANTHROPIC · CLAUDE MYTHOS / GLASSWING
- 10,000+ high/crit flaws
- 23,019 across 1,000 OSS repos
- OPENAI · AARDVARK / GPT-5
- 10 OSS CVEs assigned
- 92% detection on benchmark repos
- INDUSTRIALIZED ATTACK AGENTS
- Autonomous scan→exploit
- DeepSeek-class · KEVs hit pre-publish
Discovery is industrial on both sides now; only maintained code receives the patches. Mean time-to-exploit has gone negative (−7 days). PCI DSS 4.0 treats EOL software as an outright control failure.
SECTION 8 · NOTES FOR THE PARANOID
The paranoid questions, answered
Where does my code run during an AngularJS migration?
In an isolated, single-tenant environment provisioned for your engagement and destroyed after delivery. For regulated codebases we run the pipeline inside your VPC; your code never leaves your network.
What does the model see?
The pipeline is AST- and compiler-driven; model assistance operates inside it on scoped fragments, under a zero-retention agreement and a US/EU-only model-provider allowlist. Your code is never used for training. DPA and subprocessor list available before you send anything.
What happens with edge cases like dynamic $injector lookups?
They are flagged, not guessed. Anything the pipeline cannot prove correct lands in the issue registry with the file, the reason, and a suggested owner on your team. On the reference migration that was 11 files out of 745.
How much of my team's time does the migration need?
About two hours up front: repo access and a walkthrough of how you build and run the app. At the end, a review pass over the flagged list — typically half a day for a senior engineer. A training walkthrough of the new codebase for your Angular developers is included at handover.
Is AngularJS still safe to run in production?
AngularJS reached end-of-life in January 2022. Advisories since then — including CVE-2025-4690, CVE-2025-2336, CVE-2025-0716 and CVE-2024-21490 — will never receive patches, and PCI DSS 4.0 treats EOL software as a control failure.
Who actually does the work?
A founder-operator with 14+ years of frontend engineering across frameworks, running a deterministic pipeline. The pipeline does the scale; the human does the judgment. No offshore bench, no juniors touching your code — you talk to the person who runs the line.
SECTION 9 · FIELD MANUAL
The documents behind this page
- DOC 01The verification reportThe reference 745-file run, route by route — including the 11 flagged files and why.
- DOC 02What migration actually costsPublished market rates for every path, what drives cost, and why fixed scope changes the incentive.
- DOC 03AngularJS end of life, explainedThe permanent CVE ledger, the compliance consequences, and the four options every team has.
- DOC 04Rewrite vs ngUpgrade vs support vs pipelineThe honest comparison, including when each of the other three paths is the right answer.
SECTION 10 · NEXT ACTION
Thirty minutes. Bring the audit finding, the quote, or the module you dread.
We walk through the pipeline against your actual codebase and a real verification report, and you leave with a scoped plan — whether or not you use us.