Textplot DuckDB Extension

The Textplot extension, brings text-based data visualization directly to your SQL queries in DuckDB. Create stunning ASCII/Unicode charts, bar graphs, and density plots without leaving your database environment.

Use Cases

The Textplot extension is perfect for:

  • Quick data exploration: Visualize distributions and trends directly in your terminal
  • Dashboard creation: Add visual elements to text-based reports and dashboards
  • Monitoring and alerting: Create visual indicators for system metrics and KPIs
  • Data quality checks: Spot outliers and patterns in your data instantly
  • Command-line analytics: Build beautiful charts for CLI tools and scripts
  • Documentation: Include visual data summaries in README files and documentation
  • Embedded analytics: Add lightweight visualizations to applications without heavy charting libraries

Installation

textplot is a DuckDB Community Extension.

You can now use this by using this SQL:

install textplot from community;
load textplot

Functions

tp_bar(value, ...options)

Creates horizontal bar charts with customizable styling and colors.

Basic Usage:

-- Simple progress bar (50% filled)
SELECT tp_bar(0.5);
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚     tp_bar(0.5)      โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅโฌœโฌœโฌœโฌœโฌœ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Custom width and range
SELECT tp_bar(75, min := 0, max := 100, width := 20);
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ tp_bar(75, min := 0, max := 100, width := 20) โ”‚
โ”‚                    varchar                    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅ๐ŸŸฅโฌœโฌœโฌœโฌœโฌœ      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Advanced Options:

-- Custom colors and shapes
SELECT tp_bar(0.8, shape := 'circle', on_color := 'green', off_color := 'white') as bar;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         bar          โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸขโšชโšช โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Threshold-based coloring
SELECT tp_bar(85,
    min := 0, max := 100,
    thresholds := [
        {'threshold': 90, 'color': 'red'},
        {'threshold': 70, 'color': 'yellow'},
        {'threshold': 0, 'color': 'green'}
    ]
) as bar;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         bar          โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ๐ŸŸจ๐ŸŸจ๐ŸŸจ๐ŸŸจ๐ŸŸจ๐ŸŸจ๐ŸŸจ๐ŸŸจ๐ŸŸจโฌœ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Custom characters
SELECT tp_bar(0.7, on := 'โ–ˆ', off := 'โ–‘', width := 15) as bar;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚       bar       โ”‚
โ”‚     varchar     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

SELECT round(n,4),
tp_bar(n,
width := 14,
shape := 'circle',
off_color :='black',
filled := false,
thresholds := [
  (0.8, 'red'),
  (0.7, 'orange'),
  (0.6, 'yellow'),
  (0.0, 'green')
]) as bar
FROM (select random() as n from generate_series(10));
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ round(n, 4) โ”‚             bar              โ”‚
โ”‚   double    โ”‚           varchar            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚      0.9889 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ๐Ÿ”ด โ”‚
โ”‚      0.6242 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซ๐ŸŸกโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.6013 โ”‚ โšซโšซโšซโšซโšซโšซโšซ๐ŸŸกโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚       0.669 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซ๐ŸŸกโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.8363 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ๐Ÿ”ดโšซโšซ โ”‚
โ”‚      0.9193 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ๐Ÿ”ดโšซ โ”‚
โ”‚      0.8629 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ๐Ÿ”ดโšซโšซ โ”‚
โ”‚      0.8296 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ๐Ÿ”ดโšซโšซ โ”‚
โ”‚      0.0824 โ”‚ ๐ŸŸขโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.0281 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.2682 โ”‚ โšซโšซโšซ๐ŸŸขโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 11 rows                          2 columns โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

