In this paper we present the DIVE system (Distributed Interactive Virtual Environment), an architecture and a programming toolkit for the realisation and implementation of wide-area, Internet-based multi-user virtual environments. Along the years, DIVE has evolved into a generic tool that supports a wide range of applications and situations. This paper focuses on the networking and architectural aspects that allow the deployment of multi-user virtual environments on the Internet. Additionally, this paper presents the palette of programming interfaces and techniques that are offered by the system. Our experience has proven that its ability to mix interfaces made it a system of choice for the implementation of distributed applications. We conclude with a selection of applications and how they make use of the networking and programming features of the system.