Singer describes how data extraction scripts called “taps” and data loading scripts called “targets” should communicate, allowing them to be used in any combination to move data from any source to any destination. Send data between databases, web APIs, files, queues, and just about anything else you can think of. Singer taps and targets are simple applications composed with pipes—no daemons or complicated plugins needed. Singer applications communicate with JSON, making them easy to work with and implement in any programming language. Singer also supports JSON Schema to provide rich data types and rigid structure when needed. Singer makes it easy to maintain state between invocations to support incremental extraction.