xtermjs/xterm.js
 Watch   
 Star   
 Fork   
2025-12-22 21:48:49
xterm.js

6.0.0

Features

  • #5453 Add synchronized output support (DEC mode 2026)
  • #5436 add range to IHTMLSerializeOptions
  • #5334 Support shadow dom in webgl renderer
  • #5285 Support detailed ligatures and variants
  • #5251 progress-addon
  • #5234 Add reflowCursorLine option
  • #5224 putty-style ED2 sequence handling as terminal option
  • #5107 Add top/bottom border overview ruler options
    • ⚠️ This is a breaking change, ITerminalOptions.overviewRulerWidth is now a property of ITerminalOptions.overviewRuler
  • #5096 Integrate base/ platform from VS Code and adopt scroll bar
    • ⚠️ This is a potential breaking change, the viewport/scroll bar works very differently now
  • #5092 Add support for ESM via esbuild
  • #5034 Expose onWriteParsed on API
  • #4220 Add support to ANSI OSC52

Fixes

  • #5445 Prefer performance.now() over Date.now()
  • #5437 Prevent entire page from scrolling when scrolling in alt buffer with mouse event off
  • #5423 Clear selection on vertical resize
  • #5411 Fix teleport when exiting out of alt buffer. v2
  • #5391 Bring back partial wheel tracking
  • #5390 Fix scrollbar teleport after exiting alt buffer
  • #5386 fix: ensure that currentRow can not go out of the range
  • #5385 Fix terminal find when wrapped
  • #5355 Add note about reverse tabnapping
  • #5346 Remove alt -> ctrl+arrow hack in favor of embedder-specific solutions
    • ⚠️ This is a breaking change, you will need to add keybindings in your code if you want alt to map to ctrl still
  • #5337 Fix finding terms across wrapped lines
  • #5335 webgl: Ignore alpha channel when allowTransparency is false
  • #5328 Refresh viewport after clear or ED
  • #5305 Fix issue where listeners remain after WebglRenderer throws
  • #5291 Make ProgressAddon.onChange non undefined
  • #5282 Fixed CapsLock triggering input twice in MacOS.
  • #5279 Fixes: #5270 regex case-sensitive should behave like monaco
  • #5278 Handle glyph widths up to the maximum device texture size
  • #5277 Disable ligatures when cursor is in range
  • #5276 Fix selection rendering on ligatures in both renderers
  • #5265 Revert to cursor options after DECSCUSR 0
  • #5263 Make textarea readonly when disableStdin is set
  • #5262 Blend cursorAccent with background too
  • #5260 Blend cursor with background to support alpha in webgl
  • #5253 bug: properly render the terminal when open() is called again
  • #5249 Fix click event bug caused by DomRenderer replaceChildren behavior
  • #5209 Ensure last ligature cell is updated
  • #5208 Set liga font feature when ligatures is enabled
  • #5182 fix #5181
  • #5171 Fix links sometimes not activating
  • #5139 Fix image addon not being able to render some jpeg images in IIP
  • #5127 Fix scroll dimensions when switching buffers
  • #5122 Use main document to create viewport element
  • #5102 Ensure decorations are refreshed when origin of scroll event is buffe…
  • #5099 Remove overflow to allow decorations outside terminal
  • #5088 Sync DOM decoration styles when line height/width changes
  • #5067 Correct addon-clipboard ctor types
  • #5027 Finish OSC hyperlinks when the second param is only whitespace
  • #5024 Fix duplicate input for some IMEs
  • #5020 Escape Unsafe HTML Characters in addon-serialize
  • #5003 Support semi-colons in OSC 8 hyperlink URIs
  • #4984 Clear timer when dispose

Performance

  • #5403 Add SearchLineCache for improved search performance
  • #5066 Speed up clearing all markers, mass event listener dispose
  • #5038 Speed up insertion and deletion of values in SortedList by batching and deferring to idle task
  • #5037 Prevent smooth scroll from running more than once per frame
  • #4936 fix: memory leak in CoreBrowserService
  • #4933 Check after updating the SelectionRenderModel
  • #4879 Align character position in a11y tree with the actual rendering

Internal/minor changes

  • #5462 Remove deprecated windowsMode and fastScrollModifier
    • ⚠️ This is a breaking change, these deprecated properties of ITerminalOptions have been removed
  • #5461 Remove need for glob module
  • #5460 Git ignore test-results/
  • #5452 Fix tsc build - upgrade glob version
  • #5450 Fix wrong export path for ESM target in [addon-unicode-graphemes]
  • #5449 Configure "exports" field in package.json [headless]
  • #5446 Migrate from yarn to npm, node 18 -> 22, use npm workspaces
  • #5442 Fix headless module path
  • #5425 Only show char codes for parsing data on trace
  • #5422 Explain filtering unit tests by file
  • #5421 Use Windows PowerShell instead of pwsh 7 in demo
  • #5420 Only log character codes for trace log
  • #5413 Adding EmuDevz to the "Real-world uses" list
  • #5407 Improve Copilot instructions and add test guidelines
  • #5406 Refactor search addon into multiple files, add unit tests
  • #5405 Refactor search addon interfaces
  • #5404 Replace timeout handling with disposableTimeout
  • #5402 Update GitHub Copilot instructions with test details
  • #5401 Refactor search addon types and internal handling
  • #5399 Refactor search constants and improve documentation
  • #5398 Add proper typing for search results change event
  • #5379 Bump form-data from 4.0.0 to 4.0.4 in /addons/addon-ligatures
  • #5362 Move copilot steps to correct folder
  • #5359 Add copilot setup steps
  • #5358 Revert conpty-specific reflow handling
  • #5349 Add comprehensive tests for alt+shift+letter keyboard combinations
  • #5345 Add instructions to help Copilot coding agent
  • #5329 Update and pin esbuild
  • #5322 Bump axios from 1.7.4 to 1.8.2 in /addons/addon-ligatures
  • #5321 Reflow on resize using similar logic to conpty
  • #5317 docs: added usage tip for registerMarker()
  • #5313 Revert "Merge pull request #5253 from akphi/patch-1"
  • #5308 Update AccessibilityManager.ts to use textContent rather than innerText
  • #5290 Progress polish
  • #5286 Move WebGL addon-specific code into addon
  • #5281 Pin Ubuntu 22 to fix playwright GH Actions issue for now
  • #5280 Remove courier fonts from defaults
  • #5275 Demo test button for common ligatures
  • #5252 Fix ReferenceError in publish.js
  • #5247 Update README.md - add ecmaOS as Use Case
  • #5219 Add new site to Real-world uses
  • #5218 Bump cross-spawn from 7.0.3 to 7.0.6
  • #5212 chore(addons/fit): fix typo
  • #5203 Don't hide build folders
  • #5202 Only resolve ligatures externals in commonjs environment
  • #5199 Store the DI decorator's id in specific property (#5131).
  • #5196 Add pyTermTk HTML5 Exporter project to "Real-world uses"
  • #5180 Forward integration test exit code to running proc
  • #5166 Bump express from 4.19.2 to 4.20.0
  • #5165 Bump axios from 1.6.0 to 1.7.4 in /addons/addon-ligatures
  • #5157 Bump path-to-regexp from 1.7.0 to 1.9.0 in /addons/addon-ligatures
  • #5151 Fix 'npm run package' in addon-unicode-graphemes
  • #5148 Bump micromatch from 4.0.5 to 4.0.8
  • #5143 Publish commit and set peerDependencies to @xterm/xterm beta when publishing
  • #5141 Bump webpack from 5.88.2 to 5.94.0
  • #5140 Add Filet Cloud to Real-world uses
  • #5136 Fix description for WebglAddon class in @xterm/addon-webgl
  • #5130 Remove xterm- prefix from addon mjs output
  • #5124 Update node-pty, use conpty.dll
  • #5106 Move to vs/base disposables
  • #5105 Remove the canvas renderer
    • ⚠️ This is a breaking change, this addon no longer exists and we recommend using either the DOM renderer or WebGL
  • #5104 Remove EventEmitter in favor of vs/base/common/event's Emitter
  • #5103 remove _workCell in InputHandler.
  • #5095 Remove procfile
  • #5094 Add build flow images and move logo into new images folder
  • #5093 Align npm and test script names
  • #5091 Ignore EPIPE exception on Windows when reloading demo client
  • #5090 Suppress unrecognized option warning in demo
  • #5089 Remove src dts files and correct exports
  • #5086 Bump ws from 7.5.9 to 8.17.1
  • #5085 Run other integration tests in CI
  • #5083 typescript@5.5
  • #5082 Fix .eslintrc.json warnings, move deprecated to stylistic/ts
  • #5081 Simplify GH action names and remove test/api project
  • #5080 Migrate remaining API tests to playwright and remove API test infrastructure
  • #5079 Migrate more API tests to playwright
  • #5078 Get tests working on node that requires shell arg
  • #5071 Bump ws from 8.13.0 to 8.17.1
  • #5070 Bump braces from 3.0.2 to 3.0.3
  • #5059 Add balena to real world uses
  • #5056 Add app OpenSFTP to README.md
  • #5054 Add powerline git, LN, lock symbols
  • #5052 Update README.md
  • #5049 Add eva pro to README.md
  • #5018 Bump express from 4.18.2 to 4.19.2
  • #5010 Bump follow-redirects from 1.15.3 to 1.15.6 in /addons/addon-ligatures
  • #4989 adding Wave Terminal to the README
  • #4963 Polish convertEol api jsdoc
  • #4940 Update global object fix
  • #4865 Update devcontainer
