docs/metasploit-framework.wiki/Unstable-Modules.md
Sometimes, modules contributed to Metasploit don't quite cross the finish line. This can be for a variety of reasons. Most often, it is because the module submission was a "drive-by" -- the original author is not interested (or not able) to implement and test needed changes in order to make the module production worthy.
Luckily, git makes it easy to be a pack rat for these unfinished modules. We have a separate branch for these unstable modules, imaginatively named, Unstable.
Unstable modules have their own special directory structure -- they should not hit the regular modules/ subdirectory, since we don't want to conflict with existing or future modules. We also want to make it easy to spot which modules are unstable. So, new modules should get landed there with the following procedure.
git checkout unstable; git merge upstream/master; push upstreamgit checkout -b temp-pr1234 --track upstream/pr/1234git checkout -b unstable-pr1234-modulename --track upstream/unstablegit diff upstream/master...upstream/pr/1234 --name-onlygit checkout temp-pr1234 modules/exploits/path/to/module.rbgit mv modules/exploits/path/to/module.rb unstable-modules/exploits/incompletegit commitThis assumes you're set up for development using the instructions mentioned at https://r-7.co/MSF-DEV and have configured Rapid7's branch as the "upstream" repo.
For an example of this procedure, see PR #2801.
If someone has library changes that cannot be merged to master, we cannot hang on to them in unstable. There is no sensible way to maintain that kind of branch over any reasonable time period, since conflicts will surely abound soon. Unstable scripts and plugins are okay, though.
If you'd like to rescue an unstable module, great! Just note that it's an unstable rescue in the pull request, and the original PR number (if you can find it), when you pull it back out. You can do a similar git checkout to grab the file and then git mv it to the right spot again.
This is not unstable in the Debian sense -- they're not latest versions, they get no fixes unless someone adopts them, and they may end up crashing out all of framework when loaded. No guarantees are made, ever, despite things like ExploitRanking.