Skip to content

Data Docs Dashboard UI

Truthound Data Docs provides a Reflex-based interactive dashboard UI for local profile exploration and report review.

This page documents the Data Docs dashboard UI that ships with the main truthound package. It is not the same product as Truthound Dashboard, which is the first-party control-plane for sessions, RBAC, sources, artifacts, incidents, and observability.

Installation

pip install truthound[dashboard]

Quick Start

CLI

# Run with profile
truthound dashboard --profile profile.json

# Custom port
truthound dashboard --profile profile.json --port 3000

# Allow external access
truthound dashboard --profile profile.json --host 0.0.0.0

Python API

from truthound.datadocs.dashboard import launch_dashboard

launch_dashboard(
    profile_path="profile.json",
    port=8080,
    host="localhost",
    title="My Dashboard",
    debug=False,
)

DashboardConfig

A data class for dashboard configuration.

from truthound.datadocs.dashboard import DashboardConfig

config = DashboardConfig(
    # Server settings
    host="localhost",
    port=8080,
    debug=False,

    # Theme
    theme="light",            # "light" or "dark"
    primary_color="blue",

    # Feature toggles
    show_raw_data=True,
    show_correlations=True,
    show_patterns=True,
    enable_export=True,

    # Data
    profile_path="profile.json",     # Profile file path
    profile_data=None,               # Or profile dictionary

    # Branding
    title="Truthound Dashboard",
    logo_url=None,
)

DashboardApp

The dashboard application class.

from truthound.datadocs.dashboard import DashboardApp, DashboardConfig

# Create with configuration
config = DashboardConfig(
    profile_path="profile.json",
    title="My Dashboard",
    port=8080,
)
app = DashboardApp(config)

# Load profile
app.load_profile(profile_path="profile.json")
# Or
app.load_profile(profile_data=profile_dict)

# Run server
app.run(host="localhost", port=8080, debug=False)

Dashboard Structure

Pages

The dashboard consists of 3 main pages:

1. Overview

  • Metrics Grid: Rows, Columns, Memory, Quality Score
  • Alert List: Data quality issues

2. Columns

  • Search: Search by column name
  • Column Card Grid: Detailed information for each column
  • Data type badge
  • Null/Unique/Distinct ratios

3. Quality

  • Overall Quality Score: Large display
  • Quality Analysis Description

UI Features

  • Sidebar: Page navigation
  • Theme Toggle: Light/dark mode switching
  • Responsive: Mobile/tablet support

State Management

The dashboard uses Reflex's state management.

# Internal State class (for reference)
class State(rx.State):
    # Profile data
    profile_data: dict = {}
    row_count: int = 0
    column_count: int = 0
    memory_bytes: int = 0
    quality_score: float = 100.0
    columns: list = []
    correlations: list = []
    alerts: list = []

    # UI state
    sidebar_open: bool = True
    active_tab: str = "overview"
    selected_column: str = ""
    search_query: str = ""
    theme: str = "light"
    is_loading: bool = True

    # Actions
    def load_profile(self, data: dict) -> None: ...
    def toggle_sidebar(self) -> None: ...
    def set_tab(self, tab: str) -> None: ...
    def select_column(self, column: str) -> None: ...
    def set_search(self, query: str) -> None: ...
    def toggle_theme(self) -> None: ...

    # Computed properties
    @rx.var
    def filtered_columns(self) -> list: ...
    @rx.var
    def format_memory(self) -> str: ...

Convenience Functions

launch_dashboard

from truthound.datadocs.dashboard import launch_dashboard

launch_dashboard(
    profile_path="profile.json",  # Or None
    profile_data=None,            # Or profile dictionary
    port=8080,
    host="localhost",
    title="Truthound Dashboard",
    debug=False,
)

create_app

from truthound.datadocs.dashboard import create_app, DashboardConfig

# Create with default settings
app = create_app(profile_path="profile.json")

# Create with custom settings
config = DashboardConfig(
    profile_path="profile.json",
    title="Custom Dashboard",
    theme="dark",
)
app = create_app(config=config)

# Run server
app.run()

CLI Options

truthound dashboard [OPTIONS]
Option Short Default Description
--profile -p None Profile JSON file path
--port 8080 Server port
--host "localhost" Server host
--title -t "Truthound Dashboard" Dashboard title
--debug False Debug mode

Requirements

Dashboard functionality requires the Reflex package:

pip install truthound[dashboard]

If Reflex is not installed:

from truthound.datadocs.dashboard import launch_dashboard

# ImportError: Dashboard requires Reflex.
# Install with: pip install truthound[dashboard]

API Reference

DashboardConfig

@dataclass
class DashboardConfig:
    # Server settings
    host: str = "localhost"
    port: int = 8080
    debug: bool = False

    # Theme
    theme: str = "light"
    primary_color: str = "blue"

    # Feature toggles
    show_raw_data: bool = True
    show_correlations: bool = True
    show_patterns: bool = True
    enable_export: bool = True

    # Data
    profile_path: str | None = None
    profile_data: dict[str, Any] | None = None

    # Branding
    title: str = "Truthound Dashboard"
    logo_url: str | None = None

DashboardApp

class DashboardApp:
    def __init__(self, config: DashboardConfig | None = None) -> None:
        """Initialize dashboard application."""
        ...

    def load_profile(
        self,
        profile_path: str | Path | None = None,
        profile_data: dict | None = None,
    ) -> None:
        """Load profile data."""
        ...

    def run(
        self,
        host: str | None = None,
        port: int | None = None,
        debug: bool | None = None,
    ) -> None:
        """Run dashboard server."""
        ...

launch_dashboard

def launch_dashboard(
    profile_path: str | Path | None = None,
    profile_data: dict | None = None,
    port: int = 8080,
    host: str = "localhost",
    title: str = "Truthound Dashboard",
    debug: bool = False,
) -> None:
    """Launch interactive dashboard."""
    ...

create_app

def create_app(
    profile_path: str | Path | None = None,
    profile_data: dict | None = None,
    config: DashboardConfig | None = None,
) -> DashboardApp:
    """Create dashboard application instance."""
    ...

See Also