$git clone https://github.com/spiculedata/saiku***
| 1 | <a href="#readme"></a> |
| 2 | |
| 3 | <h1 align="center"><a href="https://saiku.bi">Saiku Analytics</a></h1> |
| 4 | |
| 5 | <p align="center"> |
| 6 | Open-source Semantic Layer analytics for cubes — drag-and-drop in the |
| 7 | browser, SQL through Mondrian + Calcite, and a typed REST surface so AI |
| 8 | agents can query without ever seeing MDX. |
| 9 | </p> |
| 10 | |
| 11 | <p align="center"> |
| 12 | <a href="https://saiku.bi"><b>saiku.bi</b></a> · |
| 13 | <a href="https://demo.saiku.bi"><b>Live demo</b></a> · |
| 14 | <a href="https://github.com/spiculedata/saiku/issues"><b>Issues</b></a> · |
| 15 | <a href="https://github.com/spiculedata/saiku/discussions"><b>Discussions</b></a> |
| 16 | </p> |
| 17 | |
| 18 | <p align="center"> |
| 19 | <a href="https://github.com/spiculedata/saiku/releases"><img src="https://img.shields.io/github/v/tag/spiculedata/saiku?label=release&sort=semver" alt="Latest release"></a> |
| 20 | <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0%20%2B%20EPL--1.0-blue" alt="License: Apache 2.0 + EPL 1.0"></a> |
| 21 | <a href="https://github.com/spiculedata/saiku/pkgs/container/saiku"><img src="https://img.shields.io/badge/docker-ghcr.io%2Fspiculedata%2Fsaiku-2496ED?logo=docker&logoColor=white" alt="Docker image"></a> |
| 22 | <a href="https://join.slack.com/t/saikucloud/shared_invite/zt-3yor7kgiv-YUPhqK0pvd4WljctIQVOTA"><img src="https://img.shields.io/badge/slack-Saiku%20Cloud-4A154B?logo=slack&logoColor=white" alt="Slack community"></a> |
| 23 | </p> |
| 24 | |
| 25 | *** |
| 26 | |
| 27 | ## Try it in 30 seconds |
| 28 | |
| 29 | ```sh |
| 30 | docker run -d -p 8080:8080 --name saiku -e SAIKU_DEMO=true ghcr.io/spiculedata/saiku |
| 31 | ``` |
| 32 | |
| 33 | Then open <http://localhost:8080/ui/> and log in with `admin` / `admin`. Demo |
| 34 | mode ships a self-contained H2 + FoodMart cube — drag fields onto rows, columns, |
| 35 | or filters and the SPA writes MDX for you. |
| 36 | |
| 37 | > **For a real deployment**, drop `SAIKU_DEMO=true` and set an admin password: |
| 38 | > `-e SAIKU_ADMIN_PASSWORD='a-strong-password'`. Saiku **refuses to start** on the |
| 39 | > default `admin`/`admin` once it's network-reachable, so one of those two is |
| 40 | > required. |
| 41 | |
| 42 | A hosted instance is always live at <https://demo.saiku.bi> (auto-reset |
| 43 | nightly). |
| 44 | |
| 45 | ## What is Saiku |
| 46 | |
| 47 | Saiku started in 2010 as an open-source OLAP browser for Mondrian. In 2026 |
| 48 | it was rebuilt as a modern Semantic Layer on top of: |
| 49 | |
| 50 | - **Mondrian 4.8.1.x (Spicule fork)** — with a Calcite-based SQL planner |
| 51 | alongside the legacy `SqlQuery` builder. Calcite is the default; force |
| 52 | legacy with `-Dmondrian.backend=legacy`. |
| 53 | - **Apache Arrow** wire format for cellsets, so the browser and any |
| 54 | programmatic consumer share a zero-copy result envelope. |
| 55 | - **Jetty 12 EE10 + Jersey 3.1 + Spring 6 + Spring Security 6.5** in a |
| 56 | single-JAR Picocli launcher. |
| 57 | - **SvelteKit 5 + Vite** for the SPA (separate repo, served from inside |
| 58 | the same JAR at `/ui/`). |
| 59 | |
| 60 | ## AI Query API + MCP |
| 61 | |
| 62 | Saiku 4.x exposes a typed REST surface — `/rest/saiku/api/ai/*` — designed |
| 63 | for LLM agents. Hierarchies, levels, measures and synonyms are discoverable |
| 64 | via `/ai/cubes` and `/ai/schema`, and a single `POST /ai/query` translates |
| 65 | a JSON description of a question into validated MDX, runs it, and returns |
| 66 | typed `{value, formatted, unit}` cells. Every validation failure carries |
| 67 | a `{status, field, available}` envelope so an agent can self-correct |
| 68 | without scraping logs. |
| 69 | |
| 70 | The container also bundles **`saiku-mcp`**, a stdio |
| 71 | [Model Context Protocol](https://modelcontextprotocol.io) wrapper so Claude |
| 72 | Desktop / Cursor / Cline can wire to a running Saiku with one line of |
| 73 | config: |
| 74 | |
| 75 | ```json |
| 76 | { |
| 77 | "command": "docker", |
| 78 | "args": ["exec", "-i", "saiku", "saiku-mcp"] |
| 79 | } |
| 80 | ``` |
| 81 | |
| 82 | See [`docs/AI-QUERY-API.md`](docs/AI-QUERY-API.md) and |
| 83 | [`docs/schema-annotations.md`](docs/schema-annotations.md) for the typed |
| 84 | contract and the `saiku.semantic.*` annotation namespace cubes use to |
| 85 | describe themselves to agents. |
| 86 | |
| 87 | ## Dashboards |
| 88 | |
| 89 | Build shareable dashboards of chart / table / KPI / text / image tiles over your |
| 90 | cubes — with cross-tile filters, click- and brush-cross-filtering, |
| 91 | drill-down/through, conditional formatting, combo charts, anomaly/forecast |
| 92 | overlays, auto-refresh, PDF/PNG export and r |