SELECT round(n,4),
tp_bar(n,
width := 14,
shape := 'circle',
off_color :='black',
filled := true,
thresholds := [
  (0.8, 'red'),
  (0.7, 'orange'),
  (0.6, 'yellow'),
  (0.0, 'green')
]) as bar
FROM (select random() as n from generate_series(10));
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ round(n, 4) โ”‚             bar              โ”‚
โ”‚   double    โ”‚           varchar            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚      0.3818 โ”‚ ๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸขโšซโšซโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.1919 โ”‚ ๐ŸŸข๐ŸŸข๐ŸŸขโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.5885 โ”‚ ๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸขโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.9558 โ”‚ ๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ด๐Ÿ”ดโšซ โ”‚
โ”‚      0.4463 โ”‚ ๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸขโšซโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.6024 โ”‚ ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.0114 โ”‚ โšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.4993 โ”‚ ๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸขโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”‚      0.6884 โ”‚ ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซโšซ โ”‚
โ”‚      0.7929 โ”‚ ๐ŸŸ ๐ŸŸ ๐ŸŸ ๐ŸŸ ๐ŸŸ ๐ŸŸ ๐ŸŸ ๐ŸŸ ๐ŸŸ ๐ŸŸ ๐ŸŸ โšซโšซโšซ โ”‚
โ”‚      0.3507 โ”‚ ๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸข๐ŸŸขโšซโšซโšซโšซโšซโšซโšซโšซโšซ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 11 rows                          2 columns โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Parameters:

  • value: Numeric value to visualize
  • min: Minimum value (default: 0)
  • max: Maximum value (default: 1.0)
  • width: Bar width in characters (default: 10)
  • shape: โ€˜squareโ€™, โ€˜circleโ€™, or โ€˜heartโ€™ (default: โ€˜squareโ€™)
  • on_color/off_color: Color names (red, green, blue, yellow, etc.)
  • on/off: Custom characters for filled/empty portions
  • filled: Boolean, fill all blocks or just the endpoint (default: true)
  • thresholds: List of threshold objects for conditional coloring

tp_density(values, ...options)

Creates density plots and histograms from arrays of numeric data.

Basic Usage:

-- Simple density plot
SELECT tp_density([1, 2, 3, 4, 5, 4, 3, 2, 1]) as density;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚       density        โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ–ˆ    โ–ˆ    โ–ˆ    โ–ˆ   โ–’ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Custom width and style
SELECT tp_density([1, 2, 3, 2, 1], width := 30, style := 'height') as density;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚            density             โ”‚
โ”‚            varchar             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ–ˆ              โ–ˆ             โ–„ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Style Options:

-- ASCII style for compatibility
SELECT tp_density([1, 5, 3, 8, 2], style := 'ascii') as density;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚       density        โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ @ @  @     @       @ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Dot style for subtle visualization
SELECT tp_density([1, 5, 3, 8, 2], style := 'dots') as density;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚       density        โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ— โ—  โ—     โ—       โ— โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Colorful emoji styles
SELECT tp_density([1, 5, 3, 8, 2], style := 'rainbow_circle') as density;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                 density                  โ”‚
โ”‚                 varchar                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โšชโšซโšชโšซโšซโšชโšซโšซโšซโšซโšซโšชโšซโšซโšซโšซโšซโšซโšซโšช โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Parameters:

  • values: Array of numeric values
  • width: Plot width in characters (default: 20)
  • style: Character set style (โ€˜shadedโ€™, โ€˜asciiโ€™, โ€˜dotsโ€™, โ€˜heightโ€™, โ€˜circlesโ€™, โ€˜safetyโ€™, โ€˜rainbow_circleโ€™, โ€˜rainbow_squareโ€™, โ€˜moonโ€™, โ€˜sparseโ€™, โ€˜whiteโ€™)
  • graph_chars: Custom array of characters for density levels
  • marker: Character to highlight specific values

Available Styles:

  • shaded: โ–‘โ–’โ–“โ–ˆ (default)
  • ascii: .:+#@
  • dots: .โ€ขโ—
  • height: โ–โ–‚โ–ƒโ–„โ–…โ–†โ–‡โ–ˆ
  • circles: โšซโšช๐ŸŸก๐ŸŸ ๐Ÿ”ด
  • rainbow_circle: โšซ๐ŸŸค๐ŸŸฃ๐Ÿ”ต๐ŸŸข๐ŸŸก๐ŸŸ ๐Ÿ”ดโšช

