Skip to content

Comprehensive Angular 19 compatibility audit: 19 runtime instructions emitted by OXC that don't exist in Angular 19 #107

@BenjaminDobler

Description

@BenjaminDobler

Background

Following up on issue #105 (the ɵɵconditionalCreate fix) — after upgrading to 0.0.16 I
hit
the next crash immediately, which prompted me to do a full systematic audit of every
instruction
OXC can emit against the Angular 19.2 runtime exports. I wanted to share the complete
picture so
the team can address all the gaps at once rather than one crash at a time.

First of all — incredible work on this project, and the turnaround on #105 was genuinely
impressive. Thank you for being so responsive! 🙏


Methodology

  1. Extracted every ɵɵ-prefixed string constant from
    crates/oxc_angular_compiler/src/r3/identifiers.rs
  2. Extracted every ɵɵ-prefixed export from @angular/core@19.2.18/fesm2022/core.mjs
  3. Compared the two sets

Current blocker (crashes immediately in normal apps)

ɵɵinterpolate1 through ɵɵinterpolateV — property/attribute interpolation

After the 0.0.16 fix, the next runtime error is:

TypeError: i0.ɵɵinterpolate1 is not a function
at NavigationItemCategoryCardComponent_Template

ɵɵinterpolate / ɵɵinterpolate1ɵɵinterpolate8 / ɵɵinterpolateV do not exist in
Angular 19.2. The Angular 19 runtime uses dedicated per-binding-type instructions:

  • ɵɵpropertyInterpolate1ɵɵpropertyInterpolate8 for property bindings
  • ɵɵattributeInterpolate1ɵɵattributeInterpolate8 for attribute bindings

The get_interpolate_instruction() function in identifiers.rs maps expression counts
to
ɵɵinterpolate1 etc., but these instructions are not present in the Angular 19.2
runtime
export list.


High priority (likely to affect real apps)

ɵɵdomProperty → should be ɵɵhostProperty

OXC defines DOM_PROPERTY = "ɵɵdomProperty" but Angular 19.2 exports ɵɵhostProperty
for
host element property binding. This is a name mismatch that will cause crashes in any
component
using host property bindings.

ɵɵconditionalCreate / ɵɵconditionalBranchCreate

Already fixed in 0.0.16 — listing here for completeness.


Forward-looking instructions (not yet in Angular 19.2)

These are not bugs per se — they appear to be OXC implementing ahead of the Angular 20
roadmap.
They won't cause issues unless the code paths that emit them are triggered in Angular 19
projects.
Documenting them here for awareness:

DOM-only rendering mode (8 instructions — entire family absent from Angular 19.2)

ɵɵdomElement, ɵɵdomElementStart, ɵɵdomElementEnd, ɵɵdomElementContainer,
ɵɵdomElementContainerStart, ɵɵdomElementContainerEnd, ɵɵdomTemplate,
ɵɵdomListener

New animation API (4 instructions)

ɵɵanimateEnter, ɵɵanimateLeave, ɵɵanimateEnterListener, ɵɵanimateLeaveListener

New control flow (2 instructions)

ɵɵcontrol, ɵɵcontrolCreate

ARIA property binding (1 instruction)

ɵɵariaProperty


Full summary table

Instruction(s) Present in Angular 19.2? Impact
ɵɵinterpolate, ɵɵinterpolate1ɵɵinterpolateV ❌ Missing Crashes on any interpolated property/attribute binding
ɵɵdomProperty ❌ Missing (should be ɵɵhostProperty) Crashes on host property bindings
ɵɵdom* (8 instructions) ❌ Missing Future DOM-only mode, not triggered in normal apps
ɵɵanimate* (4 instructions) ❌ Missing Future animation API
ɵɵcontrol, ɵɵcontrolCreate ❌ Missing Future control flow
ɵɵariaProperty ❌ Missing ARIA bindings

Suggestion

It might be worth adding a CI check or test fixture that compiles a representative
Angular 19.2
app and verifies no emitted instructions are absent from the target runtime — this would
catch
these mismatches before they reach users. Happy to help if useful!


Environment

  • @oxc-angular/vite: 0.0.16
  • @angular/core: 19.2.18
  • Platform: macOS (darwin arm64)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions