Tiny Online Tools logoTiny Online ToolssearchSearch tools…grid_viewAll Tools
Homechevron_rightReverse Engineering Toolschevron_rightJavaScript Dead Code AnalyzerJavaScript Dead Code Analyzer

JavaScript Dead Code Analyzer

Paste a JS bundle and find top-level functions with no static reference anywhere in the file — a heuristic reachability scan, not a certainty.

scienceHeuristic only. A function marked "likely unused" can still be called dynamically — through obj[computedName](), eval, new Function(...), or Function.prototype.call/apply on a reference chosen at runtime — in ways this static scan cannot see. Verify by hand before deleting anything.JavaScript source
Comma-separated function names to treat as reachable roots even if no reference to them is found elsewhere in the file.

Similar Tools

JavaScript Deobfuscation Helper

JavaScript Deobfuscation Helper

Reverse common static JavaScript obfuscation: inline string-array lookups, decode escapes, fold constants, drop dead branches, and turn brackets into dots.

JavaScript Obfuscator

JavaScript Obfuscator

Rename local variables, hide string literals and flatten control flow in JavaScript — entirely in your browser, nothing uploaded.

WASM Size Analyzer

WASM Size Analyzer

Find out which functions and data segments dominate a WebAssembly module's size, with an exact sorted breakdown and a visual treemap.

PE/EXE Inspector

PE/EXE Inspector

Inspect Windows PE executables and DLLs: COFF headers, sections, imports, exports and resource types, directly in your browser.

PDF Outline Editor

PDF Outline Editor

Add or replace bookmarks / outlines in a PDF file. Paste a flat list and generate a nested navigable outline tree — free and private.

Convert HEIC to JPG

Convert HEIC to JPG

Convert Apple HEIC and HEIF photos to universal JPG format directly in your browser.

PDF Signature Tool

PDF Signature Tool

Draw a signature and place it on any page of a PDF. Drag to position, resize, and download — all in your browser.

apps

More Tools

Browse our full collection of free online tools.

What this actually checks

This tool parses your JavaScript with acorn and builds a reference graph: every top-level function declaration (or const x = function(){} / const x = () => {} at the top level) becomes a node, and every place its name appears elsewhere as an identifier becomes an edge. It then computes which of those functions are reachable from a set of roots — code that runs unconditionally when the file loads: statements directly at the top level, the body of an immediately-invoked function expression (IIFE), anything assigned to module.exports / exports.x / window.x / globalThis.x, and any entry-point names you type in yourself. Everything reachable from a root, transitively, is kept; everything left over is reported.

Read this before you trust a finding

A function this tool calls "likely unused" may still be genuinely used. Static analysis cannot see through:

  • Dynamic dispatchobj[someComputedName](), table[key]() — the property name is only known at runtime.
  • eval and new Function(...) — code built from a string is invisible to an AST walk.
  • Reflectionfn.call(...), fn.apply(...) on a reference chosen dynamically, or Object.keys(obj).forEach(k => obj[k]()).

Every finding is phrased as "no static reference found", never as a fact. Treat this as a lead worth checking by hand, not a verdict — especially before deleting anything.

How to use it

Paste or load a .js file's contents into the editor. If you already know the name of your bundle's real entry function (the one your HTML calls, or a framework calls for you), type it into the entry points field so it — and everything it transitively touches — is anchored as reachable even if nothing in the file itself references it by name.

The summary shows total top-level functions, how many are reachable, and how many have no static reference. Each finding lists the function name and its line number. A separate, collapsed list shows the full reachable set with a short reason for each — an entry point, an export, a call inside an IIFE, or a reference found inside another reachable function.

Nothing you paste leaves your browser.