This paper addresses the design of distributed systems with synchronous dataflow languages. As modular design entails handling both architecture and functional modularity, we propose a language-oriented solution, involving the extension of a synchronous dataflow language with primitives for program distribution. These primitives allow the programmer to describe the architecture of the system and to express where streams and expressions are located in this architecture. A distributed semantics is first proposed as formalization of the distributed execution of programs. A type and effect system is then provided in order to infer the localization of non-annotated values by means of type inference and to ensure, at compilation time, the consist...