hashcat on Linux, Windows and macOS: what the release package gives you
World's fastest and most advanced password recovery utility
At a glance
- What is it?
- hashcat is a GPU-first password recovery utility with 590 hash modes and 10 attack modes, distributed as a prebuilt release package under the MIT license. Here is how the install works, where the design shows its limits, and how it differs from John the Ripper.
- Who is it for?
- Adopt hashcat when you have a discrete GPU, a hash list you are authorised to test, and a reason to prefer a prebuilt release over compiling your own. Skip it if your only hardware is an integrated GPU or a CPU you cannot leave busy for hours, or if you need a graphical interface, because the project ships a command line tool and a wiki rather than an application.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 28, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What hashcat is for, and who actually needs it
hashcat recovers passwords from hashes. You give it a hash, or a file of hashes, plus a candidate source, and it tries candidates until one matches. The README describes it as a highly optimized password recovery platform for GPUs, CPUs, and large distributed systems, and the feature list is unusually specific: over 590 hash modes, 10 attack modes, multi-backend support across CUDA, HIP, Metal and OpenCL, and distributed cracking across an overlay network.
The audience is narrow and technical. Penetration testers working through a dump of NTLM or bcrypt hashes. Incident responders who need to know whether a leaked credential set is still live. Forensic examiners handed a disk image with a full disk encryption password they cannot guess. Researchers measuring how much entropy a policy really buys. Everyone else has a better tool for the job, usually a password manager or a reset link.
One design decision tells you a lot about the intended user. The README lists encrypted plains: you can crack a hash on behalf of someone else without being able to read the recovered password. That is a feature built for a workflow where the person running the cracker and the person who owns the credential are not the same person. It is not a feature you add for hobbyists.
How the GPU pipeline and the in-kernel rule engine fit together
The core mechanism is a candidate generator feeding a compute kernel. Candidates come from a wordlist, from stdin, or from another program, and hashcat orders them with a Markov chain so that likely candidates are tried first rather than in file order. That ordering matters more than it sounds: on a slow hash, the first ten minutes of a run determine whether you get an answer at all.
The README calls the rule engine the world's first and only in-kernel rule engine. Rules are word mangling transformations, and applying them inside the kernel rather than on the host means the GPU is not waiting on the CPU to hand it the next mangled word. That is the architectural bet the project is built on, and it explains why the same wordlist can produce wildly different throughput depending on the rule file you attach to it.
Above that sits a layer of device management. Automatic performance tuning per device, an integrated thermal watchdog, interactive pause and resume, named sessions, and restore after an interruption. The Brain component stores candidates that an earlier session already tried, so a resumed or repeated run does not spend GPU time on work that is already known to fail. For anyone running long jobs on hardware they also use for other things, the watchdog and the pause key are the parts you will actually touch.
Backend coverage is broader than most GPU tools: CUDA for NVIDIA, HIP for AMD, Metal for Apple silicon, OpenCL as the portable fallback. The practical consequence is that the same command line works across all of them, but the performance you get is not uniform, and the README does not claim it is.
Installing hashcat on Linux, Windows and macOS
The README does not walk through an installer. It says to download the latest release and unpack it where you want it, and to use 7z x when unpacking from the command line so the full file paths stay intact. That last instruction is not decoration. The release archive contains a directory structure with rules, masks, charsets and modules, and a tool that flattens paths will leave you with a binary that cannot find its own data files.
On Linux, macOS and Windows alike, the release package is the shortest path. Your platform may also provide packages, and the README points to docs/packages.md for that list. Building from source is explicitly optional. The README states that the release package is the same program and that a binary you build yourself will not crack any faster, which is a rare and useful thing for a project to say out loud. Build only if you want your own change, a fix that is in master but not yet released, or a platform with no shipped binary. BUILD.md covers the procedure, and there are separate files for Docker, WSL, Cygwin, MSYS2, Android and macOS.
Once unpacked, confirm the binary sees your hardware. The -I flag lists available devices, and it is the first thing to run because a machine with no usable OpenCL or CUDA runtime produces an empty list rather than an error you can act on.
./hashcat -IYou should see each compute device with its backend and memory. If the list is empty, fix the driver or runtime before going further.
Next, run the bundled self-test. The repository ships example0.hash, example0.sh, example400.hash and example500.hash at the top level, and docs/hashcat-example-hashes.md holds one example hash per mode. Running the example script tells you the tool works end to end on your machine before you point it at anything real.
./example0.shThat script is one of the three example scripts in the repository root, alongside example400.sh and example500.sh. It exercises a known hash and wordlist pair so you can see a successful recovery without supplying your own data.
For a first real run, the shape of the command is the same but the mode number changes with the hash type. The hash types people ask about most are documented in docs/hashcat-example-hashes.md, and the full flag list is in docs/hashcat-help.md as well as in --help. The repository's own example command files, example0.cmd, example400.cmd and example500.cmd, show the same invocations in Windows form.
./hashcat -m 0 example0.hash example.dictHere -m 0 selects the raw MD5 mode, example0.hash is the sample hash file shipped in the repository, and example.dict is the sample wordlist. The expected outcome is a recovered plaintext printed to the terminal and written into the potfile. Progress and status are printed as the run proceeds, and Ctrl-C pauses rather than discards, so a session can be resumed later.
The device problem, and the other cases where hashcat is the wrong tool
The most common failure is the one the search data keeps returning to: no devices found. hashcat is built around GPU execution, and the README's own framing is a platform for GPUs first. On a machine with only an integrated GPU, or with a discrete GPU whose OpenCL runtime is missing or mismatched, the tool either refuses to start or falls back to something so slow that the run is pointless. Installing hashcat is easy. Getting a working compute backend underneath it is the part that costs an afternoon.
The second limitation is that the README gives no rollback guidance. Named sessions and restore after an interruption are documented, and so is the potfile, but there is no documented procedure for undoing a run or reverting state. Treat a long run as something you plan for rather than something you cancel casually.
Third, a graphical interface does not exist in this repository. The README documents a command line tool, a wiki, a forum and a Discord server, and nothing more. If your team needs a point-and-click front end, you are looking at third-party wrappers the project does not document, and you are accepting whatever those wrappers do with your hashes.
Finally, consider what you are asking the tool to do. For a single bcrypt hash with a strong password, no amount of GPU time will help, and a wordlist attack is a coin flip dressed up as a method. hashcat tells you the truth quickly, which is useful, but it does not change the arithmetic.
hashcat versus John the Ripper: different bets on hardware
John the Ripper is the comparison people reach for, and the two projects optimise for different constraints. John the Ripper has a long history as a CPU-oriented cracker with a large community format set, and its jumbo build supports GPU acceleration as an addition rather than as the premise. hashcat is the reverse: GPU execution is the premise, and the CPU path exists as a fallback.
That difference shows up in day-to-day work. On a laptop with no discrete GPU, John the Ripper is the more sensible starting point because it was designed to run there. On a workstation with one or more GPUs, hashcat's device management, thermal watchdog, per-device tuning and distributed overlay are features John the Ripper does not present in the same way. The rule engines also differ in where they run: hashcat applies rules in the kernel, which is the specific claim the README makes about its own design.
The choice is also about hash coverage. hashcat documents over 590 hash modes with an example hash for each in docs/hashcat-example-hashes.md. John the Ripper's coverage is broad in a different direction, and the two sets do not overlap perfectly. If your target hash is not in hashcat's mode list, the assimilation bridge is the escape hatch: the README says you can add a hash mode in C, Python or Rust without writing a kernel, with quickstarts for the Python and Rust paths in docs/.
Maintenance, licence and what an upgrade costs you
The repository is not archived, and the last push was on 2026-09-20, one day before this article. Recent releases are close together: v7.1.0 on 2025-08-16, v7.1.1 on 2025-08-18, and v7.1.2 on 2025-08-23. That cadence suggests active work, and the docs directory carries release notes for v7.1.0 plus a full changelog in docs/changes.txt.
Upgrading is cheap by design. Because the release package is a self-contained directory rather than a system install, moving to a new version means unpacking the new archive and pointing your commands at it. The costs that do exist are elsewhere. Session and potfile state lives outside the binary, so a version change does not silently invalidate your previous runs, but you should confirm that yourself rather than assume it. Rule files, masks and charsets ship with the package, so a new release can change the behaviour of a rule set you depend on. Read docs/changes.txt before replacing a working directory.
The licence position is simple and worth stating plainly: the README says hashcat is licensed under the MIT license, with the text in docs/license.txt. MIT is permissive, which means commercial use and redistribution are permitted under its terms. That is a description of the licence, not legal advice, and if you are shipping hashcat inside a product you should read docs/license.txt and talk to someone qualified.
Editorial conclusion
Adopt hashcat when you have a discrete GPU, a hash list you are authorised to test, and a reason to prefer a prebuilt release over compiling your own. Skip it if your only hardware is an integrated GPU or a CPU you cannot leave busy for hours, or if you need a graphical interface, because the project ships a command line tool and a wiki rather than an application. Before you commit, verify two things on your own machine: that hashcat lists your device with -I, and that the mode number you intend to use appears in docs/hashcat-example-hashes.md with a sample hash you can reproduce. If the device list comes back empty, the release package is the wrong starting point and the OpenCL runtime is the thing to fix first.
Frequently asked questions
Does hashcat require a GPU?
No, but the README describes hashcat as a password recovery platform for GPUs, CPUs, and large distributed systems, and the CPU path is the slow one. The practical question is not whether it runs but whether the run finishes in a useful amount of time. Check what hardware hashcat can see with the -I flag before planning a run.
Can I use hashcat in Ubuntu?
Yes. The README lists Linux among the supported operating systems and says your platform may also provide packages, with the list in docs/packages.md. The release package is the alternative and works the same way: unpack it and run the binary from the directory.
What is hashcat written in?
The repository's primary language is C. The README also documents an assimilation bridge that lets you add a hash mode in C, Python or Rust without writing a kernel, and there are Python and Rust directories alongside the source tree.
What is the hashcat potfile?
The potfile is where recovered plaintexts are written as a run proceeds, which is why a recovered password appears in the terminal and remains available afterwards. The README lists named sessions and restore after an interruption as separate features, so the potfile is not the same thing as session state.
Is John the Ripper better than hashcat?
They optimise for different hardware. John the Ripper grew up as a CPU-oriented cracker with GPU support added, while hashcat is built around GPU execution with CUDA, HIP, Metal and OpenCL backends. Pick based on the machine you have and whether your target hash appears in hashcat's documented mode list.
What type of hash is $6$?
The README does not identify the mode number for the $6$ prefix. hashcat ships docs/hashcat-example-hashes.md with one example hash per mode, and that file is where to look up a prefix you do not recognise. Do not guess a mode number from the prefix alone.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/hashcat-hashcat)
Community notes