CFR
benf.org
What it is
CFR is a free Java decompiler that reconstructs Java source from Java class files. It can process individual named classes, classes found on a classpath, or a whole JAR, and the command-line tool can place output in a chosen directory with the --outputdir option. Decompilation behavior can be adjusted through command-line options or an options file. The maker says CFR handles many features from Java 9, 12, and 14, and it can attempt class files from other JVM languages; those are rendered as Java rather than their original language. CFR is written in Java 6 and is said to run wherever Java 6 does. It is available as a downloadable JAR, through Maven, and from GitHub. The FAQ notes an API from version 0.135, and the project repository identifies the license as MIT. CFR handles bytecode rather than native code. Its maker also notes that some inputs fall into edge cases where output may be poor. There are no paid plans or usage limits stated.
Spec sheet
- Purpose
- CFR is a Java decompiler that converts Java class files back into Java source.Read 8 Oct 2026 · benf.org
- API
- The FAQ states that CFR has an API as of version 0.135.Read 8 Oct 2026 · benf.org
- Support
- The maker invites users to email reports of problems and directs bug reports to the GitHub issue tracker.Read 8 Oct 2026 · benf.org
- License
- The maker’s FAQ directs users to the project README for its license; the project repository identifies the license as MIT.Read 8 Oct 2026 · github.com
- Configuration
- Decompilation can be customized with command-line options or an options file.Read 8 Oct 2026 · github.com
- Distribution
- CFR is available as a downloadable JAR, through Maven, and from the GitHub repository.Read 8 Oct 2026 · benf.org
- Java support
- The maker says CFR can decompile modern Java features, including much of Java 9, 12, and 14.Read 8 Oct 2026 · benf.org
- JVM languages
- CFR can also attempt to turn class files from other JVM languages back into Java.Read 8 Oct 2026 · benf.org
- Known limitation
- The maker says CFR has edge cases and may produce poor results for some inputs.Read 8 Oct 2026 · benf.org
- Output
- The command-line tool can emit decompiled files to a specified output directory using --outputdir.Read 8 Oct 2026 · benf.org
- Output language
- For class files from other JVM languages, CFR generates Java output rather than the original language.Read 8 Oct 2026 · benf.org
- Runtime
- CFR is written in Java 6 and the maker says it will work anywhere Java 6 runs.Read 8 Oct 2026 · benf.org
- Support limitation
- The maker asks users not to submit class files they do not own the copyright to.Read 8 Oct 2026 · benf.org
- Usage
- CFR can decompile named class files or classes on a classpath, and can process an entire JAR by providing its path.Read 8 Oct 2026 · benf.org
Plans and prices
Strong points and limits
Strong points
- Free, with no usage limits stated
- Processes class files, classpaths, and JARs
- Offers command-line and options-file customization
- Provides an API as of version 0.135
Limits
- Does not decompile native code
- Other JVM languages produce Java output
- Some edge cases may yield poor results
Who it suits
CFR suits developers who need to inspect or recover Java source from class files or JARs. It may also suit users working with other JVM-language bytecode who can use Java output.
Verdict
CFR offers a focused command-line route from Java bytecode to Java source, with JAR processing and adjustable options. It is free, but results can be imperfect for some inputs and it does not handle native code.
Where Specifiction places it
- Reverse Engineering Tools#10 of 738.2
- Decompiler Software#5 of 248.3