Changelog

All notable changes to this project will be documented in this file.

[2026.01.26]

Added

  • Custom Graph - QQ Plot Reference Line: Q1-Q3 reference line added to QQ plots; toggle via showReferenceLine option (default: true)
  • JavaScript API - Models/Reports: Model details retrieval (models.describe) and report operations (reports.list, reports.addContent, reports.addModelSummary)

Fixed

  • DuckDB - ICU Extension: date() function on timestamp columns failed with "Unimplemented type for cast" error; ICU extension now loaded explicitly to ensure timezone-aware casts work

[2026.01.25-1]

Fixed

  • Data Table - Horizontal Scroll: Horizontal mouse wheel scrolling did not work; wheel handler only processed vertical (deltaY) and ignored horizontal (deltaX) input

[2026.01.25]

Added

  • Report - LaTeX Math Support: Inline ($...$) and block ($$...$$) LaTeX math expressions in Markdown reports
  • Settings - Error History: Persistent error logging with export and clear functionality in Settings > Logs

Improved

  • Report Editor - Element Preview: Hover tooltip preview for {{type:id}} patterns instead of inline blocks; reduced keystroke overhead

Fixed

  • Report - Statistics/DataTable Height: Statistics summary and data table elements were cut off at fixed height; now displays full content
  • Report - Graph Wheel Scroll: Mouse wheel scrolling did not work over embedded graphs in reports
  • Report - Auto-Select Correction: Selected report ID now auto-corrects when pointing to deleted or non-existent report
  • Report - Duplicate Confirmation: Delete confirmation dialog now only appears when element is referenced by multiple reports

[2026.01.23]

Improved

  • Filter Expression - Memory Performance: Reduced memory allocation and GC pressure when evaluating filter expressions on large datasets (e.g., 1M rows)

Fixed

  • Report Editor - Chrome Scroll: Mouse wheel scrolling did not work within Report editor on Chrome; wheel events were consumed by CodeMirror's overflow container
  • Report Editor - Cursor Navigation: Arrow key navigation near embedded graph widgets caused RangeError; line numbers were misaligned with content
  • Data Table - Chrome Scroll: Mouse wheel scrolling did not work over table cells on Chrome due to absolute positioning in virtual scroll implementation
  • Custom Graph - X Axis Label Overflow: X axis tick labels overflowed beyond graph boundary when zoomed; labels now clipped at graph edge

[2026.01.21]

Added

  • Histogram - Integer Alignment: Small-range integer columns (range < 30) automatically apply binwidth=1 and center=0, aligning tick labels with bar positions for discrete integer data (e.g., day of week 0-6, month 1-12, rating 1-5)

Fixed

  • Graph Builder - Layout Shift: Flicker during initial render eliminated; container hidden until ResizeObserver reports actual dimensions
  • Histogram - Bar Width: Bar width calculated correctly for histograms with few bins; now uses bin width (xmin/xmax) instead of data point distance
  • Histogram - Bin Boundary Precision: Floating-point errors in bin boundaries (e.g., 0.30000000000000004) caused incorrect row selection; boundaries now rounded based on bin width precision
  • Data Table - Filtered Data: "Dataset not found" error in Statistics/SelectedRows tabs after opening Filtered Data tab; dataset registration added to 4 missing locations
  • Data Table - Filtered Data Cleanup: Closing tabs with ephemeral datasets now properly removes the dataset regardless of tab type (previously only worked for filtered-data tabs)
  • Project Overview - Source URL: Datasets loaded from URL now display the source URL in Project Overview and Lineage tabs instead of showing blank

[2026.01.20]

Added

  • Custom Graph - Integer Count Axis Ticks: Count/bin/timebin statistics display integer-only tick marks on Y axis (e.g., 0, 1, 2, 3 instead of 0, 0.5, 1, 1.5); also applies to X axis with flip coordinate system
  • Custom Graph - Categorical Axis Zoom/Pan: When X axis is categorical and Y axis is continuous, Y axis zoom/pan is enabled; vice versa for continuous X with categorical Y; pan constrained to user-defined domain min/max
  • Custom Graph - Point Dodge Position: Point geometry with categorical X axis spreads points horizontally within each category when using Dodge position with color/fill grouping
  • Custom Graph - Errorbar Dodge Position: Errorbar geometry with categorical X axis aligns error bars with dodged bar/point positions
  • Custom Graph - Duplicate X Value Warning: Line/Area/Step geometry with identity stat shows warning banner when multiple data points exist for the same X value within a group, which causes ambiguous line paths

Fixed

  • Custom Graph - X Axis Label Margin: Datetime X axis labels had excessive bottom margin (~102px) due to estimated label height; margin reduced to ~37px by measuring actual rendered label dimensions
  • Custom Graph - Tooltip $label Variable: Custom tooltip template $label returned undefined; switch statement lacked label case; replaced with mapping object that includes all tooltip variables
  • Custom Graph - Geometry Position Validation: Line/Step geometry allowed Stack/Fill position selection which produced broken rendering; these options are hidden for Line/Step; Jitter option added for Errorbar
  • Custom Graph - Bar Fixed Color Selection: When fill aesthetic was set to fixed color (e.g., "#ff0000"), selection highlight bars used default color instead of the fixed color; fill value lookup unified across all bar types
  • Custom Graph - Negative Bar Selection Position: Selection highlight for negative value bars rendered upward from the bar bottom instead of downward from zero baseline; calculation changed to mirror positive bar behavior
  • Custom Graph - Bin Boundary Selection: Clicking a histogram bin selected rows from adjacent bins at boundary values due to BETWEEN (inclusive both ends); changed to >= min AND < max (left-closed right-open interval)
  • Custom Graph - Secondary Y Axis Auto-Enable: Changing Y axis zoom setting caused secondary Y axis to enable automatically due to shared zoom state; Y2 axis zoom state removed and derived from Y axis setting at render time
  • Custom Graph - Area Stack/Fill Position: Area geometry ignored stack/fill position and rendered all areas from y=0; changed to read y0/y1 from stackBase/stackTop computed by position adjustment
  • Data Table - Filter NULL Comparison: column > NULL returned true for non-null values; changed to return false for all comparison operators per SQL standard; use IS NULL / IS NOT NULL for null checks
  • Graph Builder - JavaScript API Tab State: window.midas.tabs.open('graph-builder') without options caused undefined tabViewState; default graph type ('histogram') applied when initialGraphType not specified