tp_sparkline(values, ...options)

Creates compact sparkline charts perfect for showing trends in time series data and small multiples.

Basic Usage:

-- Simple absolute value sparkline
SELECT tp_sparkline([1, 3, 2, 5, 4, 6, 2, 1]) as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      sparkline       โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    ==---##***@@---   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Delta mode showing change direction
SELECT tp_sparkline([100, 105, 102, 108, 95], mode := 'delta') as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      sparkline       โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ†‘โ†‘โ†‘โ†‘โ†‘โ†“โ†“โ†“โ†“โ†“โ†‘โ†‘โ†‘โ†‘โ†‘โ†“โ†“โ†“โ†“โ†“ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Trend mode with magnitude
SELECT tp_sparkline([10, 12, 11, 15, 8], mode := 'trend', theme := 'slopes') as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         sparkline         โ”‚
โ”‚          varchar          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ /////\\\\\/////\\\\\\\\\\ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Visualization Modes:

1. Absolute Mode (default) - Shows actual values as heights:

-- Stock prices over time
SELECT tp_sparkline([45.2, 47.1, 46.8, 49.3, 52.1, 48.7], width := 20, theme := 'utf8_blocks') as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      sparkline       โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚     โ–‚โ–‚โ–‚โ–‚โ–‚โ–‚โ–…โ–…โ–…โ–…โ–ˆโ–ˆโ–ˆโ–„โ–„โ–„ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- System CPU usage
SELECT tp_sparkline([25, 45, 78, 92, 67, 34], theme := 'ascii_basic', width := 15) as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚    sparkline    โ”‚
โ”‚     varchar     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    --###@@***.. โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2. Delta Mode - Shows direction of change (up/same/down):

-- Sales trend directions
SELECT tp_sparkline([1000, 1200, 1150, 1300, 980], mode := 'delta', theme := 'arrows') as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      sparkline       โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ†‘โ†‘โ†‘โ†‘โ†‘โ†“โ†“โ†“โ†“โ†“โ†‘โ†‘โ†‘โ†‘โ†‘โ†“โ†“โ†“โ†“โ†“ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Temperature changes
SELECT tp_sparkline([72, 75, 75, 78, 71], mode := 'delta', theme := 'faces') as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                sparkline                 โ”‚
โ”‚                 varchar                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜๐Ÿ˜๐Ÿ˜๐Ÿ˜๐Ÿ˜๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜Š๐Ÿ˜ž๐Ÿ˜ž๐Ÿ˜ž๐Ÿ˜ž๐Ÿ˜ž โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. Trend Mode - Shows change direction with magnitude:

-- Market volatility
SELECT tp_sparkline([100, 110, 105, 125, 90], mode := 'trend', theme := 'intensity') as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         sparkline         โ”‚
โ”‚          varchar          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ +++++-----+++++---------- โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

-- Server response times
SELECT tp_sparkline([150, 145, 147, 180, 120], mode := 'trend', theme := 'arrows') as sparkline;
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      sparkline       โ”‚
โ”‚       varchar        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ†“โ†“โ†“โ†“โ†“โ†‘โ†‘โ†‘โ†‘โ†‘โ†‘โ†‘โ†‘โ†‘โ†‘โ‡ฉโ‡ฉโ‡ฉโ‡ฉโ‡ฉ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Available Themes by Mode:

Absolute Mode Themes:

  • utf8_blocks: โ–โ–‚โ–ƒโ–„โ–…โ–†โ–‡โ–ˆ (default)
  • ascii_basic: .-=+*#%@
  • hearts: ๐Ÿค๐ŸคŽโค๏ธ๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿ’œ๐Ÿ–ค
  • faces: ๐Ÿ˜๐Ÿ™‚๐Ÿ˜Š๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜๐Ÿคฉ๐Ÿคฏ

