explaingit

col-e/recaf

7,167JavaAudience · developerComplexity · 3/5Setup · easy

TLDR

Recaf is a desktop app for opening and editing compiled Java programs, decompile, modify, and recompile JAR files without needing the original source code, including live changes to running applications.

Mindmap

mindmap
  root((Recaf))
    Core features
      Decompile JAR
      Edit bytecode
      Recompile code
    Tools
      Search across JAR
      Bytecode assembler
      Class renaming
    Advanced
      Live instrumentation
      Obfuscation handling
      CLI and scripting
    Targets
      Java apps
      Android apps
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Decompile a JAR file you received without source code and read it as Java to understand what it does.

USE CASE 2

Edit compiled code in a running Java application without restarting it using live instrumentation.

USE CASE 3

Search an entire JAR for specific strings, class references, or instruction patterns to find code of interest.

USE CASE 4

Automate repetitive reverse engineering tasks using Recaf's scripting and plugin API from the command line.

Tech stack

JavaGradle

Getting it running

Difficulty · easy Time to first run · 30min

Comes with a launcher application, no complex setup required beyond having Java installed.

In plain English

Recaf is a desktop application for opening and editing compiled Java programs without needing the original source code. When a developer or security researcher has only a JAR file, Recaf lets them examine the bytecode inside, decompile it into readable Java, make changes, and save the result. It hides low-level bytecode details like constant pool management and stack frame calculations, so the editor behaves more like a code editor than a raw binary tool. The interface includes a navigable class browser with context-sensitive menus. Multiple decompilers are bundled and can be switched between, each with configurable settings. A built-in compiler allows you to take decompiled code, edit it as Java source, and recompile it back into bytecode, even when some referenced classes are missing. For lower-level work, a bytecode assembler is included that shows the state of local variables and the stack at each instruction point, and lets you use variable names instead of numeric indices. Search tools let you find strings, numeric constants, class and method references, and instruction patterns across the entire loaded program. The tool also handles obfuscated code: it can automatically patch certain class files designed to crash other reverse engineering tools, reads JAR archives the same way the Java runtime does to avoid tricks that mislead other tools, and includes transformers for simplifying common obfuscation strategies. Class and member renaming is supported, with the ability to export those mappings for use in other tools. Recaf can attach to a running Java process and apply changes via instrumentation, which means you can modify code in a live application without restarting it. It also runs as a command-line tool, which pairs well with its scripting and plugin API for automating repetitive tasks. Both standard Java applications and Android apps are supported. The project is built with Gradle and has a launcher application for easy installation.

Copy-paste prompts

Prompt 1
I have a JAR file with no source code and want to use Recaf to read it. Walk me through loading it, navigating the class browser, and exporting a decompiled class.
Prompt 2
I want to modify a method in a running Java app using Recaf's live instrumentation. Show me the steps to attach to the process and apply a change.
Prompt 3
How do I use Recaf's search tools to find every place in a JAR that calls a specific method, then rename that method across the whole codebase?
Prompt 4
I'm dealing with an obfuscated JAR. What transformers does Recaf provide and how do I apply them to simplify the code before reading it?
Open on GitHub → Explain another repo

← col-e on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.