Tired of Console Logs? Meet Angular’s Signal Graph

August 21, 2025 | 8 Minute Read

Angular recently released something pretty neat: a new debugging tool that changes everything about how we understand our applications. It’s called the Signal Graph, and it was introduced in Angular 20.1 just a few months ago. If you’ve ever felt like you’re debugging in the dark, this tool will flip the lights on.

The Problem: Debugging in the Dark

As Angular developers we’re often left wondering:

  • When you click a button, which components update?
  • Which signals recalculate?
  • What’s the order of operations?

Up until now, we’ve had to rely on console logs, breakpoints, and a lot of guesswork. But not anymore.

Let’s check it out!

Install Angular DevTools and Enable the Signal Graph

First, you’ll need Angular DevTools.

If you don’t already have it, grab it from the Chrome Web Store or Firefox Add-ons.

Just search for “Angular DevTools” and hit install.

Once installed, open your app in development mode, head into your browser’s DevTools, and select the “Angular” tab:

Pointing out the Angular tab in the DevTools

If you don’t see the Angular tab, make sure you’re running your app in development mode, not production.

Because the Signal Graph is still experimental, you’ll need to enable it in the settings menu:

Enabling the Angular Signal Graph in the DevTools

Once that’s done, you’re ready to go.

Using the Signal Graph

Let’s look at the simple counter app that I created for this tutorial:

Example of a very simple counter app in Angular

To use the Signal Graph, you’ll first need to select the component that you want to inspect in the tree:

Selecting the counter component in the DevTools

In this case it’s pretty easy, we only have the counter component, so we’ll select it.

Then we just need to click the “Show Signal Graph” button:

Clicking the Show Signal Graph button in the DevTools to display the Signal Graph for the counter component

Now you’ll see a beautiful graph of all the signals in this component:

The Signal Graph showing all of the signals in the counter component

When we click the “+1” button, the signals light up, showing exactly what updates when we interact with our app:

Interacting with the counter component and seeing the Signal Graph update in real time

Signal Types and Colors

You’ll notice that signals are shown in different colors:

The lines between boxes represent data flow, like a family tree for your app’s state.

Explore Signal Details

Click on any signal to view more details:

Clicking on a signal in the Signal Graph to view more details

You can see the following details:

  • Name → The name of the signal
  • Type → signal, computed, effect, etc.
  • Epoch → how many times it has changed since the app started
  • Current value

Now, as you interact with the app, you can see both the “value” and the “epoch” updating in real time:

Interacting with the counter component and seeing the Signal Graph update in real time

Spotting a Broken Signal

Here’s where Signal Graph shines.

You’ll notice that a computed “double” signal always stays at 0.

And in the graph, you don’t see a connection from “count” to “double”:

The Signal Graph showing a broken dependency

That missing connection is a red flag, the graph visually shows that the dependency isn’t wired correctly.

This makes it easy to spot bugs that would be frustrating to track down otherwise.

Fixing the Computed Signal

After checking the code, we find the culprit: instead of reading the “count” signal, the computed “double” was hardcoded with a 0:

export class CounterComponent {
    protected count = signal(0);
    ...
    protected double = computed(() => {
        const currentValue = 0; // This should be this.count()
        return currentValue * 2;
    });
}

By updating the code to properly read the “count” signal, we should be able to fix this:

export class CounterComponent {
    protected count = signal(0);
    ...
    protected double = computed(() => {
        const currentValue = this.count();
        return currentValue * 2;
    });
}

After saving, the Signal Graph now shows the connection between “count” and “double”:

The Signal Graph showing the correct dependency

And then, when we click the button, both “count” and “double” light up, and the UI updates as expected:

The Signal Graph showing the correct dependency and the UI updating as expected

Wrap-Up & Key Takeaways

And there it is, the Signal Graph turned debugging from guesswork into crystal-clear vision.

With it, we:

  • Spotted a broken dependency.
  • Fixed the bug.
  • Instantly confirmed the results visually.

The more signals your app has, the more powerful this tool becomes.

So give it a try, it’s like switching on the lights in a dark room.

If this saved you some console.logs, don’t forget to subscribe for more Angular deep dives.

Additional Resources