Delta Mode Themes:

  • arrows: โ†“โ†’โ†‘ (default)
  • triangles: โ–ผโ—†โ–ฒ
  • ascii_arrows: v-^
  • math: -=+
  • faces: ๐Ÿ˜ž๐Ÿ˜๐Ÿ˜Š
  • thumbs: ๐Ÿ‘Ž๐Ÿ‘๐Ÿ‘
  • trends: ๐Ÿ“‰โžก๏ธ๐Ÿ“ˆ
  • simple: \\_/

Trend Mode Themes:

  • arrows: โ‡ฉโ†“โ†’โ†‘โ‡ง (default)
  • ascii: Vv-^A
  • slopes: \\\\ \\ _ / //
  • intensity: -- - = + ++
  • faces: ๐Ÿ˜ญ๐Ÿ˜ž๐Ÿ˜๐Ÿ˜Š๐Ÿคฉ
  • chart: ๐Ÿ“‰๐Ÿ“Šโžก๏ธ๐Ÿ“Š๐Ÿ“ˆ

Parameters:

  • values: Array of numeric values
  • mode: โ€˜absoluteโ€™, โ€˜deltaโ€™, or โ€˜trendโ€™ (default: โ€˜absoluteโ€™)
  • theme: Theme name (varies by mode, see lists above)
  • width: Sparkline width in characters (default: 20)

tp_qr(value, ...options)

Creates QR codes with customizable error correction levels and display styles.

Basic Usage:

.mode ascii
-- Simple QR code
SELECT tp_qr('Hello, World!');
โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌœโฌœโฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›
โฌ›โฌœโฌœโฌœโฌœโฌœโฌ›โฌœโฌ›โฌ›โฌœโฌœโฌœโฌ›โฌ›โฌ›โฌœโฌœโฌ›โฌœโฌœโฌœโฌœโฌœโฌ›
โฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌœโฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›
โฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌœโฌœโฌœโฌ›โฌ›โฌœโฌ›โฌ›โฌœโฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›
โฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌœโฌ›โฌœโฌœโฌœโฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›
โฌ›โฌœโฌœโฌœโฌœโฌœโฌ›โฌœโฌ›โฌœโฌœโฌ›โฌœโฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌœโฌœโฌœโฌœโฌ›
โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›
โฌœโฌœโฌœโฌœโฌœโฌœโฌœโฌœโฌ›โฌ›โฌœโฌœโฌ›โฌœโฌœโฌ›โฌœโฌœโฌœโฌœโฌœโฌœโฌœโฌœโฌœ
โฌœโฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌœโฌ›โฌ›โฌ›
โฌ›โฌ›โฌ›โฌœโฌœโฌ›โฌœโฌœโฌ›โฌœโฌœโฌœโฌ›โฌ›โฌœโฌ›โฌœโฌœโฌœโฌ›โฌœโฌœโฌ›โฌœโฌœ
โฌ›โฌœโฌœโฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌ›โฌœโฌœโฌœโฌœโฌ›โฌ›โฌœโฌ›โฌœโฌœโฌ›โฌ›โฌœโฌ›โฌ›
โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌœโฌœโฌœโฌ›โฌœโฌœโฌœโฌ›โฌœโฌ›โฌœโฌœโฌœโฌœโฌ›โฌ›
โฌœโฌœโฌ›โฌœโฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›
โฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌœโฌœโฌ›โฌœโฌœโฌ›โฌ›โฌœโฌœโฌ›โฌ›โฌœโฌœโฌ›โฌœโฌœโฌ›โฌœโฌœ
โฌ›โฌœโฌœโฌœโฌœโฌœโฌ›โฌœโฌœโฌ›โฌœโฌ›โฌœโฌœโฌœโฌœโฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌ›โฌ›
โฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌœโฌœโฌœโฌœโฌ›โฌœโฌœโฌœโฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌœโฌœโฌ›
โฌ›โฌœโฌ›โฌœโฌœโฌ›โฌ›โฌ›โฌœโฌœโฌœโฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌœ
โฌœโฌœโฌœโฌœโฌœโฌœโฌœโฌœโฌ›โฌœโฌœโฌœโฌœโฌ›โฌ›โฌœโฌ›โฌœโฌœโฌœโฌ›โฌœโฌ›โฌœโฌœ
โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌœโฌœโฌœโฌœโฌœโฌ›โฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌ›
โฌ›โฌœโฌœโฌœโฌœโฌœโฌ›โฌœโฌœโฌœโฌœโฌ›โฌœโฌœโฌœโฌ›โฌ›โฌœโฌœโฌœโฌ›โฌ›โฌœโฌ›โฌœ
โฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌœโฌ›โฌœโฌœโฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌœ
โฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌœโฌœโฌœโฌ›โฌ›โฌœโฌœโฌœโฌ›โฌœโฌ›โฌ›โฌœโฌœโฌ›
โฌ›โฌœโฌ›โฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌœโฌ›โฌ›โฌ›โฌ›โฌ›โฌœโฌœโฌ›โฌ›โฌœโฌ›โฌœโฌœโฌ›
โฌ›โฌœโฌœโฌœโฌœโฌœโฌ›โฌœโฌœโฌ›โฌ›โฌ›โฌœโฌœโฌ›โฌ›โฌœโฌ›โฌœโฌ›โฌ›โฌœโฌœโฌœโฌ›