[2026.01.18]

Added

  • Custom Graph - Errorbar Geometry: Error bar geometry for displaying confidence intervals and standard errors
  • Custom Graph - Area Click Selection: Click selection support for Area geometry
  • Custom Graph - Datetime Scale Auto: Automatic scaleTime application for datetime/date columns
  • Graph Builder - Size Settings: Width and height configuration for graphs
  • Summary Stat - Error Bar Functions: Aggregation functions for error bars (se, ci_lower, ci_upper, sd)
  • Statistics Output - ymin/ymax: ymin/ymax output destinations for Statistics transformations
  • Histogram - Brush Selection: Brush selection with X-axis direction constraint for Histogram/DatetimeHistogram
  • Edit Mode - Datetime Validation: Validation and parsing for date/datetime types in cell editing
  • JavaScript API - Status: activeDatasetId and activeTabId added to status()
  • JavaScript API - Models/Reports: Model details retrieval and report operations added to window.midas API

Fixed

  • Custom Graph - Legend Alpha: Legend colors did not match bar colors when alpha was set (e.g., Overlay mode histograms); legend now applies layer's alpha value
  • Custom Graph - Tooltip Label: Y-axis label showed original column name instead of stat type (Count/Density) when using Y + stat bin
  • Histogram - X Axis Domain: Edge bins were clipped when bin width was large (e.g., 10 bins with 10% width each)
  • Histogram - Horizontal Stacked: Stacked bars rendered incorrectly and zoom operated on wrong axis in Horizontal orientation
  • Histogram - Faceted Scroll: Could not scroll to see all facets when facet count exceeded visible area
  • Datetime Histogram - Tooltip Count: Tooltip always showed count as 1 instead of actual bin count
  • Q-Q Plot - Brush Selection: Brush selection did not select any rows when dragging on the plot
  • Report - Edit Mode Scroll: Tab content could not scroll in edit mode
  • JavaScript API - models.run(): Column names (e.g., sepal_length) were treated as column IDs, causing "column not found" errors; now accepts column names
  • DuckDB - Timezone: timezone() function converted timestamps in the wrong direction (e.g., UTC 21:00 became 12:00 instead of 06:00 JST)

[2026.01.16]

Added

  • PWA - File Handling: Open .mds files directly from OS file manager when MIDAS is installed as PWA (Chrome/Edge 102+, desktop only)
  • JavaScript API - SQL: Extended window.midas API with SQL query capabilities
    • tabs.open() supports initialQuery/initialOutputName for sql-editor tabs
    • datasets.query() with required name parameter and overwrite option (default: true)
  • JavaScript API - Graph Builder: Extended window.midas API with Graph Builder configuration
  • Custom Graph - 1D Brush Selection: Horizontal brush selection for histograms and charts
  • Custom Graph - Fixed Color/Fill: Support fixed color values for Color/Fill aesthetics
  • Custom Graph - Q-Q Plot: Rewritten Q-Q Plot using Custom Graph engine
  • Crosstab - Value Field Selection: Improved value field selection with multiple aggregations on same column
  • View Menu - New Dataset/Report: Added "New Dataset" and "New Report" options to View menu submenus

Fixed

  • Data Table - Filter Expression: Comparison operators (>, <, >=, <=) failed on datetime columns; now correctly parses datetime strings
  • Custom Graph - Position Dodge: Bars were not rendered and selection expression was incorrect when using categorical X axis with Position Dodge
  • Custom Graph - hline/vline Validation: "X aesthetic is required" error incorrectly shown when selecting hline geometry
  • Histogram - X Axis Ticks: Tick labels were positioned at bin edges instead of bin centers
  • Histogram - Boundary: Data was placed in wrong bins when boundary parameter exceeded minimum data value, causing incorrect row selection on click
  • Histogram - Legend Color: Bar colors did not match legend colors due to inconsistent category ordering
  • Datetime Histogram - Selection: Clicking or double-clicking bars did not select rows due to datetime string comparison failure
  • Crosstab - Single Click Selection: Single-clicking cells did not highlight corresponding rows in other graphs
  • GLM Diagnostics - Selected Points: Table showed column IDs instead of names, and displayed "N/A" instead of actual data values
  • Reload Dataset Dialog: Loading spinner continued indefinitely when file selection dialog was cancelled

[2026.01.14]

Added

  • Custom Graph - Transform Statistics: Linear transformation statistics (offset, scale) for data normalization
  • Custom Graph - ECDF Statistics: Empirical Cumulative Distribution Function for distribution analysis
  • Custom Graph - Axis Label Rotation: Unified label rotation support for all axis types
  • Statistics - Default Tooltip: Default tooltips for all graphs in Statistics tab
  • Statistics - Filter Support: Statistics tab now reflects Data Table filter results
  • Statistics - Datetime Histogram: Improved with time interval selection, X-axis ticks, and trend display
  • Graph Builder - TimeBin Statistics: Time series binning for temporal data aggregation
  • Graph Builder - Multiple Stats Chain: UI for chaining multiple statistical transformations
  • Graph Builder - Sort Statistics: Unified xSort into sort stat for flexible sorting configuration

