{"id":28437001,"url":"https://github.com/ronin-rb/ronin-app","last_synced_at":"2025-10-30T04:41:07.246Z","repository":{"id":152903509,"uuid":"620551367","full_name":"ronin-rb/ronin-app","owner":"ronin-rb","description":"A local web interface for Ronin.","archived":false,"fork":false,"pushed_at":"2025-04-22T02:06:55.000Z","size":422,"stargazers_count":27,"open_issues_count":22,"forks_count":8,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-17T08:04:32.214Z","etag":null,"topics":["dry-schema","dry-types","dry-validation","exploit-database","hacktoberfest","infosec","local","masscan","network-scanning","nmap","payloads-database","recon","roninrb","ruby","security-tools","spider","webapp"],"latest_commit_sha":null,"homepage":"https://ronin-rb.dev","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ronin-rb.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"open_collective":"ronin-rb","patreon":"roninrb"}},"created_at":"2023-03-28T22:59:18.000Z","updated_at":"2025-10-08T08:38:13.000Z","dependencies_parsed_at":"2023-10-15T20:09:15.315Z","dependency_job_id":"754ec938-74e0-4384-b836-51092ab6e6d5","html_url":"https://github.com/ronin-rb/ronin-app","commit_stats":{"total_commits":337,"total_committers":4,"mean_commits":84.25,"dds":"0.10682492581602376","last_synced_commit":"89dc50345fb515258f9c7d889fb35eae3102fbc5"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ronin-rb/ronin-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ronin-rb","download_url":"https://codeload.github.com/ronin-rb/ronin-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronin-rb%2Fronin-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281672203,"owners_count":26541830,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-29T02:00:06.901Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dry-schema","dry-types","dry-validation","exploit-database","hacktoberfest","infosec","local","masscan","network-scanning","nmap","payloads-database","recon","roninrb","ruby","security-tools","spider","webapp"],"created_at":"2025-06-05T23:08:26.360Z","updated_at":"2025-10-30T04:41:07.218Z","avatar_url":"https://github.com/ronin-rb.png","language":"Ruby","funding_links":["https://opencollective.com/ronin-rb","https://patreon.com/roninrb"],"categories":[],"sub_categories":[],"readme":"# ronin-app\n\n* [Website](https://ronin-rb.dev)\n* [Issues](https://github.com/ronin-rb/docker/issues)\n* [DockerHub](https://hub.docker.com/r/roninrb/ronin)\n* [Discord](https://discord.gg/6WAb3PsVX9) |\n  [Mastodon](https://infosec.exchange/@ronin_rb)\n\nronin-app is a small web application that is meant to be ran locally by the\nuser. It provides a web interface to [ronin-support], [ronin-repos], [ronin-db],\n[ronin-payloads], [ronin-exploits], as well as automating\n[ronin-nmap], [ronin-masscan], [ronin-web-spider], [ronin-recon], and\n[ronin-vulns].\n\n## Features\n\n* Provides a web interface to explore and search the [ronin database][ronin-db].\n* Allows managing [ronin-repos] from the web interface.\n* Allows listing and building the built-in or installed 3rd-party\n  [payloads][ronin-payloads].\n* Allows listing installed 3rd-party [exploits][ronin-exploits].\n* Supports automating [nmap] and [masscan] scans and importing their results\n  into the [ronin database][ronin-db].\n* Supports automating [spidering websites][ronin-web-spider] and importing all\n  visited URLs into the [ronin database][ronin-db].\n* Supports performing recon using [ronin-recon] and importing all discovered\n  hostnames, IPs, and URLs into [ronin database][ronin-db].\n* Supports testing URLs for web vulnerabilities using [ronin-vulns].\n* Small memory footprint (~184K).\n* Fast (~1.251ms response time).\n\n## Screenshots\n\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_scanning_nmap.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_scanning_masscan.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_scanning_recon.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_scanning_spider.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_scanning_vulns.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_db.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_db_ip_address.svg\" /\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_repos.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_repos_show.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_payloads.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_payloads_show.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_payloads_build.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_exploits.svg\" /\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/ronin-rb/ronin-app/main/screenshots/ronin_app_exploits_show.svg\" /\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Synopsis\n\n```\nUsage: ronin-app [options]\n\nOptions:\n    -V, --version                    Prints the version and exits\n    -H, --host IP                    The host to listen on (Default: localhost)\n    -p, --port PORT                  The port to listen on (Default: 1337)\n        --db NAME                    The ronin-db database to connect to\n        --db-uri URI                 The ronin-db database URI to connect to\n    -h, --help                       Print help information\n\nStarts the ronin web app\n```\n\n```shell\n$ ronin-app\n```\n\n**Note:** the `ronin-app` command will automatically open a browser for\nhttp://localhost:1337, if ran in a real terminal.\n\n## Requirements\n\n* [libsqlite3][sqlite]\n* [redis-server][redis] \u003e= 6.2\n* [nmap]\n* [masscan]\n* [Ruby] \u003e= 3.1.0\n\n**Note:** both `nmap` and `masscan` require additional Linux capabilities in\norder to be ran without `sudo` or `root` privileges.\n\n```shell\nsudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip \"$(which nmap)\"\nsudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip \"$(which masscan)\"\n```\n\n## Security\n\n* This app is intended to be ran locally.\n* All HTML output is escaped with `Rack::Utils.escape_html`.\n* All HTTP params are validated using [dry-validation].\n\n## Development\n\n1. [Fork It!](https://github.com/ronin-rb/ronin/fork)\n2. Clone It!\n3. `cd ronin-app`\n4. `./scripts/setup`\n5. `git checkout -b my_feature`\n6. Code It!\n7. Test It - `bundle exec rake spec`\n8. Try It - `./scripts/server` then visit http://localhost:1337/\n9. Push It - `git push origin my_feature`\n\n### docker-compose\n\nYou can also use [docker-compose] to build and run the app:\n\n[docker-compose]: https://docs.docker.com/compose/install/\n\n```shell\n$ docker-compose build\n$ docker-compose up\n```\n\n### Directory Structure\n\n* `Gemfile` - defines all gem dependencies.\n* `Procfile` - defines the various services of the app that will be started.\n* `Procfile.dev` - defines the various services of the app that will be started\n  in development mode.\n* `config.ru` - The main entry point for `rackup`/`puma`.\n* `config/` - Contains all app configuration files.\n* `lib/ronin/app/helpers/` - Contains all Sinatra helper modules which define methods that\n* `app.rb` - The main Rack app that contains HTTP routes.\n* `app/` - Contains sub-App classes that contains grouped HTTP routes\n* `workers.rb` - The main entry point for Sidekiq which loads all worker classes\n  from `lib/workers/`.\n* `workers/` - Contains all Sidekiq worker classes.\n  can be called within the views.\n* `lib/ronin/app/types.rb` - Defines custom [dry-types].\n* `lib/ronin/app/types/` - Contains additional custom types.\n* `lib/ronin/app/validations/` - Contains [dry-validation]s logic for validating\n  submitted HTTP params.\n* `views/` - Contains all ERB views that are rendered by `app.rb`.\n* `views/layout.erb` - The main page layout view.\n* `public/` - Contains all static assets (images, CSS stylesheets, and\n  JavaScript).\n* `scripts/` - Contains scripts for setting up or starting the app.\n\n## License\n\nCopyright (C) 2023-2024 Hal Brodigan (postmodern.mod3@gmail.com)\n\nronin-app is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nronin-app is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with ronin-app.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n\n[sqlite]: https://sqlite.org/\n[redis]: https://redis.io/\n[nmap]: https://nmap.org/\n[masscan]: https://github.com/robertdavidgraham/masscan#readme\n\n[Ruby]: https://www.ruby-lang.org/\n[dry-types]: https://dry-rb.org/gems/dry-types/\n[dry-schema]: https://dry-rb.org/gems/dry-schema/\n[dry-validation]: https://dry-rb.org/gems/dry-validation/\n\n[ronin-support]: https://github.com/ronin-rb/ronin-support#readme\n[ronin-repos]: https://github.com/ronin-rb/ronin-repos#readme\n[ronin-db]: https://github.com/ronin-rb/ronin-db#readme\n[ronin-payloads]: https://github.com/ronin-rb/ronin-payloads#readme\n[ronin-vulns]: https://github.com/ronin-rb/ronin-vulns#readme\n[ronin-exploits]: https://github.com/ronin-rb/ronin-exploits#readme\n[ronin-nmap]: https://github.com/ronin-rb/ronin-nmap#readme\n[ronin-masscan]: https://github.com/ronin-rb/ronin-masscan#readme\n[ronin-web-spider]: https://github.com/ronin-rb/ronin-web-spider#readme\n[ronin-recon]: https://github.com/ronin-rb/ronin-recon#readme\n[ronin-vulns]: https://github.com/ronin-rb/ronin-vulns#readme\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fronin-rb%2Fronin-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fronin-rb%2Fronin-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fronin-rb%2Fronin-app/lists"}