Advanced Options:

-- Custom colors and shapes
SELECT tp_qr('https://query.farm', ecc := 'high', "on" := '๐ŸŸก', off := 'โšซ');
๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก
๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸก
๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก
๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก
๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก
๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸก
๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก
โšซโšซโšซโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸกโšซโšซโšซโšซโšซโšซโšซโšซ
โšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก
๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก
๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซ
๐ŸŸกโšซโšซโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ
โšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก
๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸก
โšซโšซโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸกโšซโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸกโšซ
โšซโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซโšซ
โšซ๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซโšซ๐ŸŸกโšซโšซโšซโšซ๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก
๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸก
๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸกโšซโšซโšซ๐ŸŸกโšซโšซ
๐ŸŸกโšซ๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸก
๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ
โšซโšซโšซโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก
๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซโšซโšซโšซโšซโšซ๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซโšซโšซ
๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸก
๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ
๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซโšซโšซโšซ
๐ŸŸกโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซโšซโšซ๐ŸŸก๐ŸŸกโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ
๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸกโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸกโšซ
๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸกโšซ๐ŸŸก๐ŸŸกโšซโšซ๐ŸŸก๐ŸŸกโšซโšซโšซโšซโšซโšซ๐ŸŸก๐ŸŸก๐ŸŸกโšซโšซ

Parameters:

  • value: String value to encode in the QR code.
  • ecc: Error correction level (โ€˜lowโ€™, โ€˜mediumโ€™, โ€˜quartileโ€™, โ€˜highโ€™, default: โ€˜lowโ€™)
  • on: Character for filled modules (default: โ€˜โฌ›โ€™)
  • off: Character for empty modules (default: โ€˜โฌœโ€™)

Tips and Best Practices

  1. Choose appropriate widths: Longer bars (width 20-30) work well for dashboards, shorter bars (width 10-15) for compact reports
  2. Use thresholds for status indicators: Perfect for showing health, performance, or risk levels
  3. Combine with regular metrics: Text plots complement, donโ€™t replace, numeric values
  4. Consider your audience: ASCII styles work everywhere, emoji styles are more visually appealing but require Unicode support
  5. Leverage density plots for distributions: Great for showing data patterns, outliers, and distributions

Contributing

The Textplot extension is open source and developed by Query.Farm. Contributions are welcome!

License

MIT License

Love โค๏ธ this DuckDB extension? Youโ€™ll Love This.

Get the best from Query.Farm โ€” smart tips, powerful tools, and project updates sent directly to your inbox, but only when weโ€™ve got something great to share.