Abstract. Constraint Handling Rules (CHR) is a general-purpose rulebased programming language. This paper studies the forward and backward propagation of rules, and explores the combination of both execution strategies. Forward propagation transforms input to output, while backward propagation uncovers input from output. This work includes a source-to-source transformation capable of implementing a backward propagation of the rules. Furthermore with the addition of annotating trigger constraints, CHR programs can be executed in a strictlyforward, strictly-backward or combined interleaved quasi-simultaneous manner. A programmer should only write one program and then the annotated transformation empowers the multiple execution strategies. The proposed work is useful for automatic implementation of bidirectional search for any search space through the combined execution strategies. Moreover, it is advantageous for reversible bijective algorithms (such as lossless compression/decompression), requiring only one algorithm direction to be implemented.