Plugins · Quorum 4.0.0 or newer

Make Quorum show your data your way.

A Quorum plugin adds a way to look at or save the rows you are looking at: a result view, an exporter, a chart type, a snippet pack or a colour theme. It is a small folder, or a zip of one, with a manifest.json and its files.

my-quorum-plugin / manifest.jsonview-only
{
  "id": "yourname.cards",
  "name": "Cards",
  "version": "1.0.0",
  "minQuorumVersion": "4.0.0",
  "contributes": {
    "resultViews": [{ "id": "cards",
      "name": "Cards", "entry": "cards.js" }]
  }
}
View-onlyA plugin sees only the rows you open it on.
Masked stays maskedMasked columns arrive as the mask.
No reachNo databases, network, files, Quorum's settings or keys.
No SQLIt cannot run or change SQL.
Downloads

Get Quorum's plugins.

Four ready-made plugins. Download a zip and add it in Quorum.

Result view

Pivot

Summarise the rows: a field for rows, optionally one for columns, and a value to count, sum, average, or take the smallest or largest of; totals per row and column.

quorum.pivot-1.0.0.zipDownload zip
Result view

JSON explorer

Each row as an expandable tree; JSON in a cell (MongoDB sub-documents, PostgreSQL json columns) opens field by field; search finds a key or value.

quorum.json-explorer-1.0.0.zipDownload zip
Three exporters

Confluence and Jira tables

The rows as a Jira or Confluence wiki table, a Markdown table, or an HTML table that the Confluence editor keeps as a native table when pasted.

quorum.wiki-tables-1.0.0.zipDownload zip
Snippet packs

DBA snippets

Read-only queries for PostgreSQL, SQL Server and MySQL: who is blocking whom, long-running queries, largest tables, unused and missing indexes, waits.

quorum.dba-snippets-1.0.0.zipDownload zip
To install, in Quorum openSettings›General›Plugins›Add plugin (.zip)…
Contributions

What a plugin can add.

Result view

A new way to look at the rows.

Shows in: Results › View with …

Exporter

A new file format to save the rows as.

Shows in: Results › Export with …

Chart type

A chart Quorum does not draw itself.

Shows in: Chart, beside Bar, Line and the others

Snippet pack

SQL you insert into the editor.

Shows in: Snippets panel, under From plugin

Theme

Quorum's colours, light and dark.

Shows in: Settings › General › Colour theme
Make your own

Your own plugin in four steps.

  1. In Quorum, Settings › General › Plugins › Save a starter plugin…, or download the starter and unzip it. It is a working result view (Column summary) with comments, a manifest and a README.
  2. Change manifest.json (your own id and name) and view.js.
  3. Click Add plugin folder… and pick the folder. Quorum checks it and keeps its own copy, so add it again after each change.
  4. To share it, zip the folder. Others add it with Add plugin (.zip)….
/* the manifest */

manifest.json

  • id3 to 64 lower-case letters, digits, "." and "-".
  • ContributionsAt least one, at most 20 of each kind.
  • FilesNamed relative to the folder with "/"; only manifest.json and the files it names are copied.
  • StrictUnknown fields are errors.
manifest.jsonevery kind of contribution
{
  "id": "yourname.cards",
  "name": "Cards",
  "version": "1.0.0",
  "author": "You",
  "description": "Rows as cards.",
  "minQuorumVersion": "4.0.0",
  "contributes": {
    "resultViews": [{ "id": "cards", "name": "Cards", "entry": "cards.js", "style": "cards.css" }],
    "exporters":   [{ "id": "tsv", "name": "TSV", "entry": "tsv.js", "extension": "tsv" }],
    "chartTypes":  [{ "id": "heat", "name": "Heat map", "entry": "heat.js" }],
    "snippets":    [{ "id": "basics", "name": "Basics", "file": "basics.json" }],
    "themes":      [{ "id": "ocean", "name": "Ocean", "file": "ocean.json" }]
  }
}
/* Quorum → plugin */

What the script receives

Views, exporters and chart types run in a sandboxed frame and talk to Quorum only with postMessage.

This is sent when the view opens and again when the rows or theme change.

message · quorum:renderapiVersion 1
{
  type: 'quorum:render', apiVersion: 1,
  kind: 'resultView' | 'chartType' | 'exporter',
  columns: [{ name: 'id', type: 'integer' }, ...],
  rows: [[1, 'Ada', null], ...],        // strings, numbers, booleans, null
  rowCount: 1200, truncated: false,
  theme: { mode: 'dark' | 'light', tokens: { '--q-bg-1': '#0c0e12', ... } },
  chart: { x: 'month', y: ['revenue'] }  // chart types only
}
/* plugin → Quorum */

What it may send back

A view or chart type sends its height (resized between 40 and 10,000 pixels).

An exporter sends one file; Quorum checks it and shows the save dialog. Use encoding: 'base64' for binary files.

Snippet packs are a JSON list of { "name", "sql", "dialect" } (dialect null for every database). Themes set Quorum's colour tokens for dark and light.

view or chart type · quorum:height
parent.postMessage({ type: 'quorum:height', apiVersion: 1, height: 640 }, '*')
exporter · quorum:export
parent.postMessage({
  type: 'quorum:export', apiVersion: 1,
  fileName: 'results.tsv', mimeType: 'text/tab-separated-values',
  encoding: 'utf8', content: '...'
}, '*')
/* limits */

Limits

50,000 rows
or 20 MB at most are sent to a plugin
2 MB · 8 MB
per file · per plugin
200 entries
at most in a zip, no encryption
6 seconds
to answer Quorum's check, or the frame is closed; do heavy work in small steps
20 seconds
for an exporter
Masked
columns arrive as the mask
No networkNo storageNo filesNo Quorum APISQL is never sent to a pluginThe connection's name is never sent