Fixed

  • Custom Graph - Threshold Scale Grouping: Fixed grouping being ignored when using Threshold Scale with Line/Step/Area geometries
  • Custom Graph - Scale Type Default: Changed default Scale Type to Categorical for better initial behavior
  • Custom Graph - Line/Step Aesthetics: Fixed Size/Linetype aesthetic mapping not working in Line/Step geometries
  • Custom Graph - Datetime Tooltip: Display datetime values in human-readable format instead of Unix timestamps
  • Custom Graph - Numeric Category Domain: Support for numeric category domain settings
  • Graph Builder - Filtered Data Statistics: Fixed Statistics not working in Filtered Data tab opened from Graph Builder
  • Graph Builder - Layout Overflow: Fixed buttons overflowing in Flexbox layout
  • Selected Rows - Menu Position: Fixed kebab menu position in Selected Rows tab
  • Open from URL - HTTP Error: Display clear error message when using HTTP URLs (HTTPS required)

[2026.01.12]

Added

  • Selected Rows - Ephemeral Dataset Support: Selected Rows tab now works with ephemeral datasets (SQL query results, filtered data)
  • Selected Rows - Dataset Name Display: Display target dataset name in the Selected Rows tab header
  • Custom Graph - Legend Control: Show/hide legend per layer with showLegend property
  • Custom Graph - Threshold Scale Without Variable: Threshold Scale can now be used without variable mapping for fixed conditional coloring

Fixed

  • Custom Graph - Bin Selection Color: Fixed bin selection color appearing blue instead of the configured highlight color when using Threshold Scale

[2026.01.11]

Added

  • GLMM (Generalized Linear Mixed Model): Mixed effects model implementation with Nelder-Mead optimization for variance component estimation
  • PCA (Principal Component Analysis): Dimensionality reduction with scree plot, loadings table, and score export to dataset
  • Statistics - Categorical Bar Chart: Frequency bar chart display for categorical columns
  • Statistics - Drilldown Analysis: Drill down into subsets by double-clicking graph elements (histogram bins, bar chart bars)
  • Selected Rows - Selection Display: Show selection conditions and "Open as Filtered Data" button
  • Custom Graph - Conditional Color Mapping: Apply different colors based on conditions (e.g., above/below threshold)
  • Report - Double-click Support: Double-clicking graph elements in Report View opens Filtered Data tab
  • JavaScript API: Exposed window.midas API for AI agent integration with Playwright MCP

Fixed

  • Custom Graph - vline/hline Color: Color aesthetic mapping in vline/hline geometries was ignored; now correctly applies color scale when using data-driven reference lines

[2026.01.07]

Added

  • Graph Builder - Double-click to Open Filtered Data: Double-clicking histogram bars, bar chart bars, scatter plot points, or other graph elements opens a Filtered Data tab showing only the selected rows
  • Statistics Tab - Double-click Support: Double-clicking histogram bins, category values, or time series points in Statistics Tab opens Filtered Data tab
  • Hypothesis Test - Double-click Support: Double-clicking diagnostic histogram bins in t-test panel opens Filtered Data tab
  • Custom Graph - Tooltip: Configurable tooltips for graph elements with Auto, Encoding, and Custom modes. Auto mode displays mapped aesthetics, Encoding mode allows variable selection, and Custom mode supports template syntax with $x, $y, $color, $fill, and stat output variables
  • Logs Tab: View application logs in Settings with IndexedDB persistence, log level filtering, and export functionality
  • Workspace - Tab Reordering: Drag and drop tabs to reorder them within a workspace
  • SQL Query - Edit: Edit existing SQL Query datasets from the context menu
  • Import Data - URL: Import CSV files directly from URLs in the Import Data modal

Fixed

  • SQL Query Result - DATE Format: DATE type columns now display as date-only (YYYY-MM-DD) instead of datetime format with time component

[2026.01.05]

Added

  • Graph Builder - ymean Stat: Mean line statistical transformation for control chart applications
  • Graph Builder - vline/hline UI: Vertical and horizontal reference line configuration in layer settings
  • Graph Builder - Axis Title Spacing: Configurable spacing between axis title and axis labels
  • Graph Builder - Graph Type Combobox: Searchable Combobox for Graph Type selection
  • Graph Builder - Low Cardinality Numeric: Low cardinality numeric columns available for Color/Shape/Fill aesthetics
  • Graph Builder - Auto Y-Axis Titles: Automatic Y-axis title generation for Survival and Cumsum statistics
  • Statistics - Datetime Histogram: Datetime/date column visualization changed from Rug Plot to temporal histogram with zoom controls
  • Model Retraining: GLM and Random Forest models can be retrained when training dataset is reloaded, eliminating Python pickle dependency
  • Settings - Delayed Rendering Threshold: User-configurable threshold for delayed rendering of large graphs
  • Analysis Tabs - Default Dataset: Analysis tabs now default to the active dataset when opened

Fixed

  • Custom Graph - ymean Without X: ymean stat produced no data points when X-axis was not specified; now correctly generates mean line for hline geometry
  • Custom Graph - Axis Title: Axis titles did not appear when added after initial render, and old titles persisted after removal; setup/render lifecycle now properly separated
  • Custom Graph - Multi-layer Validation: Only the first layer was validated; subsequent layers with missing X/Y aesthetics caused runtime errors instead of validation errors
  • Custom Graph - Legend Margin: 100px right margin was reserved even when no color/fill/stroke aesthetics were set; margin now automatically removed when legend is not needed
  • DerivedDataSet - Enum in Worker: Enum definitions were not passed to DuckDB worker during topological evaluation, causing enum columns to fail after project reload in certain scenarios

