Join our Newsletter — 33% off our NHI Course
Home› Glossary› Cyber Security› Undead Code
Cyber Security

Undead Code

← Back to Glossary
By NHI Mgmt Group Updated September 29, 2026 Domain: Cyber Security

Undead code is code that appears unused in the local component but is still called from somewhere else in the codebase. In React, this often happens when a method is exposed through props, callbacks, or external references. It is dangerous because a simple search inside one file can falsely suggest safe removal.

What Makes Undead Code Dangerous?

Undead code is deceptive because the local file or component can look unused even while other parts of the system still depend on it. The main danger is accidental deletion during cleanup, refactoring, or dead-code elimination, especially in component-based codebases where references are indirect.

This pattern usually appears when a function is exported, passed as a callback, injected through props, or reached through dynamic references rather than direct in-file calls. That makes simple text search or local static review insufficient on its own, because the true call path may live outside the component that seems inactive.

Where Undead Code Commonly Appears

Undead code is most familiar in front-end applications, but the underlying problem can occur anywhere code is referenced indirectly. React is a common example because methods may be surfaced through props or reused by parent components, hooks, event handlers, or external consumers that are not obvious from the local file.

It also shows up in libraries, shared utility modules, plugin systems, callback-driven APIs, and codebases that rely on dependency injection or runtime composition. In those environments, a symbol can appear dead from one viewpoint while still being part of an active execution path elsewhere.

The practical issue is not only maintainability. Code that looks dormant may still carry business logic, access checks, data transformations, or side effects, so removing it can create regressions that are difficult to trace back to the cleanup change.

How Teams Misread It

Undead code is often confused with genuinely dead code, but the distinction matters. Dead code has no live callers; undead code is still reachable, just not from the local context where the review is happening.

That difference is why automated “unused” flags, IDE hints, and scoped searches need human verification. In modular systems, a file can be locally quiet while remaining globally important, and the absence of a nearby reference does not prove the code is safe to delete.

For reviewers, the main failure mode is overconfidence in narrow visibility. A cleanup decision based only on one component, one package, or one repository slice can miss a caller in another layer, especially when APIs are wired through configuration, imports, inversion of control, or event registration.

Safer Ways to Evaluate It

The right response is to trace reachability from the outside in, not to assume that local silence equals obsolescence. A dependable review looks for exported members, callback registration, indirect invocation, cross-package references, and runtime wiring before declaring code unused.

That is especially important in systems where refactors are frequent or ownership is distributed, because undead code often survives precisely where no single engineer has a complete mental model of the call graph. Good removal decisions depend on evidence from the full application path, not just a single file search.

In practice, teams benefit from treating “appears unused” as a hypothesis, not a conclusion. The safe default is to confirm global reachability first, then remove only when the code is demonstrably unreachable across the whole system.

Deepen Your Knowledge

Sign up to our weekly newsletter — get 33% off our NHI Foundation Level Course

    NHIMG Editorial Note
    Reviewed and updated by the NHIMG editorial team on September 29, 2026.
    NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org