diff --git a/content/blog/angular-internals-zonejs/index.md b/content/blog/angular-internals-zonejs/index.md
new file mode 100644
index 00000000..2d092f4d
--- /dev/null
+++ b/content/blog/angular-internals-zonejs/index.md
@@ -0,0 +1,89 @@
+---
+{
+ title: "Angular Internals: How Reactivity Works with Zone.js",
+ description: "",
+ published: '2023-03-01T13:45:00.284Z',
+ authors: ['crutchcorn'],
+ tags: ['angular', 'javascript'],
+ attached: [],
+ license: 'cc-by-nc-sa-4'
+}
+---
+
+> This article is an advanced look at how Angular works under-the-hood. This may be confusing if you're not already fairly familiar with JavaScript. If you're wanting to learn how to _use_ Angular, and haven't before, take a look at [my book "The Framework Field Guide", which teaches React, Angular, and Vue from scratch](https://framework.guide) instead.
+
+If you've been following the JavaScript framework ecosystem, you may have heard the term "Reactivity" lately; they've been a hot commodity to talk about from [SolidJS' fine-grained reactivity](https://dev.to/ryansolid/a-hands-on-introduction-to-fine-grained-reactivity-3ndf) to [Preact adding in a reactive primitive with the name of "Signals"](https://preactjs.com/guide/v10/signals/).
+
+The concept of reactivity, at least at first glance, is a straightforward one: When you change a bit of code _here_, it updates a bit of code _there_ automatically. This is commonplace within frontend frameworks, where it's imperative to re-render updated content when you update the data stored in JavaScript.
+
+During discussions of reactivity and frontend frameworks, there's one "odd duck" that stands out as a vastly different implementation from the others: Angular.
+
+Take the following button counter reactivity example in each framework:
+
+
+
+# Angular
+
+```typescript
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'my-app',
+ template: `
+
+ `,
+})
+export class AppComponent {
+ count = 0;
+
+ addOne() {
+ this.count++;
+ }
+}
+```
+
+# React
+
+```jsx
+const App = () => {
+ const [count, setCount] = useState(0);
+
+ const addOne = () => setCount(count+1);
+
+ return ;
+}
+```
+
+# Vue
+
+```vue
+
+
+
+
+
+```
+
+
+
+
+
+In this example, we can see that React uses explicit update calls (`setX`) to track when the state changes and Vue uses a proxy and a special property name (`.value`) to seemingly magically track state.
+
+But what about Angular?
+
+Angular just mutates the `count` variable and the framework seems to count the state changes. How does that work under-the-hood? What mechanism is being used to tell the template to re-render?
+
+The short answer is that Angular uses something called "Zone.js" to track all asynchronous APIs via a series of polyfills, and uses those Zones to re-render "dirty" content in Angular's tree.
+
+> What does any of that mean? That's a lot of works that doesn't seem to mean very much if you're not already in the know.
+
+I agree; so let's answer this better with a longer step-by-step explanation of how Angular does its rendering and reactivity using Zone.js.