# Core Concepts

All data in Rubicon is treated as tables and schemas. Rubicon does not require you to define the schema and instead infers the schema from the source itself.  When you connect a source to Rubicon, it starts reading the data in a streaming fashion and makes it available to process on Rubicon platform. You can then write transformations in SQL and build a pipeline that maintains a materialization of the transformation into a destination of your choice.&#x20;

## Sources

Sources are databases or event streams that you want to use for building real-time streaming pipelines. Rubicon supports a variety of sources including all major OLTP databases, event platforms. The data from sources is represented as tables in Rubicon and available in a single namespace. So, you can join data from Postgres with data in Kafka. You can see the full list [here](/sources.md).

## Destination

Destination is the system you want the materialized view of your pipeline output to be saved. This can be a data warehouse, a SQL database like MySQL or specialized database like ElasticSearch to power your search. You can see the full list of supported destinations [here](#destination).<br>

## Transformations

Transformations are defined in SQL in files referred to as `models`. The SQL statement can refer tables from a connected source or other models enabling you to build complex pipelines without defining an explicit DAG. You can learn more about transformation [here](#transformations).<br>

## Pipelines

A pipeline runs a transformation continuosly and streams the results into a materialized view of a destination. You can learn more about how to setup pipelines [here](/pipelines.md).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rubicon.io/documentation/core-concepts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
