Variable Watcher

Replace Debug.Log in Update
with a live dashboard

Stop spamming the console to check values every frame. Jahro Watcher gives you a real-time, UX-optimized dashboard right on the screen — organized, searchable, and zero-noise.

Real-time variable monitoring inside a Unity game — no console spam, no breakpoints.

From console noise to clean signal

Logging values in Update() floods your console and tanks performance. Watcher shows the same data as a clean, organized dashboard — updated only when you look.

✕ Debug.Log in Update()
// Every frame → console flood
void Update()
{
  Debug.Log("hp=" + health);
  Debug.Log("pos=" + transform.position);
  Debug.Log("vel=" + rb.velocity);
  Debug.Log("state=" + currentState);
}
✓ JahroWatch attribute
// Declare once → live dashboard
[JahroWatch("Health", "Player")]
public float health = 100f;

[JahroWatch("Position", "Player")]
public Vector3 position
  => transform.position;

[JahroWatch("Velocity", "Player")]
public Vector3 velocity
  => rb.velocity;

A dashboard, not a log stream

Variables are displayed as interactive cards, organized into groups. Tap any card to inspect the full value, type, and description.

Jahro Watcher dashboard showing real-time variable monitoring with grouped cards for game state, player stats, and scene data

Live dashboard

Variables organized by groups with real-time values in green

Jahro Watcher detail modal showing variable type, full value, and description for a battery status property

Detail inspection

Tap any card for full value, type info, and description

Built for game developers

Zero performance overhead

Values are only read when the Watcher UI is visible. No polling in the background.

Organized by groups

Variables are automatically sorted into collapsible groups with favorites at the top.

Smart type formatting

Vector3, Quaternion, Transform, Rigidbody — all formatted for quick readability.

Works on any device

Same dashboard on Android, iOS, and in the Unity Editor. Touch-friendly cards.

Up and running in 3 steps

1

Add the attribute

Mark any field or property with [JahroWatch] — one line, no extra code.

[JahroWatch("Health", "Player")]
public float health = 100f;
2

Register the object

Call Jahro.RegisterObject(this) in OnEnable. Static watchers need no registration.

void OnEnable()
{
    Jahro.RegisterObject(this);
}
3

See values live

Open the Watcher tab — your variables update in real time as the game runs.

Step 3: See values live — Open the Watcher tab — your variables update in real time as the game runs.

One class. Full visibility.

Add [JahroWatch] to the fields you care about, register the object, and you're done. No boilerplate, no separate debug UI.

PlayerController.cs
using JahroConsole;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [JahroWatch("Health", "Player", "Current HP")]
    public float health = 100f;

    [JahroWatch("Position", "Player")]
    public Vector3 position => transform.position;

    [JahroWatch("Velocity", "Physics")]
    public Vector3 velocity
        => GetComponent<Rigidbody>().velocity;

    [JahroWatch("Is Grounded", "Physics")]
    public bool isGrounded
        => Physics.Raycast(transform.position,
            Vector3.down, 0.1f);

    void OnEnable() => Jahro.RegisterObject(this);
    void OnDisable() => Jahro.UnregisterObject(this);
}

Static fields (like FPS counters or global game state) don't even need RegisterObject — just add the attribute.

Smart formatting for Unity types

Watcher automatically formats values based on their type. No custom ToString() overrides needed.

Primitives

int, float, bool, string

Vectors

Vector2, Vector3, Quaternion

Components

Transform, Rigidbody, Camera

Collections

Arrays with length + contents

Part of the Jahro debugging platform

See your game state in real time

Add Jahro via Unity Package Manager. Watcher works on Android, iOS, and every Unity platform.

Try Jahro with your team