In optical experiments, shutters are devices that open or close a path of light. They are often used to limit the duration of light exposure onto a target or onto a detector to reduce possible light-induced damage. Many commercial shutters are available for different applications – some provide very fast opening and closing times, some can handle large optical powers, and others allow for fail-safe operation. Many of these devices are costly and offer limited control options. Here we provide an open-source design for a low-cost, general purpose shutter system based on ubiquitous actuators (servo motors or solenoids) that are connected to an Arduino-based controller. Several shutters can be controlled by one controller, further reducing system cost. The state of the shutters can be controlled via a display built into the controller, by serial commands via USB, or by electrical control lines. The use of a microcontroller makes the shutter controller adaptable – only control options that are used need to be included, and the design accommodates a selection of display and actuator options. We provide designs for all required components, including 3D print files for the actuator holders and cases, the Arduino code, libraries for serial communication (C and python), and example graphical user interfaces for testing.