This paper presents a declarative framework for defining local search procedures. It proceeds by combining neighborhoods by means of so-called combinators that specify when neighborhoods should be explored, and introduce other aspects of the search procedures such as stop criteria, solution management, and meta-heuristics. This approach introduces higher-level concepts for the development of search procedures, enabling the developer to focus on these high-level concepts without worrying on an efficient implementation of them. Our aim is to make easier the development, understanding, communication, and experimentation on search procedures, and therefore lead to better search procedures. We provide a comprehensive overview of our framework along with a number of illustrative examples of different use patterns to illustrate the ease of use of our framework.