Blog

What's New in Jspreadsheet 12.3

Version 12 focused on performance. The 12.3 series focuses on the things you hit every day: a proper time editor, dropdowns that behave on mobile, and collaboration controls that prevent duplicate writes.

icon jspreadsheet

Published at 04/03/2026

The focus of this release

Version 12 set a new performance baseline with real DOM rendering, optimized scroll, and support for large datasets. The 12.3 series shifts to day-to-day usability. Three areas got the most attention: editor flexibility, collaboration reliability, and mobile behavior.

This post covers everything between 12.3.0 and 12.3.10. If you are upgrading from an earlier 12.x version, the changes are backward-compatible. No breaking changes.

Jspreadsheet v12.3 release highlights: time editor, collaboration controls, and mobile dropdown improvements

New: Time editor

Before 12.3, handling time values meant building a custom editor or repurposing the text type with manual validation. Now you set type: 'time' on a column and get a dedicated input that understands hours and minutes.

This matters for scheduling interfaces, timesheet applications, and any form where users enter start and end times. The editor validates input format and integrates with the spreadsheet's data model, so you can use time values in formulas and sorting without parsing strings.

The calendar editor also picks up a new footer property. Add custom action buttons below the date picker for workflows like "Set to today" or "Clear date."

jspreadsheet(document.getElementById('schedule'), {
    worksheets: [{
        data: [
            ['Daily Standup', '2026-03-26', '09:00', '09:15'],
            ['Sprint Planning', '2026-03-26', '10:00', '12:00'],
            ['Code Review', '2026-03-27', '14:00', '15:00'],
            ['Retrospective', '2026-03-28', '15:00', '16:00'],
        ],
        columns: [
            { title: 'Event', type: 'text', width: 200 },
            { title: 'Date', type: 'calendar', width: 140 },
            { title: 'Start Time', type: 'time', width: 120 },
            { title: 'End Time', type: 'time', width: 120 },
        ]
    }]
});

No custom editor code. No format masks. Just set the type and it works.

New: Collaboration control with internalOperations

If you are running Jspreadsheet in a collaborative setup, you may have encountered a specific problem: when a change on the server triggers a cascading update, and the client processes the same cascade, you end up with duplicate writes. The data is correct, but the operation log doubles up.

The new internalOperations flag solves this. Mark a change as internal, and it applies locally without being sent back to the server. Your backend handles its own side effects; the client does not repeat them.

This is a small API addition, but it removes a real friction point for teams building multi-user spreadsheet applications. If you have been writing deduplication logic on the server side, you can likely remove it now.

Improved: Smarter dropdowns

Dropdowns received the most individual fixes in this cycle. The changes address four specific pain points:

Legacy editor alignment. If you are migrating from an earlier Jspreadsheet version, dropdown behavior now matches the legacy editor more closely. Fewer surprises during migration.

iOS double-tap. Opening a dropdown on iOS previously required a workaround for the double-tap gesture. This now works as expected. Tap once to select the cell, tap again to open the dropdown. Feels native.

Mobile keyboard suppression. Dropdowns with autocomplete: false now set inputmode="none" on the input element. On mobile, this prevents the software keyboard from sliding up when the user just wants to pick from a list. A small detail that makes a big difference on phones.

Edge values. Values like undefined, null, and false previously caused unexpected behavior in dropdown lists. These are now handled correctly. If your dropdown source data includes falsy values, they display and select as expected.

Improved: Resizable worksheets

The resizable worksheet feature now works reliably alongside frozen panes and virtualization. In earlier builds, resizing a worksheet that had frozen columns could produce layout misalignment. That is fixed.

Bug fixes

Layout and navigation

Frozen panes update correctly on move. Moving rows or columns within the frozen range now updates freezeColumns and freezeRows properly. Previously, moving a frozen column could leave the freeze boundary in the wrong position.

Filters close on scroll. This matches how desktop spreadsheet applications behave. Scroll the grid, and any open filter dropdown closes automatically. Before this fix, filter dropdowns could float detached from their column header.

Worksheet visibility. A regression in earlier builds caused setWorksheetVisibility to not take effect in certain sequences. Fixed.

Data operations

Undo works after bulk deletions. deleteRow and deleteColumn now properly track history and update row groups. Before this fix, undoing a bulk deletion could leave the spreadsheet in an inconsistent state with misaligned groups.

Structured table references in formulas. secureFormulas now accepts the [] bracket syntax used in structured table references. If your formulas reference table columns by name (like [Sales] or [Region]), these no longer get stripped during formula sanitization.

Numeric masks ignore strings. A numeric mask applied to a column that receives string input now ignores the value instead of producing garbled output. Cleaner behavior when mixed data types exist in a column.

Batch worksheet destroy. The destroy method accepts an array of worksheets, letting you tear down multiple sheets in one call instead of looping.

Collaboration

Formula references during collaborative sessions. Worksheet references in batchFormulas are now guaranteed during collaborative editing. Before this fix, formulas could fail when multiple users edited simultaneously because the worksheet reference was not yet resolved at formula evaluation time.

Faster startup from cache. Build-time cache loading is improved for server-side scenarios. Collaborative sessions start faster when the initial state is loaded from a server-side cache.

Formula Pro 6.0.5

The formula engine update ships alongside the core library. Two targeted fixes:

SUMIF with mixed types. SUMIF previously produced incorrect results when the criteria range contained a mix of numbers and strings. The comparison logic now handles type coercion correctly.

TEXT function locale formatting. The TEXT function produces better results for locale-aware number and date formatting. If you use TEXT to format values for display (like TEXT(A1, "dd/mm/yyyy")), the output is now more consistent across locales.

Update to @jspreadsheet/formula-pro@6.0.5 to get both fixes.

Upgrading

Update your package:

npm install jspreadsheet@12.3.10
npm install @jspreadsheet/formula-pro@6.0.5

No breaking changes from earlier 12.x versions. If you are coming from version 11 or earlier, check the upgrade guide for migration notes.

Changelog

Every commit and fix in detail.

Full Changelog

Upgrade Guide

Migration notes from earlier versions.

Upgrade Guide

Related