Various intelligent component retrieval techniques have been developed to assist a developer discover or locate components in an efficient manner. These techniques share a common weakness though; the developer must initiate the retrieval process. In our work we shift the focus from component retrieval to component recommendation. We extract knowledge from existing source code repositories and employ this information to recommend a candidate set of components to a developer for future use. Recommendations assist and encourage developers to make full use of large component repositories and, in turn, will likely promote software reuse. We present RASCAL, a software component recommender. RASCAL infers the need for a component and proactively recommends that component to a developer. Recommendations are produced using three techniques, namely, collaborative filtering, content-based filtering and a hybrid of the two. We compare these techniques and establish which algorithm produces the ...