# v2.2.2 (2026-07-26)

## New features
- Define `Dygraph.integerTicks` (#925), `Dygraph.pickDateTickGranularity`
- Warn in console if points are out of range (#1050)

## Bugfixes
- Re-add missing `Dygraph.DOTTED_LINE` export
- Some edge cases in the crosshair plugin (#1034, #1038, #1039, #1040)
- Update list of exported symbols
- Drop “comments are OK on data lines” from the CSV documentation, as the CSV file format has no notion of a comment, and the current code merely strips lines beginning with an octothorpe and reportedly sometimes also parts of fields, but (obviously) the field separator can then not be used within a comment
- Document that the input data should be sorted (#503)
- Make date parsing more robust and in particular, allow the epoch (#1062)
- Work around breaking changes in newer node-source-map (Debian#1134275)

## Other user-visible changes
- Add talk link to `tutorial.html`
- Documentation: make clear that use of so-called “AI” / LLMs to prepare a contribution or to communicate with the project or its users is not permitted
- Fix most broken links

## Internal refactors/fixes
- Switch from `jsdoc-toolkit` to `node-jsdoc2` (Debian #1074595)
- Bump some package versions matching Debian bookworm and \*buntu 24.04
- Add support for newer babeljs and uglifyjs3
- Do not embed pre-uglified browser-pack shim, as it may break old browsers

# v2.2.1 (2023-02-16)

## Future incompatibilities
- `window.smoothPlotter` will not be set by `extras/smooth-plotter.js` any more RSN

## New features
- Permit initialising with `[]` as “no data yet” indicator (#597)
- The modularisation of the test setup also allows stable access to exported functions (e.g. `Dygraph._require('dygraphs/src/dygraph-utils.js').numberValueFormatter`) which makes writing one’s own value formatters easier (as usual, proceed with care, exports with an underscore are internal); see <https://dygraphs.com/tests/exported-symbols.html> for the exposed surface
- Provide Dygraph.onDOMready(cb) as lightweight jQuery(cb)/… alternative, to keep the demos/tests self-contained

## Bugfixes
- Fix synchroniser not calling user’s `drawCallback` when blocked (#953) plus do not redraw unnecessarily
- Documentation fixes and improvements including self-checks where possible
- Fix missing legend for `x == -1` (#1002)
- Allow ES6-importing the extras (#848) (#989) (#1009)
- Fix broken zoom also in the drawing test (same as #611/#953)
- Resetting `panEdgeFraction` now works
- Fix tests/unboxed-spark regression caused by PR #936
- Synchroniser doesn’t force x axis range if unzoomed (#956)

## Other user-visible changes
- Fix issue #611 in the drawing demo gallery (#953)
- `jq` is now also required to build
- Fix typos, wordings, apostrophes, etc.
- Export `pickDateTickGranularity` so overriding `dateTicker` is easier
- Error bars are now properly called high/low bands (#1004), but the options stay the same for compatibility
- Document annotations xval for Date better (#970)
- Document more strongly that series labels must be unique (#960)
- Remove references to nōn-existing `yAxisLabelWidth` option
- Fix jsFiddle links from gallery

## Internal refactors/fixes
- Shrink `tests.js` source map and make its build reproducible on Debian
- `tests/resizable.html` exposes the graph object, for quick F12 in-browser use
- Generate `versions.html` and release notes from new top-level [`CHANGES.md`](https://github.com/danvk/dygraphs/blob/master/CHANGES.md)
- Modularise dygraphs/tests setup so we can now also test the minified prod css/js (#1028)
- Generate stable orig tarballs for releases ourselves (we still use the NPM ones for binary tarballs)
- Less fragility with arrow function `this` rebinding check

# v2.2.0 (2023-01-25)

This is the first “full” release after v2.1.0 with the following news:

## Breaking changes
- Stop parsing the deprecated 8-digit ‘YYYYMMDD’ date format (#984) (#985) (#1023)
- GWT “support” is no longer pertinent as we cannot recompile the binary JAR; the latter is still available from the website for now

## New features
- Add option to colour the range selector’s veil (#856)
- Add `strokeStyle` option to crosshair plugin (#955)
- Support `DocumentFragment` as a result from a `legendFormatter` function (#958) (#959)
- Add data index to `legendFormatter` data (#965)
- Implement `#RRGGBB`/`#RRGGBBAA` hex colour parsing
- Make `animateBackgroundFade` into an option
- Add new `resizable` option using `ResizeObserver` on maindiv + CSS
- Add offset config for legend div in follow mode (#946)

## Bugfixes
- Fix duplicate annotation when having duplicate points (#826)
- Make sure that `canvasx` and `canvasy` properties are initialised from the start (#896)
- Fix issue #781 when the y range is zero (#909)
- Synchroniser now calls `highlightCallback` (#935)
- Fix `drawAxes` to allow one of two y axes to be drawn (#936)
- LEGEND: Don’t show y if value is undefined (#853) (#947)
- Fixed “Cannot read property 'length' of undefined” issue (#962) (#963)
- Two fixes in the calculations of pinch-zoom (#990)
- Fix for double paint of grid of x-axis (#1007)
- Fix number of days in a year (#1012)
- Fix `labelsKMB` and `labelsKMG2` (#571) (#994) (#1022)
- Fix label position in `onmouseover` legend mode was never updated
- Fix several cases of mispositioning/missizing by enabling elements before using `offsetWidth` etc.
- Make it possible to use `logscale` (and `sigma`, `wilsonInterval`) per-axis (#986)

## Other user-visible changes
- Documentation is now shipped (mostly self-contained) in the release
- Tests that use Google JSAPI are now marked ⚠ and no other external content is loaded anywhere
- Calculate legend positioning relative to closest data point (#1013)
- Add missing documentation about annotations `xval` option (#992)
- source mapping URLs are now correct (#1027)
- Ship ES5 versions of extras (#952), use them in examples
- Fix documentation/website HTML/CSS/JS bugs (#979) (#1008)
- On the website, external links are now clearly labelled
- The documentation and website now have browsable subdirectories by manually generated directory index files
- Link to UNPKG as CDN as well (to keep neutral; use of CDNs in websites violates the EU-GDPR)
- Most issues with right-to-left languages should now be fixed (#1019)
- Document that Dygraph will misbehave if the main div has padding

## Internal refactors/fixes
- Use link href, not link src (#904)
- Add missing semicolon in externs (#964)
- Large build system improvements relying in large parts on Debian and GHA
- Full licence review as part of uploading to Debian (#1024) (#1025) (#1029); drop embedded code copies
- Fix some JSDoc warnings
- Update to contemporary versions of Python 3, jQuery, Babel, etc.
- Add copies of design documents that were previously only available on Google Docs or part of GitHub issues to offline documentation
- Nuke useless semicola after function declaration bodies
- Fix closure type annotation in `hairlines.js`
- Remove already commented-out obsolete, or redundant, code

# v2.1.0 (2017-12-08)

## New features
- Double click event can be captured and cancelled by plugins (#840)
- `setAnnotations`’ second parameter is now an optional boolean (#851)
- Add `pixelRatio` option, which may allow improved performance on smaller screens by controlling the canvas’ pixel ratio (#877)
- x axis label and tick logic can now operate at millisecond-level granularity (#893)

## Bug fixes
- Repair a bug in “Custom interaction models” demo (#825)

## Internal refactors/fixes
- Fix various spelling mistakes (#844)
- Fix a couple of type signatures in `dygraph-externs.js` (#859)

# v2.0.0 (2017-01-11)

## Breaking changes
- JS files were renamed to `dygraph.js` and `dygraph.min.js`.
- There’s now a `dygraph.css` file that you must include.
- Dropped support for old IE and other non-standard browsers. dygraphs works in IE11. I’m not sure about IE9 and IE10.
- Double-click to unzoom zooms all the way out (and ignores `valueRange`).
- Dropped old-style per-axis/per-series options.

## New features
- Add a `legendFormatter` option (#683)
- `this` is the Dygraph object in all callbacks
- pass through (row, col) to `valueFormatter`
- Option to not sync range in `extras/synchronizer.js`
- Additional options for styling the range selector
- `getRowForX` method
- `setVisibility` can set the visibility of multiple series at once.
- crosshair plugin extra
- rebase/straw broom plugin (#590)
- `highlightSeriesBackgroundColor` option
- `yAxisExtremes()` method.
- Passing strings in native format now throws. (Previously it kinda sorta worked.)

## Bug fixes
- Selections are always cleared with animations
- synchronizer calls previously-set callbacks
- synchronizer only syncs when graphs are ready
- Reset on synchronized graphs failed (#524)
- fix to improve synchronizer performance (#658)
- binary search bug fix in synchronizer
- Fix range selection when chart is located inside fullscreen element (#576)
- `fillAlpha` can be set per-series when `fillGraph` is set.
- `xRangePad` was ignored on unzoom (#657)
- Allow selected points where canvas-y coordinate is 0 (#692)
- Using `valueRange` with `logscale` and `yRangePad` has unexpected results (#661)
- With `drawGapEdgePoints`, unwanted point often drawn at beginning of chart (#745)

## Other user-visible changes
- `legend: follow` positioning changes

## Internal refactors
- Code moved into a `src/` directory
- Tests use Mocha instead of jstd
- dygraphs is split into ES6 modules and uses some ES6 features (e.g. arrows and destructuring).
- dygraphs is built using Babel and browserify
- Code coverage is tracked continuously
- Bundle size is now tracked continuously

# v1.1.1 (2015-06-01)

- Set `this` to the dygraph in all callbacks.
- Minor bug fixes.

# v1.1.0 (2014-12-03)

## Highlights
- dygraphs is now “retina” compatible.
- Dramatically improved performance for filled charts (i.e. `fillGraph`)
- More sensible date ticks: “Jan 08” → “Jan 2008”, “29Jan” → “29 Jan”
- Using a non-existent option now throws (with `dygraph-combined-dev.js`)
- x-axis log scales
- The `labelsUTC` option forces UTC formatting for all labels.
- The new DataHandler system allows for more flexibility in data loading.
- dygraphs has shrunk, because we moved some stuff into “extras” (133 KiB → 122 KiB)

This will be the last major release to support browsers without a native <canvas> implementation. See [blog post](http://blog.dygraphs.com/2014/12/dygraphs-110.html) for more details.

# v1.0.1 (2013-08-29)

Minor bug fixes and updates to web site.

# v1.0.0 (2013-08-14)

Initial Release. See [blog post](http://blog.dygraphs.com/2013/08/announcing-dygraphs-100.html).
