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
$labelreturned undefined; switch statement lackedlabelcase; 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 > NULLreturned true for non-null values; changed to return false for all comparison operators per SQL standard; useIS NULL/IS NOT NULLfor 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()supportsinitialQuery/initialOutputNamefor sql-editor tabsdatasets.query()with requirednameparameter andoverwriteoption (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.midasAPI 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 integrationx:tab- Create and configure analysis tabs (SQL Editor, Statistics, GLM, Graph Builder, etc.)x:dataset- Create derived datasets via SQL queriesx:report- Add graphs and text to reportsx:model- Execute GLM modelsx: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=truenot 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
- URL format:
- 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