use-package is not as thoroughly documented as it should be. I remember finding an explanation of this keyword at some point, but can't seem to turn it up now. Looking at the source for
use-package-handler/:requires, I think what this does is make the entire
use-package block conditional on the presence of the specified feature(s).
Macroexpanding a sample block seems to confirm this interpretation. Take
(use-package foo :requires (bar baz) :config (blah))
pp-macroexpand-last-sexp on it. You get this:
(if (not (member nil (mapcar #'featurep '(bar baz)))) (progn (if (not (require 'foo nil 'noerror)) (ignore (message (format "Could not load %s" 'foo))) (condition-case-unless-debug err (blah) (error (ignore (display-warning 'use-package (format "%s %s: %s" "foo" ":config" (error-message-string err)) :error)))) t)))
If you remove the
:requires line and try again, you get just the contents of the
progn form. So if all of the features you listed are present at the time the block is being executed, then everything's the same. If any feature is missing, nothing is loaded whatsoever.