Business Intelligence as Code

Build data products with Programmable Markdown.
Write SQL, create visualizations, and deploy dashboards—all from version-controlled Markdown files.

# Sales Dashboard

## Query Data
```sql sales_data
SELECT 
  date,
  SUM(revenue) as total_revenue,
  COUNT(*) as order_count
FROM orders
WHERE date >= DATE('now', '-30 days')
GROUP BY date
ORDER BY date DESC
```

## Revenue Trend
<LineChart data={sales_data} x="date" y="total_revenue" />

## Summary Metrics
Total Revenue: {sales_data.total_revenue.sum()}
Total Orders: {sales_data.order_count.sum()}
bash

Why Traditional BI Tools Fall Short

Drag-and-drop interfaces create black boxes. Your reports live in silos, can't be version controlled, and are impossible to reproduce consistently.

Traditional BI Problems

No version control - changes are invisible

Black-box drag-and-drop interfaces

Hard to reproduce and test

Siloed workflows prevent collaboration

Expensive licensing costs

Spry BI Solution

Everything in Git with full history

Code-first, transparent workflows

100% reproducible analytics

Collaborative like software engineering

Free and open source

Build BI Like Software Engineers

Apply modern development practices to business intelligence. Version control, code reviews, testing, and CI/CD for your data products.

Version Control Everything

Every report, query, and dashboard lives in Git. Track changes, revert mistakes, and understand the complete history of your analytics.

Code Review Your Analytics

Use pull requests and branches for BI workflows. Review changes before they go live, just like you do with code.

Test Your Reports

Automated testing and CI/CD for data products. Catch errors before they reach production dashboards.

Deploy Anywhere

Generate SQLPage dashboards, static sites, or embed analytics. Deploy to SQLite, PostgreSQL, or your own infrastructure.

Collaborate Seamlessly

Share and iterate like software engineers. Your entire team works on the same codebase with perfect synchronization.

Professional Results

Publication-quality visualizations that are responsive, interactive, and beautiful. No design skills required.

How It Works

Five simple steps from code to production-ready dashboards

Write SQL in Markdown

Query blocks execute inline and return structured data

Add Visualizations

Chart components automatically render your data

Commit to Git

Version control all changes with standard Git workflows

Deploy with Confidence

Generate SQLPage dashboards or static sites

Iterate & Improve

Code review and continuous improvement cycles

Built for Every BI Use Case

From executive dashboards to embedded analytics, Spry BI handles it all

Executive Dashboards

Real-time KPI tracking with live data updates. Present metrics that matter to leadership.

Analytics Reports

Scheduled, reproducible reports that run automatically. Consistent insights every time.

Data Exploration

Interactive analysis tools for data discovery. Filter, slice, and drill down into your data.

Embedded BI

Customer-facing analytics embedded directly in your product. White-label ready.

Internal Tools

Team dashboards and operational metrics. Keep everyone aligned with live data.

Compliance Reports

Audit-ready, version-controlled analytics. Prove reproducibility and track all changes.

Traditional BI vs Spry BI

See how Spry BI compares to legacy platforms

Feature Traditional BI Spry BI
Version Control
Code Reviews
Reproducibility
Automated Testing
Cost $$$ Free/Open Source
Learning Curve Steep Markdown + SQL
Deployment Complex Simple

Powerful Features Out of the Box

Everything you need to build production-ready BI applications

SQL First

Write queries in familiar SQL syntax. Support for SQLite, PostgreSQL, and DuckDB. Complex joins, window functions, and CTEs all work perfectly.

  • Full SQL:2016 standard support
  • Query reuse and composition
  • Parameterized queries for safety
-- Reusable base query
WITH active_users AS (
  SELECT user_id, last_seen
  FROM users
  WHERE last_seen > DATE('now', '-30 days')
)
SELECT 
  DATE(order_date) as date,
  COUNT(*) as orders,
  SUM(amount) as revenue
FROM orders
WHERE user_id IN (SELECT user_id FROM active_users)
GROUP BY DATE(order_date)
bash
## User Filters
<DateRange bind:startDate bind:endDate />
<Select bind:category options={categories} />

## Filtered Results
```sql filtered_data
SELECT * FROM sales
WHERE date BETWEEN {startDate} AND {endDate}
  AND category = {category}
```
bash

Dynamic Parameters

User inputs and filters that update queries in real-time. Create interactive dashboards with dropdowns, date pickers, and text inputs.

  • Two-way data binding
  • Type-safe parameter validation
  • Instant query re-execution

Rich Component Library

Pre-built chart types for every visualization need. Line charts, bar charts, scatter plots, tables, and more. Responsive and accessible by default.

  • 20+ chart types included
  • Customizable themes and colors
  • Interactive tooltips and legends
LineChart
BarChart
PieChart
AreaChart

+ many more components

Why Code-First BI?

Treating BI as code unlocks the same benefits that transformed software development

Collaboration

Work together like engineering teams. Multiple people can work on the same dashboard simultaneously with proper merge conflict resolution.

Quality

Automated testing prevents errors from reaching production. Catch broken queries, data issues, and visualization bugs before users see them.

Speed

Faster iteration cycles mean more experiments and better insights. Live reload during development speeds up the feedback loop.

Transparency

Every change is tracked in Git. Understand who changed what, when, and why. Perfect audit trail for compliance and debugging.

Scalability

One codebase, infinite deployments. Use the same reports across dev, staging, and production. Deploy to multiple customers effortlessly.

Ownership

Your data, your infrastructure, your control. No vendor lock-in. Export to any format, deploy anywhere, migrate anytime.

Get Started in Minutes

Install Spry and create your first BI report

Installation Instructions

1. Install Deno

Spry runs on the Deno runtime. Install it using:

curl -fsSL https://deno.land/install.sh | sh
bash

2. Initialize a New Spry Project (SQLite)

Create a new Spry project in the current directory using SQLite:

curl -fsSL https://sprymd.org/init.sh | sh -s
bash

This sets up the default SQLite-based project structure.

3. Generate SQLPage Source Files

Prepare the SQLPage auto-generated files:

./spry.ts spc --fs dev-src.auto --destroy-first --conf sqlpage/sqlpage.json
bash

4. Start the Spry Development Server

Run Spry in development mode with auto-reload enabled:

./spry.ts spc --fs dev-src.auto --destroy-first --conf sqlpage/sqlpage.json --watch
bash

5. Deploy SQLPage in Single-Database Mode

Deploy SQLPage components to the SQLite database:

./spry.ts task deploy
bash

6. Start the SQLPage Server

Finally, start SQLPage:

SQLPAGE_SITE_PREFIX="" sqlpage
bash

Stop clicking. Start coding your BI.

Join the movement toward reproducible, version-controlled business intelligence. Build data products that scale.