The Exaptive Studio is a visual data-flow programming environment included within the Cognitive City that allows for the rapid prototyping and development of highly interactive data-science applications:



The Studio is language agnostic, allowing developers to create applications called Xaps (pronounced 'zap') from components written in R, Python, and Javascript. The Studio supports both client-side and server-side components, providing a single environment for working with complex data-science workflows. The visual dataflow representation of the Xap, besides for just being a visual development aid, also acts as an always up-to-date system diagram of the application - supporting reproducible science by allowing others to review your work at a level of abstraction above reading code line-by-line. These dataflow diagrams can be annotated with text, images, videos, and hyperlinks - providing a much richer environment for explaining a workflow than text-based code comments:



Whenever it's desirable to dive deeper into a workflow the Studio provides two more granular levels of inspection. Components can be expanded to inspect their inputs and outputs:



Users can also dive into the underlying code:



All components and xaps are versioned using a behind-the-scenes git repository built into the Studio, so changes can be made with the safety of source-code-control and can be rolled back if needed. Different versions can be published under different urls, allowing for a beta version of a tool to be deployed to the City alongside the production version.


Client-side components are able to reference external javascript libraries, making the Studio an easy way to experiment with visualization frameworks like D3, three.js, etc, and server-side components are run in secure Docker containers managed by the Studio execution environment. These Docker containers can be configured by the developer to include whatever dependencies are required by the code. When the overhead of Docker is not desirable, server-side components can be configured to execute on external servers managed by the users, allowing for a completely distributed computation environment.