Changed

  • Graph Builder - Global Aesthetics: Simplified Global Aesthetics to X/Y only; other aesthetics moved to layer-specific settings
  • Public Key Export: Removed self-declared metadata from public key files

[2026.01.01]

Added

  • Graph Builder - Cumsum: Cumulative sum statistical transformation for trend analysis
    • Support for categorical X-axis in Summary/Cumsum statistics
  • Graph Builder - X Sort: X-axis sorting option in layer configuration
  • Statistics - Histogram Priority: Histogram now displayed first in single-column statistics
  • Statistics - Comparison Quantiles: Detailed percentiles (P1, P5, P10, P25, P50, P75, P90, P95, P99) in Comparison Table
  • Data Table - Column Width Persistence: Column widths saved and restored across sessions (Issue #419)
  • Enum - Auto-Generate from Column: Generate enum definitions from dataset column values (Issue #382)
  • Workspace - Submenu Selection: Changed New Workspace from dialog to submenu format (Issue #420)
  • Analysis Tabs - Variable Selection UI: Improved variable selection interface for GLM, Random Forest, Kaplan-Meier, Cox Regression

Fixed

  • Custom Graph - Margin Calculation: Extra whitespace (~19px) appeared near Y-axis label due to inconsistency between margin calculation and drawing position (Issue #446)
  • Custom Graph - Legend Margin: 100px right margin was reserved even when legend was not displayed, wasting graph space (Issue #446)
  • Custom Graph - Datetime X-Axis: Datetime X-axis was not rendering correctly; datetime format now applied to Identity stat as well
  • Custom Graph - Categorical Bar: Bar geometry now correctly supports categorical X-axis columns
  • Custom Graph - Bar xSort Limit: Extra bars were drawn when xSort.limit was applied
  • Histogram - Show Density Error: Enabling "Show density" checkbox in Column Statistics caused Error Boundary to catch exception; layer groups are now dynamically managed (Issue #440)
  • Histogram - Sizing: Fixed infinite resize loop in Graph Builder (flexbox min-height issue), missing px unit in width/height, and narrow drawing width in Pair Plot
  • DerivedDataSet - Scale Reset: User-defined scale changes were reset when reloading source dataset; now preserves scales marked as inferredAutomatically: false (Issue #424)
  • Enum - Type Conversion: Silent fallback to VARCHAR when enumName was not specified; now shows proper UI feedback and falls back to string type when enum definitions are invalid (Issue #383)
  • Enum - Statistics Display: Enum columns now display statistics correctly, matching string type behavior
  • Statistics - Quantiles Format: Quantiles display in Comparison Table now uses consistent numeric notation instead of mixed formats
  • Project Lineage - Theme Colors: Hardcoded color values replaced with theme variables for consistent theming (Issue #387)
  • Sorting - Null Values: Null values now always placed last when sorting, regardless of sort direction

[2025.12.30]

Added

  • Random Forest: Machine learning prediction using Pyodide (scikit-learn)
    • Training with configurable parameters (n_estimators, max_depth, etc.)
    • OOB (Out-of-Bag) score for model evaluation
    • Prediction on new datasets with result visualization
    • Confusion matrix and classification metrics for evaluation
  • Graph Builder - Scatter Plot Integration: Scatter Plot now uses Custom Graph renderer
    • Brush selection for selecting data points by dragging
    • 2D density visualization with configurable color scales
    • Delayed rendering for large datasets
  • Custom Graph - Statistics: Added xmean and xmedian statistical transformations for vertical reference lines
  • Workspace Template: Save and restore workspace layouts as templates
  • Project Lineage - Schema: Display column schema information in the detail panel
  • PWA - CDN Caching: DuckDB and Pyodide CDN resources are now cached for offline use
  • Empty Pane Delete: Added delete button to empty panes for easier workspace management
  • DerivedDataSet Reload: Reload parent PrimaryDataSet from DerivedDataSet context menu
  • Enum Dependency Check: Warning dialog when editing enum definitions that are used by columns
  • Help Menu - English Docs: Enabled Documentation > English menu item

Fixed

  • DerivedDataSet - Enum Inheritance: Enum type and enumName were not inherited from parent schema, causing enum columns to appear as string type
  • DerivedDataSet - Ordinal Sort: Ordinal scale columns were sorted alphabetically instead of enum definition order
  • Custom Graph - Ribbon Geom: ymin/ymax aesthetics were ignored; Ribbon geometry now renders confidence bands correctly
  • GLM - isRunning State: isRunning flag was not reset when data validation failed, leaving the UI in loading state
  • GLM - Prediction: Fixed pWithIntercept and getZQuantile calculation errors
  • GLM - Performance: Factorial calculation optimized from O(n) to O(1) using lgamma function
  • Type Conversion - Enum: After converting column to enum type, DataTable showed string type because Arrow format returns enum as UTF8
  • SplitPane: Keyboard resize used fixed 10%/90% limits while mouse used dynamic limits; both now use same dynamic constraint calculation
  • Survival Analysis Tab: View > New Tab showed "Survival Analysis" option which didn't match TabRegistry entries; split into "Kaplan-Meier" and "Cox Regression"
  • Statistics Tab: Content had no right-side padding, causing asymmetric layout; added 12px right padding

[2025.12.24]

Added

  • Kaplan-Meier Tab: Dedicated tab for Kaplan-Meier survival analysis with survival curves and Log-rank tests
  • Cox Regression Tab: Dedicated tab for Cox proportional hazards regression results
  • Graph Builder - Kaplan-Meier Curve: Stat transformation for Kaplan-Meier survival curves with confidence intervals
  • Statistics - Context Help: Inline help explaining statistical measures
  • Dataset Reload: Reload PrimaryDataSet from Project Overview and Project Lineage

Fixed

  • Tab Content Scroll: Prevent scroll chaining when scrolling within tab content
  • Invalid Project URL: Show error message when accessing non-existent project ID via URL
  • Active Panel Indicator: Changed indicator style to border-top for better visibility
  • Context Menu z-index: Fixed context menu appearing behind other elements
  • DerivedDataSet Scale Inheritance: Columns now inherit scale from parent dataset
  • Edit Mode Cache: DuckDB cache now updates correctly after Edit Mode changes
  • Settings Dialog Size: Dialog size now stays fixed when switching tabs
  • Project Lineage Scroll: Fixed scroll target in detail panel

[2025.12.21]

Added

  • Graph Builder - Step Geometry: Step geometry for staircase-style line connections
  • Statistics - Detailed Quantiles: Enhanced quantiles display (P1, P5, P10, P25, P50, P75, P90, P95, P99)
  • MDS Signature Warning: Warning dialog when opening MDS files with unknown signatures

Fixed

  • About Dialog: Updated About dialog image to new blue-based design
  • View Menu - Fullscreen: Toggle Fullscreen menu item now reflects actual fullscreen state
  • Project Lineage - Context Menu: Context menu now closes when clicking outside

Security

  • Key Export: Changed key pair export to password-encrypted format

[2025.12.19]

Added

  • MDS Signature: Sign and verify MDS project files with Ed25519 keys
    • Generate and manage signing keys in Settings
    • Sign projects to ensure integrity and authenticity
    • Verify signatures when opening MDS files

Fixed

  • Data Table/Filtered Data: Preserve filter state when splitting or merging panes
  • Crosstab: Show error message when required fields are not set
  • URL Dataset: Fix cache being used when reloading datasets from URL

Breaking Changes

  • MDS Format: Signature metadata added to MDS file structure. Older versions of MIDAS cannot open signed MDS files.

[2025.12.17]

Added

  • Reshape (Wide/Long): Transform data between wide and long formats
    • Wide to Long: Unpivot multiple columns into key-value pairs
    • Long to Wide: Pivot key-value pairs into separate columns
    • Preview before saving, with row count display
  • Hypothesis Testing: Statistical hypothesis tests with diagnostic visualizations
    • Independent samples t-test with Welch's correction
    • One-sample t-test
    • Shapiro-Wilk normality test
    • Q-Q plot and histogram diagnostics
    • APA format result copy
  • Project Lineage: Redesigned lineage view with improved node layout and visual clarity
  • View Menu: Added Dataset and Report submenus for quick navigation

Fixed

  • Bin Statistics: Now supports datetime and date type columns (Issue #272)
  • Type Conversion: Removed unnecessary checkbox from settings dialog

[2025.12.15]

Added

  • ZIP Import: Import multiple CSV files from a single ZIP archive with preview modal
  • Statistics - Relationships Section: Display relationships between multiple selected columns
    • Correlation matrix with heatmap visualization
    • Pair Plot for numeric columns (2-4 columns)
    • Categorical × Numeric bar charts showing group means
    • Categorical × Categorical cross-tabulation tables
  • Statistics - Skewness/Kurtosis: Added skewness and excess kurtosis to Moments section

Changed

  • Statistics - Compact Display: Redesigned statistics display for better readability
    • Basic info in single line (type, scale, n, missing)
    • Moments and Quantiles in horizontal groups
  • Statistics - Column Type Classification: Changed from data type to measurement scale for determining numeric vs categorical

[2025.12.10-1]

Added

  • Open from URL: Support for opening MDS project files from URL

Fixed

  • Embed Mode: Prevent editing report graph titles in embed mode

[2025.12.09]

Added

  • Landing Page: Added a new landing page at the root URL (/)
    • Hero section with app screenshot
    • Feature highlights and privacy information
    • OGP meta tags for social media sharing
  • English Documentation: Added English translation of all user documentation (12 pages)
    • Getting Started, Data Table, Statistics, Graph Builder, Custom Graph, SQL Editor, Crosstab, Reports, etc.
    • Static HTML generation for English docs
  • Create Dataset: Create new empty datasets from the File menu
  • Selected Rows to Dataset: Create a derived dataset from selected rows in the Selected Rows tab
  • Sandbox Mode: Added sandbox mode for embedding MIDAS in documentation with interactive demos
  • Bin Statistics - Boundary/Center: Added boundary and center parameters for histogram bin alignment

Changed

  • URL Change: The application URL has changed from / to /app.

Fixed

  • Statistics Tab - Kebab Menu: Added kebab menu to all graphs (histogram, scatter plot, time series, date distribution) with "Add to Report" and "Open in Graph Builder" options
  • NULL Display: Improved NULL value display with distinct styling
  • Tab Creation Modal: Fixed infinite loop error in TabCreationComboBox
  • Primary Dataset Edit: Invalidate dependent element caches when editing primary datasets
  • Stale Model Blocking: Block predictions and diagnostics for stale models instead of deleting them

[2025.12.05]

Added

  • Data Table - Edit Mode: Added editing capabilities for primary datasets
    • Inline cell editing with double-click
    • Add new rows
    • Delete rows
  • Project Diff: Compare current project state with saved MDS files
    • Detect changes in datasets, models, and reports
    • Visual diff UI with detailed change information
    • Clickable dataset ID links to open corresponding tabs
  • Report - Markdown Editor: Migrated report editor to CodeMirror with syntax highlighting, autocomplete for element references, and collapsible element preview section
  • Report - Aspect Ratio: Added aspect ratio setting for report elements
  • Report - Element Menu: Added menu button in inline preview with Duplicate and Open Source Dataset options
  • Report - Multi-Reference Warning: Show warning when modifying elements that are referenced multiple times
  • Data Table - Cell Tooltip: Show tooltip with full cell content on hover (500ms delay)
  • Graph Builder - Facet Category Limit: Added Max Facet Categories setting in Settings > Graph tab to prevent browser freezing when selecting columns with too many categories
  • AI Agent Command Interface: Added x: command system for AI agent integration
    • x:tab - Create and configure analysis tabs (SQL Editor, Statistics, GLM, Graph Builder, etc.)
    • x:dataset - Create derived datasets via SQL queries
    • x:report - Add graphs and text to reports
    • x:model - Execute GLM models
    • x:status, x:list, x:describe - Query project state
  • Console Mode: Added console mode UI for AI agents to execute commands and view results
  • Console Mode: Display only the latest command result in UI (full history available in browser console)
  • AI Agent Command - Dataset: Auto-resolve targetDatasetId from SQL query for sql_query type operations
  • Crosstab - Multi-Value Fields: Crosstab now supports multiple value fields with aggregation
  • Custom Graph - Facet Column Types: Facet now accepts all column types (Int64, Float64, datetime, etc.), not just categorical columns

Fixed

  • Custom Graph - Legend Ordinal Order: Fixed legend not respecting ordinal order when ordinal variable is assigned to Fill, Color, Stroke, Shape, or Linetype aesthetics
  • Report - Element Menu (Firefox): Fixed report element menu not clickable in Firefox
  • Report - View Settings: Fixed View Settings not working for graphs in reports
  • Report - Embed Mode: Fixed report tab disappearing when navigating back from embed mode
  • Report - Embed Mode Save: Save project to OPFS before entering embed mode to prevent data loss
  • Data Table Menu - Checkbox UI: Fixed "Save data with project" checkbox not visually updating when clicked directly on the checkbox
  • Data Table - File Selection: Fixed file selection to use input element so it can be opened from command palette
  • Custom Graph - Int64 Axis Tick: Fixed decimal tick values appearing on Int64 type axis
  • SQL Query Editor - INTERVAL Type: Display DuckDB INTERVAL type in human-readable format
  • Storage Management: Display project names instead of project IDs in the Saved Projects list
  • Dataset Rename: Automatically update SQL queries when renaming a dataset that is referenced by SQL Query operations
  • SQL Query Editor: Fixed false positive detection of multiple statements when semicolon appears inside string literals
  • Project Lineage: Fixed table references in SQL subqueries not being detected for lineage tracking
    • WHERE clause subqueries (IN, NOT IN, EXISTS, comparison)
    • Scalar subqueries in SELECT list
    • HAVING clause subqueries
    • FROM clause subqueries (derived tables)
    • Nested subqueries
  • SQL Query Editor: Fixed UNION/INTERSECT/EXCEPT queries being incorrectly rejected as unsafe operations
  • E2E Test - Quick Access: Fixed test using CSS class selector that didn't work in production builds

[2025.12.01]

Added

  • Open from URL - CSV Support: Load CSV files directly from URLs with progress display, cancellation, and Content-Type validation
  • Application Settings: Added settings dialog with trusted URL whitelist management for Open from URL
  • Report - Add Text Button: Added "Add Text" button to report header kebab menu

Fixed

  • Graph Builder - X-Axis Label Rotation: Improved label rotation logic to compare label width with band width
  • Data Table - Filter Expression: Unified filter expression syntax to DuckDB SQL standard (quotes and operators)
  • Settings - UI Separation: Separated Settings and Storage Management into distinct buttons
  • DuckDB Worker - Initialization: Fixed DuckDB being initialized twice in worker
  • Data Table - Save Filtered Dataset: Automatically opens the new tab after saving filtered dataset
  • Time Series - Resize: Fixed Time Series graph not resizing with container
  • Create New Tab - Linear Regression: Removed deprecated Linear Regression option from dialog

[2025.11.30]

Added

  • PWA Support: Added Progressive Web App support for offline access and installation
  • DuckDB Worker - SQL Cancel: DuckDB now runs in a Web Worker with SQL query cancellation support
  • Data Table - Save Filtered Data: Filter results can now be saved as derived datasets
  • Graph Builder - Tile Ordinal Axis: Tile (Heatmap) now supports ordinal axis scales

Fixed

  • Data Table - Reload Cache: Fixed transitive derived dataset cache not being cleared on primary dataset reload
  • SQL Editor - DATE Type: Fixed DATE type displaying as numbers in SQL query results
  • Graph Builder - Dataset Selection: Fixed ID duplication error in dataset selection
  • SQL Editor - Materialized View: Fixed Materialized View checkbox state not persisting correctly

[2025.11.27]

Added

  • Help Menu - Documentation: Added Documentation submenu with Japanese/English links
  • Graph Builder - Geom Tile: Added geom_tile for creating heatmaps and tile-based visualizations
    • Supports continuous color scales for numeric fill values
  • Graph Builder - Summary Statistics: Added stat_summary transformation for aggregate visualizations
    • Mean, median, min, max, sum, and custom percentile functions
    • Output selection (y, ymin, ymax) for different geometry types
    • Complete option to show all x-axis categories including those with no data
  • Graph Builder - Fixed Fill Color: Added option to set a fixed fill color independent of data
  • Dataset Metadata - Description: Added ability to edit dataset descriptions in Dataset Metadata modal

Fixed

  • Graph Builder - Facets: Fixed aesthetic scale domains to be unified across all facet panels
  • Graph Builder - Facets: Fixed "Complete missing combinations" option to apply consistently across all panels
  • Graph Builder - Alpha Aesthetic: Enabled Alpha aesthetic mapping for Bar, Line, Area, and Tile geometries

[2025.11.25]

Added

  • Project Lineage - Context Menu: Right-click context menu for lineage graph nodes
    • Open/Delete menu for datasets, models, and reports (Focus/Close for tabs)
    • Shows dependencies in warning dialog before deletion
    • Deletes all dependent objects when confirmed
  • Documentation Link: Added "Documentation (ja)" link in About dialog for quick access to Japanese documentation
  • MDS URL Duplicate Detection: Prevent duplicate projects when opening same URL multiple times
    • Shows confirmation dialog when opening an MDS URL that was previously loaded
    • Three options: Open Existing (use cached version), Open as New (create new copy), or Cancel
    • Displays project information (name, last modified, fetched time) in confirmation dialog
    • Tracks source URL and fetch timestamp for each project (sourceUrl, sourceUrlFetchedAt)
    • Helps users avoid accidentally creating duplicate projects from the same source
  • Embed Mode - Local Projects: Enter Embed mode from locally opened projects
    • "Embed Mode" menu item in report menu (⋮ button)
    • Browser back button returns to normal ProjectView
    • Auto-loads project from storage when accessing embed URL directly

Fixed

  • Embed Mode - External MDS Loading: Fixed /?mds=<URL>&embed=true not working at root path
    • Root path with mds parameter now correctly renders EmbedView
    • Shows proper error message when mds parameter is missing in embed mode

Removed

  • Report HTML Export: Removed the "Export Report as HTML" feature
    • The hacky DOM-cloning approach had reliability issues with CSS and SVG rendering
    • Use browser's print function (Cmd+P / Ctrl+P) and "Save as PDF" as an alternative

[2025.11.24]

Added

  • Embed Mode: Embed reports in external websites using iframe
    • URL format: ?mds=<URL>&embed=true&report-id=<ID> or &report-name=<NAME>
    • Clean view-only display without menus or editing UI
    • "Created with MIDAS" attribution in bottom-right corner
    • Falls back to first report if no report specified
  • Graph Builder - Responsive Height: Graphs now automatically adjust to container height changes
  • URL-based MDS Loading: Load MDS project files directly from URLs using ?mds= parameter
    • Share projects by simply sharing a URL
    • Three-tier security validation: blocks cloud metadata endpoints, URL-based whitelist, warning dialogs for untrusted sources
    • 10MB file size limit to prevent DoS attacks
    • Protects users by warning about public file hosting services (GitHub, S3, etc.) where unverified content may exist
    • SEO-friendly canonical URLs (excludes tracking parameters)

Fixed

  • Graph Builder - Pair Plot: Fixed Pair Plot to scale dynamically based on container size instead of using fixed dimensions
  • Crosstab - Bar in Cell: Fixed minimum values showing no bar in Bar in Cell visual mode
  • Statistics: Fixed date/datetime column statistics (Earliest/Latest/Time span) not displaying

Changed

  • ID Generation: Unified all ID generation to use UUID v4 format with type-specific prefixes
    • All elements (graphs, reports, datasets, tabs) now use globally unique identifiers
    • Prefixes (graph-, report-, dataset-, etc.) maintained for better debugging experience
    • Eliminates potential ID collision issues in distributed or concurrent usage scenarios

[2025.11.21]

Added

  • Custom Graph - Facets: Facet Wrap and Facet Grid functionality
    • Split data by categorical variables to create multiple sub-graphs
    • Facet Wrap: Grid layout with single variable
    • Facet Grid: 2D grid with row and column variables
    • Horizontal scrolling for viewing all panels when exceeding screen width
  • Custom Graph - Density (KDE): Kernel Density Estimation statistical transformation
    • Added as independent layer statistics option alongside Identity/Count/Bin
    • Bandwidth parameter configuration
    • Y Scale options (count/density) for both Bin and Density statistics
    • Automatic "Density" Y-axis title generation
    • Grouped density curves by categorical aesthetics (color/fill/stroke)
  • Custom Graph - Secondary Y Axis: Dual Y-axis support for overlaying different scales
    • Configure right-side Y axis independently (scale type, title, domain, ticks)
    • Per-layer Y axis selection (Primary/Secondary)
    • Synchronized zoom behavior across both axes
    • Available in Cartesian coordinate system only
  • Custom Graph - Categorical Color Palette: Discrete color palette for categorical variables
    • Optimized color selection for categorical data visualization
  • Documentation: Enhanced documentation site features
    • Left sidebar navigation for improved browsing
    • 404 error page for invalid documentation URLs
  • Graph Builder - Responsive Preview: Dynamic preview height adjustment based on content

Fixed

  • Custom Graph - Color/Fill Specification: Unified color and fill aesthetics to match ggplot2 conventions
    • Bar: fill for bar color, color for border (removed color fallback to fill)
    • Area: fill for area color, color for border, changed grouping from color to fill
    • Point/Line: No changes (already compliant)
    • Added fillScale and strokeScale support across all layers
  • Custom Graph - Layer Aesthetics: Show only supported aesthetics per geometry type
    • Point: x, y, color, fill, stroke, size, shape, alpha
    • Line: x, y, color, size, linetype, alpha
    • Bar: x, y, fill, color, alpha (stroke not supported)
    • Area: x, y, fill, color, alpha
    • Prevents configuration of unsupported aesthetics that would be ignored
  • Custom Graph - Bar Position Settings: Position (Identity/Stack/Dodge) now applies correctly
  • Custom Graph - Bar Display: Corrected bar rendering issues
  • Custom Graph - Stack Position: Fixed stacked bar/area positioning calculation
  • Custom Graph - Bar Axis Overlap: Bars no longer overlap with axis lines
  • Custom Graph - Bin Statistics Aesthetics: Aesthetics (color/fill/size) now preserved when using Bin statistics
  • Custom Graph - Legend Titles: Column names now display correctly in legend titles instead of column IDs
  • Custom Graph - Bar Layer: Disabled color aesthetic for Bar layers (fill is the correct aesthetic for bars)
  • Custom Graph - Query Result Categorical Axes: Categorical columns from Query Result datasets now recognized properly
  • Custom Graph - Axis Labels: Automatic generation of axis labels (axis titles) from column names
  • Custom Graph - X Axis Tick Overlap: Fixed overlapping tick labels on X axis
  • Custom Graph - Facet Settings Layout: Improved Columns and Rows layout in Facet configuration UI
  • Custom Graph - Facet Responsive Sizing: Facet panels now resize dynamically based on parent container dimensions
  • Custom Graph - Facet Label Clipping: X axis labels in faceted graphs no longer get clipped
  • Custom Graph - Density with Faceting: Density curves and faceting can now be used simultaneously
  • Custom Graph - Flip Coordinate Histograms: Numeric histograms now render correctly when using flip coordinate system
  • Custom Graph - Density Y Axis Requirement: Fixed Density statistics specification to correctly indicate Y axis is not required
  • Graph Builder - Preview Scroll: Fixed scroll behavior in preview container
  • Graph Builder - Dataset Dropdown: Corrected dataset dropdown display issues

[2025.11.17]

Added

  • Custom Graph: Grammar of Graphics-based graph creation feature
    • Multiple geometry types (Point/Line/Bar/Area)
    • Layer-based multi-layer support
    • Statistical transformations (Identity/Count/Bin) and position adjustments (Identity/Stack/Dodge)
    • Categorical scale and color scale configuration UI
    • Additional aesthetic channels (size, fill, stroke, alpha)
    • Coordinate system transformations (cartesian/flip) and legend rendering
    • Support for ordinal/nominal columns
    • Category order customization with Reverse button
    • Two-pane layout with collapsible configuration sections

Fixed

  • Project Lineage: Fixed issue where SQL dependencies with multiple tables were not tracked correctly
    • Added support for CROSS_PRODUCT (comma-separated tables)
    • Removed duplicate edge creation
  • Graph Builder: Fixed issue where previous rendering remained when settings changed
  • DerivedDataSet: Fixed recursive evaluation of parent datasets
  • Data Table: Fixed conflict between cell copy feature and row context menu

Performance

  • DuckDB: Improved DuckDB initialization speed for SQL evaluation

[2025.11.05-2]

Fixed

  • Column Type Conversion: Fixed issue where excluded rows were not preserved after project save and reload when using EXCLUDE mode (#174)
  • Histogram: Fixed rendering issue for datasets with 1000+ rows (#176)
  • Graph Builder - Bar Chart: Fixed D3 scale replacement issue causing incorrect bar positioning

[2025.11.05]

Added

  • Dummy Coding: Transform categorical variables into dummy variables for GLM analysis
    • Option to keep original columns alongside dummy variables
    • Scale transformation functionality for categorical variables
    • Boolean columns included as-is by default
  • Dataset Metadata: Display dataset information modal showing row count, column count, data types, and other metadata
  • GLM: Web Worker implementation for non-blocking computation
    • Real-time progress tracking with iteration details
    • Convergence history saved as dataset for analysis
    • Coefficient display organized by variable in convergence history table

Fixed

  • Convert Column Type: Fixed error when dataset names contain spaces
  • Filtered Data: Fixed issue where filtered datasets created from DerivedDataSets failed to load after saving and reopening project files
  • GLM: Fixed handling of negative predicted values (μ<0) in Gaussian GLM
  • GLM Progress Dialog: Fixed layout shift during progress updates
  • GLM Convergence History: Fixed data type issues with theta_iter column and improved log-likelihood display
  • Project View: Prevented unintended scrolling behavior
  • Dummy Coding: Fixed persistence of dummy-coded datasets in project files

Performance

  • GLM: 4.7x performance improvement using TypedArray optimization

[2025.11.01]

Added

  • Release Notes: View release history from Help menu and About dialog

[2025.10.31]

Added

  • Graph Builder: Filter functionality to subset data in visualizations
  • Graph Builder - Scatter Plot: Display count of overlapping points in tooltips
  • File Format: MDS project files are now compressed with gzip, reducing file size

Fixed

  • Project Management: Project names are now properly saved and displayed in the project list
  • Project Loading: Improved performance by loading metadata only when listing projects

[2025.10.23]

Added

  • Graph Builder - Bar Chart: Top N filtering and custom sorting options
  • SQL Editor: Overwrite existing datasets functionality
  • Project Lineage: Display dependencies in duplicate name dialog

Fixed

  • Performance: Fixed stack overflow when clicking interval scale columns with large datasets
  • Graph Builder: Fixed issue where user-selected DerivedDataSet was ignored
  • Data Table: Fixed abnormally large column headers
  • Data Table: Improved row number header z-index for better scrolling display
  • UI: Hidden scrollbar in tab header area
  • SQL Editor: Fixed initial query not displaying
  • SQL Query Viewer: Improved color scheme and spacing

[2025.10.22]

Added

  • GLM: Prediction functionality for trained models
  • Graph Builder - Histogram: Faceted mode with statistical annotations
  • Graph Builder - Pair Plot: Multi-variable scatter plot matrix visualization
  • Graph Builder - Scatter Plot: 2D density visualization with configurable color scales
  • SQL Editor: Integrated CodeMirror for improved editing experience
  • Data Management: Dataset deletion with dependency checking

Fixed

  • GLM: Store feature metadata by column ID, resolve names from training dataset during prediction
  • SQL: Allow referencing unevaluated DerivedDataSet in FROM clause
  • Pair Plot: Unified axis positions and colors between histograms and scatter plots
  • UI: Export project dialog now properly displays as single modal

[2025.10.19]

Fixed

  • Sample Data: Fixed country name formatting in Gapminder dataset

[2025.10.18]

Added

  • Initial release