Constraint automata specify protocols as labeled transition systems that preserve synchronization under composition. They have been used as a basis for tools, such as compilers and model checkers. Unfortunately, composition of transition systems suffers from state space and transition space explosions, which limits scalability of the tools based on constraint automata. In this work, we propose stream constraints as an alternative to constraint automata that avoids state space explosions. We introduce a rule-based form for stream constraints that can avoid transition space explosions. We provide sufficient conditions under which our approach avoids transition space explosions.