Applications that use multiple devices and surfaces provide new opportunities for innovative interaction -- but despite the wide variety of research that has been carried out on multi-surface systems, building these kinds of applications is still difficult. In particular, multi-surface apps that use interactive visual workspaces are complicated because current tools do not provide low-level access to a connected and interactive graphical canvas that is shown on different devices. This difficulty limits the explorations that designers and developers can carry out within the multi-surface design space. To address this problem, we have developed WAMS -- an open-source web-based toolkit that provides several programming abstractions for building visual-workspace applications across multiple surfaces. WAMS uses three main concepts -- a virtual visual workspace, views onto that workspace, and graphical workspace objects -- and provides support for connecting multiple devices, creating and manipulating objects, managing and laying out views, and handling events from multiple surfaces. WAMS simplifies the development of a wide variety of applications including composite display configurations, shared-workspace groupware, systems that place different UI elements onto different devices, and bring-your-own-device applications. We describe WAMS's main abstractions and concepts, provide several examples that show the breadth of the approach, and assess the toolkit in terms of effectiveness, coverage, extensibility, and integration with existing practices and tools.