OWASP Juice Shop: A Deliberately Vulnerable Web App for Security Training and Tool Testing
OWASP Juice Shop: Probably the most modern and sophisticated insecure web application.
At a glance
- What is it?
- OWASP Juice Shop is a modern, intentionally insecure web application designed for security training, awareness demos, CTFs, and testing security tools. This review covers its setup, architecture, limitations, and maintenance considerations.
- Who is it for?
- Adopt OWASP Juice Shop if you run security trainings, awareness demos, CTFs, or need a realistic target to test security tools. It is not for production use or for learning secure coding practices, as it is intentionally vulnerable.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Problem Juice Shop Solves and Who It Is For
OWASP Juice Shop is a deliberately insecure web application. It exists to give security trainers, penetration testers, and CTF organizers a realistic target that contains vulnerabilities from the OWASP Top Ten and many other real-world flaws. The README describes it as 'the most modern and sophisticated insecure web application.' That is not marketing fluff; it is a practical tool. If you are teaching someone how SQL injection works, or you need a safe environment to test a vulnerability scanner, Juice Shop gives you a full web shop with products, user accounts, and a checkout flow, all wired to fail in interesting ways. It is not for building a real store. It is for breaking things on purpose, and it is built to make that breaking educational and repeatable.
How Juice Shop Works: Architecture and Vulnerability Coverage
The application is a standard Node.js web app written in TypeScript. The repository layout and README indicate a typical Express-style server with a SQLite database, as hinted by the packaged binaries for sqlite3. The vulnerabilities are not bolted on; they are woven into the application logic. The README states it encompasses the entire OWASP Top Ten along with other flaws. That means you get a coherent shopping site where each vulnerability has a place in the user journey. For example, a product search might be injectable, a comment field might store XSS, and the checkout process might have a broken access control. The challenges are tracked in the app, so a trainee can see which vulnerabilities they have exploited. The architecture is designed to support both manual exploitation and automated scanning, which is why it is a common guinea pig for security tools. The data flow is typical: a browser sends HTTP requests to the server, the server processes them with vulnerable code, and the database stores state. The realism comes from the fact that the flaws are not isolated; they interact with each other, just like in a real application.
Getting Juice Shop Running: Commands and Config Options
The README gives several ways to run Juice Shop. The simplest is from sources. You need Node.js installed, then you run `git clone https://github.com/juice-shop/juice-shop.git --depth 1`, `cd juice-shop`, `npm install`, and `npm start`. That starts the app on `http://localhost:3000`. For a quick test, the Docker route is faster: `docker pull bkimminich/juice-shop` and then `docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop`. There are also packaged distributions for Windows, macOS, and Linux, which include binaries for sqlite3 and libxmljs2 bound to the OS and Node.js version. If you use Vagrant, you can clone the repo and run `cd vagrant && vagrant up` to get an instance at `192.168.56.110`. One important config note: some challenges require an external AI/LLM provider. The README points to documentation for setting up local or cloud-based AI providers, which means you cannot complete every challenge out of the box without that dependency. That is a real configuration step, not just a plug-and-play experience.
Node.js Compatibility and Distribution Constraints
Juice Shop officially supports specific Node.js versions, aligned with the Node.js LTS schedule. The README table shows that Node.js 26.x and 24.x are supported and tested, while 25.x is supported but not tested, and 23.x is not supported at all. This matters if you plan to run from sources or use a packaged distribution. The packaged distributions are only offered for Node.js 24.x, and only for x64 architectures. Docker images are available for `linux/amd64` and `linux/arm64` from the `master` branch, with a `snapshot` tag for the `develop` branch. If you are on an older Node.js version, or on a non-x64 platform, you will have to use Docker or compile from source, which may introduce friction. The README warns that the packaged binaries are bound to the OS and Node.js version used during `npm install`, so you cannot swap them across platforms. This is a concrete constraint that can trip up a quick setup.
A Real Limitation: The AI/LLM Dependency for Some Challenges
Not every vulnerability in Juice Shop is self-contained. The README explicitly states that some challenges require an AI/LLM provider to work properly. That is a significant limitation if you are running an offline training environment or a CTF without internet access. You cannot just spin up the Docker container and expect every challenge to be solvable. You have to configure an external dependency, either a local model or a cloud provider, following the companion guide. This adds setup complexity and a potential cost if you use a paid API. For a tool that is supposed to be a low-friction training aid, this is a notable hurdle. It also means that the 'most sophisticated insecure web application' is not fully self-contained. If your goal is to demonstrate classic web vulnerabilities without any external services, you may need to skip those challenges or invest time in setting up a local AI provider.
Alternative Approaches: Other Insecure Web Apps and Their Differences
There are other deliberately vulnerable applications, but they take different approaches. For example, OWASP WebGoat is a Java-based training application that provides a structured set of lessons, each focusing on a specific vulnerability. WebGoat is more like a classroom exercise, with guided hints and a linear progression. Juice Shop, in contrast, is a full application that you have to explore and exploit organically. There is no lesson plan built in; you have to discover the vulnerabilities yourself. Another alternative is OWASP DVWA (Damn Vulnerable Web Application), which is a PHP/MySQL app with a simpler interface and a security level setting that changes the difficulty of each vulnerability. DVWA is easier to set up for a beginner, but it lacks the realism and breadth of Juice Shop. The key difference is that Juice Shop aims to be a modern web application with current frameworks and patterns, while WebGoat and DVWA feel more like lab exercises. If you want a realistic target that mimics a real e-commerce site, Juice Shop is closer. If you want structured lessons, WebGoat is a better fit.
Maintenance and Upgrade Costs, and License Implications
Juice Shop is actively maintained. The repository shows regular releases, with v20.2.0 pushed in August 2026, and the project is not archived. That means you can expect updates that add new challenges, fix bugs, and keep up with Node.js LTS versions. However, maintenance is not free. If you run from sources, you have to run `npm install` again when you pull new code, and you may need to upgrade your Node.js version to stay compatible. The README states that Node.js 23.x is not supported, so if you are on that version, you will be stuck on an older release or have to upgrade. The Docker images are rebuilt regularly, so pulling the latest tag is easy, but you need to check the architecture support. The license is MIT, which is permissive. You can use, modify, and distribute the code freely, even in commercial training. But note that the project is an OWASP flagship, so there is an expectation of responsible use: it is not meant to be deployed as a real application. The license does not restrict that, but the project's purpose does. The README also mentions a demo instance, but it warns that it is not for hacking and has no guaranteed uptime, so you should not rely on it for testing.
Editorial conclusion
Adopt OWASP Juice Shop if you run security trainings, awareness demos, CTFs, or need a realistic target to test security tools. It is not for production use or for learning secure coding practices, as it is intentionally vulnerable. Before adopting, verify the Node.js version compatibility, check the AI/LLM provider requirements for certain challenges, and confirm that the packaged distribution or Docker image matches your OS and architecture. Avoid it if you need a stable, secure application for real-world use.
Community notes