What is a Xap?


An Exaptive application is called a xap (pronounced like zap). Xaps are optimized for data-centric applications. 


Xaps are different than dashboards or data visualizations, however. They are full-fledged software applications. A xap can write data just as easily as it can read it. Xaps enable users to navigate complex data landscapes and to take action based on what they encounter along the way. They can become a part of an enterprise operation or workflow. You can watch videos of xaps in action in the gallery on the exaptive website.

Xaps are built from reuseable building blocks called components. Components can be built in any programming language. The technology-agnostic, modular design behind a xap makes it extremely flexible. It's easy to modify it in the face of new requirements or morph it into a derivative work for a slightly different use-case. 


What is a Component?


Components are the building blocks of xaps and the Exaptive ecosystem. Components are encapsulated blocks of code with inputs and outputs exposed for easy use when building xaps in the Studio. One user aptly called them "legos for programming." Components are language agnostic, making it easy to use the best language for the job or default to the one you're most comfortable with when it makes sense.

We think of components as fitting into five different categories, these five categories being derived from the fundamental needs of a data-centric application: 

  • Visualizations
  • Algorithms
  • Data
  • Logic
  • UI

Thanks to the Exaptive Data Model, components communicate across all five categories, regardless of their language or orientation to server-side or client-side operation. 

Explore the city to find components, and if you don't find the component you're looking for, you can build your own!


When xap-building, components looks this...


or like this, when expanded.


Every component has ports - inputs and outputs. The input ports are on the left. Outputs are on the right.

What is Dataflow? 

Dataflow is connections routing data from component outputs to component inputs. The dataflow is responsible for driving all program flow and maintaining all program state. Components plus dataflow make a xap. In the example below, an input in the text box flows through to an API call, which upon returning data passes it to a scatter plot. 

What are Entities? 

Entities are data points. These data points may have any number of attributes describing them. The manifestation of entities in Exaptive is very similar to Javascript objects or Python dictionaries. Here is an example entity with a few attributes:


"firstName": "John", 
"lastName": "Smith", 
"age": 35, 
"previousEmployers": ["Apple, Inc", "Microsoft, Inc."]


To learn more check out the Exaptive Data Model article.

What is a Duffle? 

A Duffle is a collection of entities and attributes. Each entity has a value associated with each attribute. Duffles support entities with null values for their attributes. This makes it easy to store different kinds of entities in the same Duffle. Duffles look and feel like an array of Javascript objects or list of Python dictionaries. 

Below is an example Duffle:


"firstName": "John", 
"lastName": "Smith", 
"age": 35, 
"previousEmployers": ["Apple, Inc", "Microsoft, Inc."]
"firstName": "Stephen", 
"lastName": "Rupert", 
"age": 27, 
"previousEmployers": ["Credit Suisse", "Google, Inc.", "Andreesen Horowitz"]
"employerName": "Google, Inc.", 
"employerType": "Software", 
"employerName": "Microsoft, Inc.", 
"employerType": "Software", 
"employerName": "Andreesen Horowitz", 
"employerType": "Venture Capital", 
"employerName": "Credit Suisse", 
"employerType": "Banking", 


To learn more check out the Exaptive Data Model article.

What are Gates? 

Gates are a special tool available to Xap builders. Gates exist to perform operations on data as it's passed between components. This can be useful for, but not need not be limited to:
  • restructuring data,
  • destructuring data, or
  • merging data.
Here is a basic example of a Merge Gate being used to concatenate two pieces of data, first as an open Merge Gate then after the Merge Gate has minimized:




To learn more check out the 
merge gates article

What are Projections? 

Projections are a kind of component input. They are key to maximizing the usability and re-usability of a component. Projections allow a user to map attributes in the data to aspects of the component. It's easiest to imagine this in the context of visualization components. 

Take this network diagram. The incoming data gets mapped to the facets of the nodes and edges of the network diagram, like size, relationship, opacity, etc.


If it were a line chart, the data would get mapped to the x-axis, y-axis, etc. If it were a bar chart, the data would get mapped to the axes and the color of the bars.

Algorithmic components also use projections, when their elements need to be mapped to the data. 

To learn more, including how, check out our Projections article. 

What are Types?

Types are used to declare the structure of your data, e.g. string, integer, float. Building xaps requires understanding data types and how they pass through the data flow. Component authoring requires knowing how to define what type of data a component expects to receive in its inputs or what type of data will be promised by its outputs. 


To learn the specifics of ours check out Type System

What are Exoskeletons? 

Exoskeletons are components that contain one or more child components. They act as a wrapper for the child components, manipulating their functions. 

Examples include tabs and modal windows.

To learn more, check out the article on Exoskeletons

What are "Domains" in the Studio? 

Domains are the different categories of components that can make up a dataflow. Examples are Javascript, Python, R, and Dataflow.