2024-04-05 22:00:05
xterm.js

5.5.0

🚀 Features

📦 API

  • New opt-in rescaleOverlappingGlyphs option that will conservatively rescale glyphs that likely overlap with the following cell when GPU acceleration is enabled (#4997, #5001, #5012, #5013) via @Tyriar.

    Webgl with the setting off:

    image

    Webgl with the setting on:

    image

    This was primarily added to help with applications that want to achieve GB18030 compliance.

🐞 Bug fixes

  • Improve detection of node and browser, fixing an issue where named colors may not work in themes (#5006) via @Tyriar, @krassowski
  • Fix DOM renderer blink animation (#5009) via @Tyriar, @RahjIII

📝 Documentation and internal improvements

  • Add default scrollback value to .d.ts (#4993) via @Tyriar

📥 Addons

@xterm/addon-search

  • Fix an issue where search decorations would go out of sync (#5008) via @Tyriar, @tabarra

🤝 Compatible addon versions

Addon Version
@xterm/addon-attach 0.11.0
@xterm/addon-canvas 0.7.0
@xterm/addon-fit 0.10.0
@xterm/addon-image 0.8.0
@xterm/addon-ligatures 0.9.0
@xterm/addon-search 0.15.0
@xterm/addon-serialize 0.13.0
@xterm/addon-unicode-graphemes 0.3.0
@xterm/addon-unicode11 0.8.0
@xterm/addon-web-links 0.11.0
@xterm/addon-webgl 0.18.0
2024-03-02 01:00:46
xterm.js

5.4.0

📢 The package has been migrated to the @xterm scope (#4860, #4861) via @Tyriar. This means that the old xterm and xterm-* packages are now deprecated and will no longer be maintained. This was done mainly for security reasons to remove ambiguity around the package names and to prevent potential typosquatting attacks.

Please use the new scoped @xterm/* packages.

📦 API

  • input(data: string, wasUserInput?: boolean): void API to emit an input event from Terminal (#4953) via @arencoskun
  • documentOverride option to help multi-window app support (#4844) via @Tyriar
  • attachCustomWheelEventHandler API to allow embedders to intercept wheel events (#4913, #4915) via @Tyriar, @tisilent

🐞 Bug fixes

  • Selection is now synchronized between the accessibility tree and the main selection model (#4742) via @JasonXJ
  • Fix and add integration tests for inactive selection drawing (#4763, #4808) via @tisilent
  • Fix a possible exception when disposing Terminal (#4776, #4785) via @Tyriar
  • Fix handling of invisible characters in the DOM renderer (#4762) via @tisilent
  • Improve reliability of playwright tests across browsers (#4777) via @Tyriar
  • Fix inverse minimum contrast ratio edge cases (#4778) via @Tyriar
  • Fix regression in forced mouse selection handling (#4783) via @Tyriar
  • Always render cursor above selection in the DOM renderer (#4786) via @Tyriar
  • Get voice over to announce terminal output consistently (#4789) via @meganrogge
  • Use isCursorInitialized correctly in the DOM renderer (#4798) via @tisilent
  • Move WidthCache measurment container to the helper element (#4807) via @mofux
  • Fix DOM renderer showing selection overflowing its container (#4815, #4837) via @tisilent
  • Don't re-render after parse if the viewport did not change (#4820) via @Tyriar
  • Send correct code for ctrl+alt+backspace (#4839) via @JasonXJ
  • Make xterm.js multi-window aware (#4846, #4912) via @Tyriar, @jeanp413
  • Fix node process check for node v21+ (#4851) via @davidfiala
  • Improve non-browser usage of xterm package by preferring globalThis over self (#4856) via @alan-agius4
  • Fix crosshair cursor not working (#4921) via @Tyriar
  • Fix exception in render service (#4954) via @Tyriar
  • Fix spacing when measuring before element is attached to the DOM (#4973) via @Tyriar

📝 Documentation and internal improvements

  • New default text metrics measure strategy (#4929) via @Tyriar. This should improve general performance and also some cases where characters would be cut off.
  • The addon repository package.jsons now point at the correct URL (#4795) via @ujjwalpandey922
  • Upgrade from es6 target to es2021 (#4743) via @Tyriar
  • Set up shared playwright tests for the DOM and canvas renderers (#4768, #4770) via @Tyriar
  • Add Edge as a debug target (#4782) via @Tyriar
  • Fix server debugging target (#4784) via @Tyriar
  • Tweak worker use in playwright tests (#4787) via @Tyriar
  • Remove noisy trace calls (#4796, #4919) via @Tyriar
  • Remove duplicate overviewRulerWidth from demo (#4803) via @tisilent
  • Clean up setCellFromCodePOint internal API (#4825) via @PerBothner
  • Update node-pty (#4832) via @Tyriar
  • Have addons implement their API so it's checked at compile time (#4847) via @tisilent
  • Fix image addon build (#4862) via @Tyriar
  • Remove testing on node v16 (#4866) via @silamon
  • Help embedders avoid memory leaks by unsetting options on dispose (#4910) via @Tyriar
  • Improve structure of link implementation (#4924) via @Tyriar
  • Refactor color handling code and add tests (#4927) via @Tyriar
  • Update eslint and eslint-plugin-jsdoc (#4930) via @PerBothner
  • Ignore out/ dirs in eslint (#4931) via @Tyriar

⚠️ Deprecations

  • The old xterm and xterm-* packages are now deprecated and will no longer be maintained. Please use the new scoped @xterm/* packages instead.

📥 Addons

@xterm/addon-canvas

  • Add underline variants to make underline patterns appear correctly (#4703) via @tisilent
  • Improve rendering of dashed underline patterns (#4874) via @tisilent
  • Support blending of selection and background/powerline characters and the selection (#4920, #4950) via @Tyriar

@xterm/addon-unicode-graphemes

This is a new experimental addon that provides support for grapheme clusters in the terminal (#4519) via @PerBothner

  • Tweak addon export (#4809) via @silamon
  • Remove install instructions from README (#4858) via @Tyriar

@xterm/addon-search

  • Bring back clearActiveDecoration API implementation (#4827) via @Tyriar
  • Re-search when options change (#4831) via @tisilent

@xterm/addon-serialize

  • Fix hex color serialization (#4833) via @arcanis
  • Add ability to serialize via a range (#4877) via @Tyriar

@xterm/addon-webgl

  • Add underline variants to make underline patterns appear correctly (#4703) via @tisilent
  • Improve rendering of dashed underline patterns (#4874) via @tisilent
  • Fix inactive cursor rendering (#4801) via @tisilent
  • Allow addon to work on legacy versions of Safari when webgl2 is explicitly enabled (#4836) via @xiaoxiaobt
  • Support blending of selection and background/powerline characters and the selection (#4920, #4950) via @Tyriar

@xterm/addon-web-links

  • Fix url parsing for urls with percentage sign (#4937) via @szymonkaliski
  • Fix uppercase url parsing (#4965) via @jerch

🤝 Compatible addon versions

Addon Version
@xterm/addon-attach 0.10.0
@xterm/addon-canvas 0.6.0
@xterm/addon-fit 0.9.0
@xterm/addon-image 0.7.0
@xterm/addon-ligatures 0.8.0
@xterm/addon-search 0.14.0
@xterm/addon-serialize 0.12.0
@xterm/addon-unicode-graphemes 0.2.0
@xterm/addon-unicode11 0.7.0
@xterm/addon-web-links 0.10.0
@xterm/addon-webgl 0.17.0
2023-09-08 01:58:11
xterm.js

5.3.0

🚀 Features

  • The default DOM-based renderer is significantly faster now (#4605, #4631, #4651, #4662, #4681, #4754) via @jerch, @Tyriar, @PerBothner, @tisilent
  • The smooth scroll feature now affects scrollLines, scrollPages,scrollToLine, scrollToTop and scrollToBottom (#4482, #4714) via @tisilent, @Tyriar
  • minimumContrastRatio now applies 50% of the contrast ratio to dimmed text (#4672) via @Tyrira

📦 API

  • There's a new trace log level (#4687, 4709) via @Tyriar
    const term = new Terminal({
        logLevel: 'trace'
    });
  • New logger delegate option (#4563, #4564) via @Tyriar. This new API allows the embedder to define the logging behavior, instead of always using to console
    const term = new Terminal({
        logger: {
            trace: (e, args) => console.log('trace: ', e, args),
            debug: (e, args) => console.log('debug: ', e, args),
            info: (e, args) => console.log('info: ', e, args),
            warn: (e, args) => console.log('warn: ', e, args),
            error: (e, args) => console.log('error: ', e, args)
        }
    });
  • New ignoreBracketedPasteMode option that allows explicitly disabling bracketed paste mode, regardless of whether the shell enables it or not (#4636) via @Tyriar
    const term = new Terminal({
        ignoreBracketedPasteMode: true
    });
  • New cursorInactiveStyle option (#4657) via @tisilent
    const term = new Terminal({
        cursorInactiveStyle: 'none'
    });

🐞 Bug fixes

  • Fix character size being affected by CSS transformations (#4366) via @arekouzounian
  • Fix mouse tracking behavior (#4583) via @jerch
  • Improve rendering of the DOM renderer's underline cursor (#4584) via @dlech
  • Fix issues in the accessibility tree (#4637) via @meganrogge
  • Fix reset and clear leaving viewport in a bad state (#4638) via @Tyriar
  • Fix API facade memory leaks (#4655) via @Tyriar
  • Fix memory leak in cursor blink state manager (#4659) via @SvanT
  • Fix inverse rendering when a transparent foreground is used (#4667) via @Dennnnny
  • Fix disposing of decorations (#4671) via @Tyriar
  • Render selection background consistently in the DOM renderer (#4673) via @Tyriar
  • Improve rendering of powerline circle line custom glyph (#4729) via @tisilent
  • Improve texture atlas utilization and fix glyph corruption when merging (#4732) via @Tyriar

📝 Documentation and internal improvements

  • Improve safety of log service (#4565) via @Tyriar
  • Exploring use of CSSStyleSheet web API (#4611, ##4619, #4678, #4680) via @SimonSiefke, @Tyriar
  • Update TypeScript to 5.1.6 (#4612) via @SimonSiefke
  • Mention discussions in CONTRIBUTING.md (#4617) via @Tyriar
  • Improve type safety of ColorIndex (#4618) via @Tyriar
  • Fix demo light theme cursor colors (#4626) via @Tyriar
  • Add nvmrc using node 16 (#4666) via @Tyriar
  • Restrict comments to 100 characters (#4668) via @Tyriar
  • Lint API xterm.d.ts file (#4669, #4677) via @Tyriar
  • General clean up (#4676, #4683, #4688, #4689, #4733) via @Tyriar
  • Reduce repetition with internal terminal types and inherit docs from API (#4679) via @Tyriar
  • Improve lifecycle of WebLinksAddon.api, test all country tlds (#4691) via @Tyriar
  • Stub out all CSI api tests (#4692) via @Tyriar
  • Migrate to GitHub Actions and speed up CI (#4693, #4697, #4698, #4699, #4700, #4710, #4712, #4715, #4716, #4734) via @Tyriar
  • Fix spaces in bce demo (#4694) via @jerch
  • Add automatic resize to demo (#4695) via @PerBothner
  • Add no unused variables lint warning (#4718) via @Tyriar
  • Fix demo warnings (#4721, #4722) via @Tyriar
  • Adopt @ts-check in JS files (#4723, #4724) via @Tyriar
  • Warn on eslint rule @typescript-eslint/no-useless-constructor (#4725) via @Tyriar
  • Warn on eslint rule @typescript-eslint/no-confusing-void-expression (#4726) via @Tyriar
  • Start migration to @playwright/test as the integration test runner (#4735) via @Tyriar

🎉 New real-world use cases

  • cloudtutor.io (#4570) via @naufalafif
  • Helix Editor Playground (#4585) via @tomgroenwoldt
  • Coder (#4595) via @matifali

📥 Addons

xterm-addon-canvas

  • Add getRasterizedGlyph null and undefined check (#4596) via @lewis-sanchez
  • Fix various underlines by rendering them upwards (#4648, #4664) via @tisilent

xterm-addon-image

  • The images addon has been merged into the main repository (#4577, #4727) via @jerch

xterm-addon-ligatures

  • Enable the ligatures addon on Electron (#4387) via @LabhanshAgrawal

xterm-addon-serialize

  • Fallback to default ANSIcolors when running xterm-headless (#4348) via @silamon

xterm-addon-webgl

  • Render the cursor in the WebGL canvas (#4568) via @xzfc

🤝 Compatible addon versions

Addon Version
xterm-addon-attach 0.9.0
xterm-addon-canvas 0.5.0
xterm-addon-fit 0.8.0
xterm-addon-image 0.5.0
xterm-addon-ligatures 0.7.0
xterm-addon-search 0.13.0
xterm-addon-serialize 0.11.0
xterm-addon-unicode11 0.6.0
xterm-addon-web-links 0.9.0
xterm-addon-webgl 0.16.0

🌐 Website

Pull from https://github.com/xtermjs/xtermjs.org/pulls?q=is%3Apr+sort%3Aupdated-desc+is%3Aclosed

2023-06-11 05:01:33
xterm.js

5.2.1

🐞 Bug fixes

  • Fix NPEs on buffer line and windowsPty option (#4551) via @Tyriar
2023-06-09 05:43:25
xterm.js

5.2.0

🚀 Features

  • Support for the overline attribute SGR 53/55 (#4526, #4532) via @Tyriar

📦 API

  • Improved Windows workarounds with the new windowsPty option (#4539) via @Tyriar

    const term = new Terminal({
      windowsPty: {
        backend: 'conpty',
        buildNumber: 19000
      }
    });

🐞 Bug fixes

  • Fix performance issue related to hovering links (#4341) via @Tyriar
  • Fix exception by validating rows are correct when rendering (#4346) via @Tyriar
  • Improve rendering of dotted underline (#4350) via @Tyriar
  • Invalidate links after resizing (#4358) via @Tyriar
  • Fix texture atlas exception thrown when changing options (#4390) via @Tyriar
  • Show hollow cursor when unfocused, regardless of cursor type (#4443) via @tisilent
  • Fix out of sync link underlines after resizing on Windows (#4458) via @Tyriar
  • Fix a lifecycle issue with decorations (#4465) via @Tyriar
  • Rerender in the DOM renderer after options change (#4475) via @kelvinhammond
  • Fix DECRQM reports and add DECBKM (#4478) via @jerch
  • Fix links not working when using a screen reader (#4491) via @jerch
  • Ensure decorations in the top layer render on top of decorations in the bottom layer (#4516) via @jeanp413
  • Avoid triggering a reflow while rendering search decorations (#4521) via @jeanp413
  • Don't apply dim to background color (#4525) via @Tyriar
  • Fix exception and performance issue when rendering link underlines (#4546) via @jerch

📝 Documentation and internal improvements

  • Remove unused buffer code (#4335) via @jerch
  • Explore a different accessibility view (#4340, #4375, #4376, #4377, #4381, #4382, #4383, #4389, #4395, #4398, #4400, #4402, #4406, #4413, #4427, #4536) via @meganrogge, @Tyriar
  • Update CI containers to Ubuntu 20.04 (#4347) via @silamon
  • Update CI containers to use Node 18 (#4542) via @silamon 4542
  • Remove unused imports (#4361) via @Eugeny
  • Replace dom helper with HTMLElement.remove() (#4364) via @Tyriar
  • Show proper parameter hints when calling createInstance (#4393) via @Tyriar
  • Correct registerMarker API docs (#4464) via @Tyriar
  • Add FAQ to new issue report (#4512) via @Tyriar
  • Fix buffer corruption for utf8 transport in demo (#4527) via @jerch

⚠️ Deprecations

  • windowsMode has been deprecated in favor of windowsPty
    // Before 5.2
    term = new Terminal({ windowsMode: true });
    // After 5.2
    term = new Terminal({
      windowsPty: {
        backend: 'conpty',
        buildNumber: 19000
      }
    });

🎉 New real-world use cases

  • graSSHopper (#4356) via @Coding-Kiwi
  • DomTerm (#4456) via @Tyriar

📥 Addons

xterm-addon-canvas

  • Fix rendering of underline on wide characters (#4352) via @Tyriar
  • Update selection properly after changing themes (#4353) via @Tyriar
  • Update selection properly after a resize (#4355) via @Tyriar
  • Correct cell background color after clearing formatting (#4438) via @jerch
  • Fix rendering of 0xE0BB and 0xE0BF powerline symbols (#4451) via @Starwort
  • Fix rendering of cursor leaving artifacts on Firefox (#4500) via @Tyriar
  • Disallow glyphs to exceed texture atlas size (#4508) via @Tyriar
  • Don't apply dim to background color (#4525) via @Tyriar
  • Fix blacked out content (#4533) via @Tyriar

xterm-addon-search

  • Improve search behavior when there are > 1000 results (#4504) via @jeanp413

xterm-addon-webgl

  • Fix rendering of underline on wide characters (#4352) via @Tyriar
  • Fix loadCell exception (#4403) via @meganrogge
  • Fix rendering of 0xE0BB and 0xE0BF powerline symbols (#4451) via @Starwort
  • Fix rendering of cursor leaving artifacts on Firefox (#4500) via @Tyriar
  • Disallow glyphs to exceed texture atlas size (#4508) via @Tyriar
  • Don't apply dim to background color (#4525) via @Tyriar
  • Fix blacked out content (#4530) via @jerch

🤝 Compatible addon versions

  • xterm-addon-attach@...
  • xterm-addon-fit@...
  • xterm-addon-ligatures@...
  • xterm-addon-search@...
  • xterm-addon-serialize@...
  • xterm-addon-unicode11@...
  • xterm-addon-web-links@...
  • xterm-addon-webgl@...
2022-12-20 02:20:24
xterm.js

5.1.0

🚀 Features

Multiple texture atlas page support (#4244, #4252, #4274) via @Tyriar

Instead of there being a hard cap of 1024x1024 on the size of the texture atlas backing the canvas and webgl renderers, multiple textures are now supported. Each individual texture is now 512x512 which allows faster uploading to the GPU and will continually merge until the maximum of 4096x4096 is reached.

The benefits in simple terms of this change are:

  • Less time from drawing a glyph to rendering it
  • Less CPU is used when lots of glyphs are used
  • Essentially unlimited space for glyphs, which is good for certain use cases but will also let us explore things like "perfect" dotted and curvy underlines in the future

Here is an example of a 512x512 texture atlas page right after the terminal has loaded and printed a powerline-based prompt:

image

And here is the 1024x1024 page after a lot of glyphs have rendered:

image

Slash and triangle custom glyphs (#4313) via @Tyriar

Eight new powerline extra custom glyphs are supported:

image

New option scrollOnUserInput (#4289) via @JasonXJ

You can now specify whether to scroll to the bottom of the terminal on user input, previously this was the default and only behavior. This new setting is enabled by default.

const term = new Terminal({ scrollOnUserInput: false });

🐞 Bug fixes

  • Fix width of upper 1/8 block character (#4134) via @Tyriar
  • Allow the renderer to be set before Terminal.open is called (#4151) via @Tyriar
  • Fix trusted types in dom renderer (#4157) via @Tyriar
  • Fix several memory retention issues (#4185) via @Tyriar
  • Remove check proposed api checks (#4204) via @silamon
  • Clear the extended attribute on CSI 0 m via @JasonXJ
  • Fix clipping of italic emoji (#4237) via @Tyriar
  • Fix some edge cases in screenReaderMode (#4284) via @JasonXJ
  • Send corresponding escape code for alt+space and ctrl+alt+space (#4290) via @JasonXJ
  • Re-evaluate the link under the cursor instead dropping it completely when the terminal buffer changes (#4298) via @jerch

🏎️ Performance

  • Optimizations to prevent blocking the main thread when resizing the buffer (#4115) via @jerch
  • Reduce xterm.js start up time by deferring texture atlas warm up to an idle callback (#4131) via @Tyriar
  • Optimize canvas contexts for frequent reading (#4137, #4169) via @Tyriar
  • Share rgba vars throughout Color.ts, fast setTheme parseColor (#4140) via @Tyriar
  • Introduce new IdleTaskQueue and PriorityTaskQueue internal helpers (#4141, #4143, #4144, #4155, #4293) via @Tyriar
  • Defer paused renderer resize handling to idle callbacks (#4142) via @Tyriar
  • Optimize critical I/O path for input latency (#4145, #4153, #4159, #4160, #4194) via @Tyriar, @jerch, @silamon
  • Remove unnecessary clipping of texture atlas glyphs (#4200, #4201) via @Tyriar, @jerch
  • Fix dropped frame issue caused by decorations (#4226) via @Tyriar
  • Support multiple texture atlas pages (#4244) via @Tyriar

📝 Documentation and internal improvements

  • Lint the codebase using putout (#4118) via @coderaiser
  • Remove special publishing of v5 builds (#4123) via @Tyriar
  • Correct comment on allowProposedApi (#4125) via @BattlefieldDuck
  • Move real-world uses section down (#4152) via @dstein64
  • Remove queueMicrotask polyfill (#4154) via @Tyriar
  • General refactoring (#4162, #4179, #4205, #4207, #4209, #4210, #4301, #4304, #4328) via @Tyriar
  • Inline dirty row service into input handler (#4163) via @Tyriar
  • Define all events and emitters consistently (#4165, #4177) via @Tyriar
  • Bump copyright year (#4176) via @Tyriar
  • Lint rule for on=event emitter and rename all methods with on prefix to handle (#4187) via @Tyriar
  • Create theme service (#4188) via @Tyriar
  • Switch CI agent to Ubuntu 20.04 (#4192) via @silamon
  • Fix webgl loading in the demo (#4193) via @silamon
  • Create onSpecificOptionChange and onMultipleOptionChange helpers (#4195) via @Tyriar
  • Add eslint-plugin-jsdoc with minimal comment rules (#4206) via @Tyriar
  • replit branding change (#4211) via @hackermondev
  • Revert decoration dispose changes (#4215) via @meganrogge
  • Change clearing innerText to using replaceChildren to fix testing using jsdom (#4217) via @Nokel81
  • Fix resize in demo (#4233) via @Tyriar
  • Cache ICoreBrowserService.isFocused per task (#4234) via @Tyriar
  • Avoid GC pressure from server data buffer (#4235) via @Tyriar
  • Add console.image helper (#4236) via @Tyriar
  • Remove promise and fetch shims and use await for fetch (#4240) via @Tyriar
  • Remove fill polyfill (#4249) via @Tyriar
  • New test buttons in the demo (#4254, #4306, #4311, #4330) via @Tyriar
  • Add custom keymap example to attachCustomKeyEventHandler docs (#4280) via @Tyriar
  • Dev dependency updates (#4286, #4287) via @Tyriar, @dependabot
  • Fix demo in Epiphany browser (#4291) via @jerch
  • Explain danger of XSS more explicitly with the linkHandler API (#4310) via @Tyriar
  • Point new issue questions at GH discussions (#4312) via @Tyriar
  • Allow scroll bar interaction in demo in screenReaderMode (#4315) via @Tyriar
  • Explain object option edge case (#4322) via @Tyriar
  • Improve IAttributeData jsdoc (#4327) via @Tyriar

🛑 Breaking changes

  • There is a new allowNonHttpProtocols property on ILinkHandler which forces the embedder to opt-in to non-http(s) protocols. This is a breaking change in a minor release as it could improve security of embedders.
    // before 5.1.0
    const term = new Terminal({
      linkHandler: {
        ...
      }
    };
    
    // after 5.1.0
    const term = new Terminal({
      linkHandler: {
        // If you explicitly support and sanitize the links
        allowNonHttpProtocols: true,
        ...
      }
    };

🎉 New real-world use cases

  • Super Terminal (#4276) via @bugwheels94

📥 Addons

xterm-addon-attach

  • Warn/throw on unexpected attach addon socket state (#4208) via @Tyriar

xterm-addon-canvas

  • Share texture atlases between the webgl and canvas renderers (#4170, #4168, #4182) via @Tyriar
  • Fix glyphs becoming garbled or invisible (#4189) via @Tyriar
  • Disable canvas ImageBitmap optimization on Safari (#4219) via @Tyriar
  • Correctly offset minimumContrastRatio check (#4239) via @Tyriar
  • Fix line height and letter spacing rendering (#4305) via @Tyriar
  • Fix canvas renderer selection not re-rendering sometimes (#4325) via @Tyriar

xterm-addon-serialize

  • Fallback to default ansi colors when running xterm-headless (#4196) via @silamon

xterm-addon-webgl

  • Fix glyphs becoming garbled or invisible (#4180, #4181) via @Tyriar
  • Share texture atlases between the webgl and canvas renderers (#4170, #4168, #4182) via @Tyriar
  • Enable the webgl renderer on safari 16 and above (#4255) via @Tyriar
  • Fixes disappearance of characters in webgl renderer (#4271) via @jeanp413
  • Fix NPE in webgl renderer (#4326) via @Tyriar

xterm-addon-web-links

  • Major rework of the addon (#4288) via @jerch. This adds support for more URLs, fixes underlines sometimes being incorrect and changes the regex. There will be regressions in previous behavior with this but overall it's in a much better state. If you find any problems please report them to us.
  • Add 1024 character limit (#4251) via @Tyriar

🤝 Compatible addon versions

  • xterm-addon-attach@0.7.0
  • xterm-addon-fit@0.7.0
  • xterm-addon-ligatures@0.6.0
  • xterm-addon-search@0.11.0
  • xterm-addon-serialize@0.9.0
  • xterm-addon-unicode11@0.5.0
  • xterm-addon-web-links@0.8.0
  • xterm-addon-webgl@0.14.0
2022-09-16 03:33:47
xterm.js

5.0.0

v5 is here! This is our largest release in a long time, maybe ever 👀

Since this was a major version bump, we used the opportunity to clean up the API and make other breaking changes. Many of these changes enabled a significant reduction in the xterm module bundle size which went from 379kb to 265kb for a 30% reduction!

🚀 Features

Underline style and color support (#3921, #3976, #3980, #4053, #4068, #4074, #4077, #4109) via @Tyriar

Underline style and color sequences such as CSI 4:2m ST for double underlines are now supported:

image

Some work was also done to improve underline rendering overall, characters with long descenders don't overlap with the underline:

image

Hyperlink escape sequence support (#4005, #4087, #4088) via @Tyriar, @jerch

Building upon the improved underline rendering, hyperlink escapes outlined in this gist are now supported. They will be rendered using a dashed underline (like CSI 4:5m ST):

image

Along with this is a new linkHandler option which allows controling hover, leave and activate events, for example to show a custom tooltip. VS Code's implementation looks like this:

image

Smooth scroll support (#3940) via @Tyriar

The new smoothScrollDuration allows setting a duration in milliseconds to animate scroll between the origin and target positions. This is most useful when using a physical mouse (not a trackpad) to help not disorient the user when scrolling with the mouse wheel.

Canvas renderer addon (#3949, #3950, #3954, #3959, #3961, #3981) via @Tyriar

The canvas renderer has moved into an addon, significantly reducing the bundle size of the xterm module. This used to be the default renderer and is now recommended only as a fallback to the webgl addon if that does not work for some reason (eg. no webgl2 support).

New VT feature support (#4093, #4095, #4098)via @jerch

xterm.js handles several new VT sequences:

  • SGR-pixels mouse reports support (#4093) via @jerch
  • DECRQM support - ANSI and DEC private mode reporting (#4095) via @jerch
  • Protection flag support (#4098) via @jerch

Other features

  • Powerline semi-circle glyphs are now custom rendered (#3891) via @sbatten
  • Inactive selection background (#3965) via @Tyriar - ITheme.selectionInactiveBackground will now change the selection color when the terminal is not focused
  • Support setting extended ansi colors 16-255 (#3905, #3909) via @silamon, @Tyriar
  • The parser and buffer APIs are now stable (#3951) via @Tyriar
  • Rendering should now work when opening xterm.js in a popout window (#4069) via @mihaip

🐞 Bug fixes

  • Fix an exception when markers are deleted (#3888, #3901) via @Tyriar
  • Make corner box glyphs uniformly round (#3895) via @Tyriar
  • Fix changing allowTransparency from its initial value in the Terminal constructor (#3899) via @Tyriar
  • Throw when setting an invalid cursorStyle (#3900) via @Tyriar
  • Allow markers in the alt buffer (#3924) via @silamon
  • Retain hue when minimum contrast ratio flips luminance (#3929) via @Tyriar
  • Remove shift+backspace -> ^H binding (#3935) via @Tyriar
  • Fix disabling the webgl addon in the demo (#3988) via @Tyriar
  • Improve deletion handling on Android (#4007) via @ink404
  • Fix performance regression introduced with decoration support (#4080) via @Tyriar

📝 Documentation and internal improvements

  • Update CI macOS base image (#3906) via @silamon
  • Fix dev container docker build (#3907) via @silamon
  • Add theme picker to demo (#3922) via @Tyriar
  • Improve texture atlas presentation in demo (#3923, #3985) via @Tyriar
  • Support overviewRulerWidth in demo (#3927) via @Tyriar
  • Fix test-api running unit tests as well as API tests (#3934) via @Tyriar
  • v5 release preparations (#3942, #3943, #3953, #3956, #3957, #3999) via @Tyriar
  • Clarify in docs you shouldn't use the object after Terminal.dispose is called (#3958) via @Tyriar
  • Fix mocha test explorer support (#3966) via @silamon
  • Add note to the windowsMode option for the version of Windows 11 that it's recommended to be disabled on (#3967) via @Tyriar
  • Fix demo when loading webgl addon throws (#3983) via @silamon
  • Add ANSI colors test button to demo (#3991) via @deepanshu44
  • The TypeScript output target is now es2015 (was es5) (#3992) via @SvanT, this resulted in a 17% reduction in bundle size
  • Fix some typos (#4055) via @GreenMashimaro
  • Fix lgtm.io recommendations (#4089) via @Tyriar
  • Add CodeQL analysis to CI (#4090) via @Tyriar

🛑 Breaking changes

  • bellSound and bellStyle options as well as the previously builtin sound have been removed (#3941) via @Tyriar. This reduces the bundle size while still allowing the embedder to support the terminal bell via the Terminal.onBell API

    // before 5.0.0
    term = new Terminal({
      bellStyle: 'sound'
    });
    
    // after 5.0.0
    term = new Terminal();
    term.onBell(() => {
      // Play a sound
    });
  • The link matcher API registerLinkMatcher and deregisterLinkMatcher have been removed in favor of the link provider API (#3944) via @Tyriar.

  • The allowProposedApi option now defaults to false, set this to true to opt-in to proposed API usage if you understand the implications (#3945) via @Tyriar

    // before 5.0.0
    term = new Terminal({});
    term.someProposedApi();
    
    // after 5.0.0
    term = new Terminal({
      allowProposedApi: true
    });
    term.someProposedApi();
  • The deprecated addMarker API has been removed in favor of registerMarker (#3946) via @Tyriar. They are functionally equivalent.

  • The deprecated getOption and setOption APIs have been removed in favor of options (#3947) via @Tyriar

    // before 5.0.0
    term.setOption('scrollback', 1000);
    console.log(term.getOption('scrollback'));
    
    // after 5.0.0
    term.options.scrollback = 1000;
    console.log(term.options.scrollback);
  • The deprecated writeUtf8 API has been removed in favor of write (#3947) via @Tyriar.

    const arr = new Uint8Array(10);
    
    // before 5.0.0
    term.writeUtf8(arr);
    
    // after 5.0.0
    term.write(arr);
  • ISelectionPosition have been removed from the API in favor of IBufferRange (#3952) via @Tyriar

  • cols and rows options can now only be set in the constructor (#3960, #3972, #4078) via @Tyriar, @silamon

    // before 5.0.0
    term.setOption('cols', 10);
    
    // after 5.0.0
    term.resize(10, term.rows);
  • ITheme.selection has been renamed to selectionBackground for consistency (#3964) via @Tyriar

    // before 5.0.0
    term.options.theme = { selection: '#000000' };
    
    // after 5.0.0
    term.options.theme = { selectionBackground: '#000000' };
  • The Terminal.options getter now returns a Required<ITerminalOptions> instead of just ITerminalOptions for better correctness. Along with this change fastScrollModifier now accepts 'none' instead of undefined

    // before 5.0.0
    new Terminal({ fastScrollModifier: undefined });
    
    // after 5.0.0
    new Terminal({ fastScrollModifier: 'none' });

🎉 New real-world use cases

  • Go SSH Web Client (#3883) via @wuchihsu
  • web3os (#3884) via @mathiscode
  • Cratecode (#3908) via @uellenberg
  • Update maintained fork: yudai/gotty -> sorenisanerd/gotty (#4094) via @sorenisanerd

📥 Addons

xterm-addon-canvas

  • Redraw selection on resize (#3938) via @Tyriar
  • Fix rendering of the (U+259B) character (#3902) via @Tyriar
  • Fix blurry rendering that could happen when using a non-round devicePixelRatio (#3926, #4009, #4105) via @Tyriar, @jeanp413
  • Overdraw powerline strokes such that the top and bottom are flat against the cell boundaries (#4070) via @Tyriar
  • Show entire glyph for extra powerline symbols (#4073, #4086) via @Tyriar

xterm-addon-fit

  • Fix return type of proposeDimensions to include undefined (#3882) via @jerch

xterm-addon-ligatures

  • Warn when ligature fonts fail to download (#3933) via @Tyriar
  • Fix the addon in the latest version of Chrome (#3936) via @Tyriar
  • Fallback ligatures are now supported, allowing ligatures to work without font access (#3963) via @Tyriar
  • Remove electron renderer and node targets (#4002, #4003) via @Tyriar

xterm-addon-web-links

  • The link matcher-based implementation has been removed in favor of the link provider implementation (#3944) via @Tyriar

xterm-addon-webgl

More efficient GPU memory usage using new texture atlas packing strategy (#3979) via @Tyriar

The previous naive texture packing strategy which only allowed adding to the "active row" or below has been replaced with a new strategy that uses multiple active rows and adds glyphs to the most suitable row based on its pixel height. This leads to more effective usage of the texture xterm.js uploads to the GPU, meaning it's harder to reset the texture when it becomes filled (which is more likely to happen when screen scale is high).

Before:

image

After:

image

Other changes

  • Release webgl resources when the addon is disposed (#3890) via @Tyriar
  • Clip pixels to the left of a cell when the background color changes, preventing pixels overflowing (#3896) via @Tyriar
  • Clear glyph pixels when all channels differ below some threshold (#3897) via @Tyriar
  • Fix rendering of the (U+259B) character (#3902) via @Tyriar
  • Fix blurry rendering that could happen when using a non-round devicePixelRatio (#3926, #4009, #4105) via @Tyriar, @jeanp413
  • Fix dim rendering edge cases (#3973, #3989) via @Tyriar
  • Fix powerline and other custom glyph offsets and support letter spacing (#3985, #4085) via @Tyriar
  • Polish powerline rendering so the middle of the stroke won't be cut off (#3987) via @Tyriar
  • Overdraw powerline strokes such that the top and bottom are flat against the cell boundaries (#4070) via @Tyriar
  • Show entire glyph for extra powerline symbols (#4073, #4086) via @Tyriar
  • Improve handling of canvas context loss (#4075) via @kenrussell
  • Fix performance regressions (#4081, #4084) via @Tyriar
  • Clear the glyph renderer when the model is cleared (#4101) via @JasonXJ
  • Fix the cursor character being drawn outside the cursor cell (#4102) via @JasonXJ

🤝 Compatible addon versions

  • xterm-addon-attach@0.7.0
  • xterm-addon-canvas@0.2.0
  • xterm-addon-fit@0.6.0
  • xterm-addon-ligatures@0.6.0
  • xterm-addon-search@0.10.0
  • xterm-addon-serialize@0.8.0
  • xterm-addon-unicode11@0.4.0
  • xterm-addon-web-links@0.7.0
  • xterm-addon-webgl@0.13.0

🌐 Website

  • Fix bootstrap 404 in some locales (xtermjs/xtermjs.org#179) via @fu1996
2022-06-30 01:05:04
xterm.js

4.19.0

🚀 Features

  • The minimum contrast ratio feature will now change luminance in the opposite direction if the contrast ratio isn't met (#3806, #3808) via @Tyriar. For example a red foreground on a slightly darker red background will try lighten the color and if the minimumContrastRatio option isn't met when #FFFFFF is reached it will try moving it towards #000000. This can cause somewhat unexpected results by changing explicitly styled whites to blacks for example but it's really good for accessibility.
  • The library now supports parsing #rgb, #rgba, rgb(r, g, b) and rgba(r, g, b, a) color formats (#3815, #3819, #3823) via @ChaseKnowlden, @Tyriar
  • Opaque selectionBackground is now supported in the DOM renderer (#3839) via @Tyriar
  • The symbol powerline font glyphs now use custom rendering when ITerminalOptions.customGlyphs is enabled (#3856, #3862, #3866) via @Tyriar image This has multiple benefits:
    • A patched powerlines font doesn't need to be installed to render the most common characters
    • Ugly lines due to anti-aliasing that can appear no longer do
    • The glyphs always use greyscale anti-aliasing (not sub-pixel)
    • ITerminalOptions.lineHeight is taken into account when rendering the glyph

📦 API

  • The overview ruler is a companion feature to the decorations introduced in 4.18.0 which shows little indicators on the scroll bar (#3676, #3687, #3688, #3689, #3693, #3694, #3695, #3697, #3702, #3711, #3723, #3730, #3733, #3738, #3788, #3791, #3792, #3841) via @meganrogge, @Tyriar. To use it, add the overviewRulerOptions property to a decoration's IDecorationOptions and it will automatically show up in the overview ruler.
    const marker = term.addMarker(1);
    const decoration = term.registerDecoration({
      marker,
      x: 5,
      overviewRulerOptions: {
        color: '#FF0000',
        position: 'left'
      }
    });
    decoration.onRender(() => {
      decoration.element.style.backgroundColor = 'red';
    });
    The width of the resulting overview ruler is controlled by ITerminalOptions.overviewRulerWidth.
  • Decorations can now change a cell's background and foreground colors (#3775, #3782) via @Tyriar. When this is set, the minimum contrast ratio feature will also be in effect.
    const decoration = term.registerDecoration({
      marker,
      backgroundColor: '#ff0000',
      foregroundColor: '#ffffff'
    });
  • Decorations can now specify the layer property to allow rendering above the selection (#3785, #3800) via @Tyriar
    const decoration = term.registerDecoration({
      marker,
      layer: 'top'
    });
  • There's a new selectionForeground theme color, when set this will use a static color for selections (#3813) via @Tyriar
    const term = new Terminal({
      theme: {
        selectionBackground: '#000000',
        selectionForeground: '#FFFFFF'
      }
    });

🐞 Bug fixes

  • Fix triple click selection edge case where initial line was getting unselected (#3669) via @silamon
  • Fixing edge cases when clearing decorations via Terminal.clear (#3671, #3868) via @meganrogge
  • Handle missing compositionend events for Sogou IME (#3680) via @Eugeny
  • Fix a bug when running emacs by preferring ST over BEL (#3704) via @meganrogge
  • Fix Alt-N/E/U handling in macOS, handle Alt-Shift-Letter (#3726) via @Eugeny
  • Fix caps lock while IMEs are being used preventing lowercase input (#3728) via @serkodev
  • Exclude powerline characters from the minimum contrast ratio feature (#3740, #3742) via @meganrogge
  • Send ctrl modifier for page up/down sequences (#3761) via @Tyriar
  • Send record separator on ctrl+@ (#3763) via @robinfai
  • Switching from webgl to dom renderer will now correctly reposition decorations (#3779) via @Tyriar
  • Decorations are now rendered in the same frame as the buffer, ensuring they stay in sync (#3796, #3818) via @meganrogge
  • Fire onSelectionChange when Terminal.select is called (#3805) via @Tyriar
  • Padding is now taken into account when converting mouse coordinates to cell positions (#3826) via @Tyriar
  • Exclude box drawing and block glyphs from the minimum contrast ratio as they are typically used to blend with background colors (#3844) via @meganrogge
  • Fix a minimum contrast ratio edge case with inverted text in the DOM renderer (#3846) via @meganrogge
  • Only send the wheel mouse event when scrolling a line or more (#3869) via @pfitzseb

📝 Documentation and internal improvements

  • Replace internal use of getOption/setOption with options (#3667) via @childrentime
  • Lint code using putout (#3674) via @coderaiser
  • Improve the way the scroll bar is hidden when scrollback is 0 (#3678) via @silamon
  • Remove unwanted console.log (#3685) via @Tyriar
  • Replace deprecated String.prototype.substr (#3713) via @CommanderRoot
  • Dependency updates (#3714, #3715) via @dependabot
  • Consolidate powerline glyph detection (#3743, #3756) via @meganrogge
  • Speed up decoration rendering (#3769) via @Tyriar
  • Enable the search highlight all matches feature in the demo by default (#3786) via @Tyriar
  • Simplify CSS rules (#3787) via @Tyriar
  • Add a warning in the demo's implementation calling out the importance of flow control (#3789) via @Tyriar
  • Deflake link provider tests (#3822) via @Tyriar
  • Standardize internal handling of colors for simplicity (#3824) via @Tyriar
  • Add convenient powerline symbol test button to demo (#3828) via @Tyriar
  • Organize demo test buttons (#3852) via @umaxyon
  • Re-enable webgl minimum contrast ratio tests (#3863) via @Tyriar
  • Fix a typo in serialize addon test (#3865) via @mmis1000

🎉 New real-world use cases

  • hack.courses (#3837) via @lp1dev
  • Render (#3871) via @crcastle
  • CloudTTY (#3876) via yankay

📥 Addons

xterm-addon-search

  • Support showing all find matches by leveraging decorations (#3698, #3707, #3708, #3709, #3710, #3736, #3750, #3757, #3767, #3768, #3811, #3835) via @meganrogge, @Tyriar
  • Return the number of results when searching (#3716, #3731, #3745, #3752, #3793, #3831, #3874) via @meganrogge
  • Allow external styling of the active result decoration via .xterm-find-active-result-decoration (#3802) via @Tyriar

xterm-addon-serialize

  • Restore cursor style during serialize (#3682) via @Tyriar

xterm-addon-web-links

  • Expose urlRegex in public API (#3719) via @LuckyGeck
  • Handle wrapped lines properly (#3718) via @LuckyGeck

xterm-addon-webgl

  • Simplified and sped up selection rendering by leveraging the decorations feature (#3782, #3860) via @Tyriar

🤝 Compatible addon versions

  • xterm-addon-attach@0.6.0
  • xterm-addon-fit@0.5.0
  • xterm-addon-ligatures@0.5.3
  • xterm-addon-search@0.9.0
  • xterm-addon-serialize@0.7.0
  • xterm-addon-unicode11@0.3.0
  • xterm-addon-web-links@0.6.0
  • xterm-addon-webgl@0.12.0

🌐 Website

2022-02-28 21:39:36
xterm.js

4.18.0

📦 API

  • Support buffer decorations (#1852) via @meganrogge

    const marker = term.addMarker(1);
    const decoration = term.registerDecoration({ marker, x: 5 });
    decoration.onRender(() => {
      decoration.element.style.backgroundColor = 'red';
    });

    Screen Shot 2022-02-28 at 11 08 39 AM

  • Make registerMarker's cursor offset optional (#3663) via @childrentime

    // Before
    const markerAtCursor = term.registerMarker(0);
    
    // After
    const markerAtCursor = term.registerMarker();

🐞 Bug fixes

  • Clear glyph vertices when switching buffers (#3624) via @Tyriar
  • On buffer clear, dispose of markers (#3628) via @meganrogge

📝 Documentation and internal improvements

  • Make VSCode tasks faster on reload (#3662) via @Tyriar

🎉 New real-world use cases

  • Libv86 Terminal Forwarding (#3664) via @hello-smile6

🤝 Compatible addon versions

  • xterm-addon-attach@0.6.0
  • xterm-addon-fit@0.5.0
  • xterm-addon-ligatures@0.5.3
  • xterm-addon-search@0.8.2
  • xterm-addon-serialize@0.6.2
  • xterm-addon-unicode11@0.3.0
  • xterm-addon-web-links@0.5.1
  • xterm-addon-webgl@0.11.4