# Welcome to Shaper

**Open Source, SQL-driven Data Dashboards powered by DuckDB.**

Build analytics dashboards simply by writing SQL:

```sql
SELECT 'Sessions per Week'::LABEL;
SELECT
  date_trunc('week', created_at)::XAXIS,
  category::CATEGORY,
  count()::BARCHART_STACKED,
FROM dataset
GROUP BY ALL ORDER BY ALL;
```

Get dynamic dashboards you can embed directly into your application:

<a href="https://demo.taleshape.com/view/pvggvdpiwb9wlyppuqbyx0nt" target="_blank" class="block mt-5 mb-15 shadow shadow-lg shadow-[#abaabe] relative group rounded-md">
    <img src="/images/hero.webp" alt="Hero Image" class="w-full rounded-md" />
    <div class="absolute top-0 mt-0 h-full w-full flex justify-center items-center group-hover:bg-black/3 transition duration-200">
    <button class="py-1.5 px-2 text-white font-semibold text-xl bg-black opacity-70 group-hover:opacity-60 shadow rounded-md focus:outline-none focus:ring focus:ring-magenta cursor-pointer font-mono">LIVE_DEMO</button>
    </div>
    <Icon name="external" size="36px" class="fill-dark absolute top-0 right-0 mt-0 opacity-0 group-hover:opacity-70 transition" />
</a>

<LinkCard title="Jump right to the Getting Started Guide" href="/shaper/docs/getting-started" />

<LinkCard title="See Managed Hosting and Support Plans" href="/plans-and-pricing" />

### Features

<CardGrid>
  <Card title="Dynamic Dashboards" icon="puzzle">
    - Dynamic data [filters](/shaper/docs/dashboard-sql-reference/#filtering)
    - Generate [chart annotations](/shaper/docs/dashboard-sql-reference/#chart-annotations) from your data
    - Conditionally show [sections](/shaper/docs/dashboard-sql-reference/#section)
  </Card>
  <Card title="The Full Power of DuckDB" icon="seti:db">
    - Query across [data sources](/shaper/docs/connecting-to-data-sources/)
    - Pre-compute state as [temporary tables](/shaper/docs/dashboard-sql-reference/#create-temporary-table)
    - Use any [DuckDB extension](/shaper/docs/connecting-to-data-sources/#duckdb-extensions)
  </Card>
  <Card title="Embedded Analytics" icon="laptop">
    - [Embed dashboards](/shaper/docs/dashboard-embedding/) into your application without iframe.
    - JS and React SDKs.
    - Generate per-user [JWT tokens](/shaper/docs/dashboard-embedding/#jwt-variables) to restrict access.
  </Card>
  <Card title="Give users access to their data" icon="cloud-download">
    - Define custom [CSV](/shaper/docs/dashboard-sql-reference/#download_csv) and [Excel](/shaper/docs/dashboard-sql-reference/#download_xlsx) downloads.
    - Generate [PDFs](/shaper/docs/dashboard-sql-reference/#download_pdf)
    - Share any dashboard as [password-protected](/shaper/docs/public-sharing/) link.
  </Card>
  <Card title="No lock-in" icon="seti:github">
  Shaper is [open source](https://github.com/taleshape-com/shaper) and free to use.
  </Card>
  <Card title="Own your Data" icon="seti:lock">
  Runs in your infrastructure.
  </Card>
  <Card title="Familiar" icon="heart">
  If you know SQL, you know how to use Shaper.
  </Card>
  <Card title="Simple Operations" icon="seti:docker">
  Run a single Docker container.
  </Card>
</CardGrid>

### More than a dashboard builder

Start data projects with a single tool. Bring in additional tools as needed.

Shaper allows you to keep simple things simple and plays well with other tools once your needs grow more complex.

<CardGrid>
  <Card title="Remote Data" icon="seti:pipeline">
    - Query your [existing data](/shaper/docs/connecting-to-data-sources) right where it is.
    - Postgres, S3, Google Sheets. There is a [DuckDB extension](/shaper/docs/connecting-to-data-sources/#duckdb-extensions) for it.
  </Card>
  <Card title="Data Transform" icon="seti:clock">
     - Automate loading and transforming data with [scheduled tasks](/shaper/docs/tasks-and-scheduling/) defined in plain SQL.
     - Move the SQL to DBT or SQLMesh as your data pipelines get more complex.
  </Card>
  <Card title="Data Storage" icon="seti:db">
    - Store data directly in DuckDB.
    - Build up a dedicated data warehouse or lake as your business grows.
  </Card>
  <Card title="Ingest API" icon="seti:json">
    - HTTP API to [ingest data](/shaper/docs/ingesting-data-into-shaper/) in real-time.
    - Shaper infers the data schema for you.
  </Card>
</CardGrid>