The objective of the project is to develop a novel programming model for IoT services and applications, along with the associated supporting platform, engineering methodology and tools, to ease the development of flexible and robust large-scale IoT services and applications. Starting from previous findings in the areas of field-based coordination, collective adaptive systems, stream computing and aggregate computing, this project will address the complexity of building modern, large-scale IoT systems, by a full-fledged engineering approach revolving around a new notion of distributed programming. The key innovative idea of Fluidware is to abstract collectives of devices of the IoT fabric as sources, digesters, and targets of distributed "flows" of contextualized events, carrying information about data produced and actuating commands. Accordingly, programming services and applications implies declaratively specifying "funnel processes" to channel, elaborate, and re-direct such flows in a fully-distributed way, as a mean to coordinate the activities of devices and realize services and applications. The applicability and advantages of the approach will be evaluated via real testbeds and simulations in the area of domestic and urban ambient assisted living.