Singer explains how data extraction scripts called taps and data loading scripts called targets should communicate. This allows them to be used in any combination to move any data from any source to any destination. You can send data between web APIs, databases, files, queues, or just about any other type of data you can think of. Simple applications with pipes, called singer taps and targets, are all that's required. There are no daemons nor complicated plugins. Singer applications communicate with JSON which makes them easy to use and implement in any programming language. Singer supports JSON Schema, which allows for rich data types and rigid structures when required. Singer makes it easy for incremental extraction to be supported by Singer's state-preserving invocations.